ash/vk/
definitions.rs

1use crate::vk::aliases::*;
2use crate::vk::bitflags::*;
3use crate::vk::constants::*;
4use crate::vk::enums::*;
5use crate::vk::native::*;
6use crate::vk::platform_types::*;
7use crate::vk::prelude::*;
8use crate::vk::{ptr_chain_iter, Handle};
9use core::ffi::*;
10use core::fmt;
11use core::marker::PhantomData;
12#[deprecated = "This define is deprecated. VK_MAKE_API_VERSION should be used instead."]
13#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_MAKE_VERSION.html>"]
14pub const fn make_version(major: u32, minor: u32, patch: u32) -> u32 {
15    ((major) << 22) | ((minor) << 12) | (patch)
16}
17#[deprecated = "This define is deprecated. VK_API_VERSION_MAJOR should be used instead."]
18#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_VERSION_MAJOR.html>"]
19pub const fn version_major(version: u32) -> u32 {
20    (version) >> 22
21}
22#[deprecated = "This define is deprecated. VK_API_VERSION_MINOR should be used instead."]
23#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_VERSION_MINOR.html>"]
24pub const fn version_minor(version: u32) -> u32 {
25    ((version) >> 12) & 0x3ffu32
26}
27#[deprecated = "This define is deprecated. VK_API_VERSION_PATCH should be used instead."]
28#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_VERSION_PATCH.html>"]
29pub const fn version_patch(version: u32) -> u32 {
30    (version) & 0xfffu32
31}
32#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_MAKE_API_VERSION.html>"]
33pub const fn make_api_version(variant: u32, major: u32, minor: u32, patch: u32) -> u32 {
34    ((variant) << 29) | ((major) << 22) | ((minor) << 12) | (patch)
35}
36#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_VARIANT.html>"]
37pub const fn api_version_variant(version: u32) -> u32 {
38    (version) >> 29
39}
40#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_MAJOR.html>"]
41pub const fn api_version_major(version: u32) -> u32 {
42    ((version) >> 22) & 0x7fu32
43}
44#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_MINOR.html>"]
45pub const fn api_version_minor(version: u32) -> u32 {
46    ((version) >> 12) & 0x3ffu32
47}
48#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_PATCH.html>"]
49pub const fn api_version_patch(version: u32) -> u32 {
50    (version) & 0xfffu32
51}
52#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_1_0.html>"]
53pub const API_VERSION_1_0: u32 = make_api_version(0, 1, 0, 0);
54#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_1_1.html>"]
55pub const API_VERSION_1_1: u32 = make_api_version(0, 1, 1, 0);
56#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_1_2.html>"]
57pub const API_VERSION_1_2: u32 = make_api_version(0, 1, 2, 0);
58#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_API_VERSION_1_3.html>"]
59pub const API_VERSION_1_3: u32 = make_api_version(0, 1, 3, 0);
60#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_HEADER_VERSION.html>"]
61pub const HEADER_VERSION: u32 = 281;
62#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_HEADER_VERSION_COMPLETE.html>"]
63pub const HEADER_VERSION_COMPLETE: u32 = make_api_version(0, 1, 3, HEADER_VERSION);
64#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSampleMask.html>"]
65pub type SampleMask = u32;
66#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBool32.html>"]
67pub type Bool32 = u32;
68#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFlags.html>"]
69pub type Flags = u32;
70#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFlags64.html>"]
71pub type Flags64 = u64;
72#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceSize.html>"]
73pub type DeviceSize = u64;
74#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceAddress.html>"]
75pub type DeviceAddress = u64;
76#[repr(transparent)]
77#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
78#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPoolCreateFlags.html>"]
79pub struct QueryPoolCreateFlags(pub(crate) Flags);
80vk_bitflags_wrapped!(QueryPoolCreateFlags, Flags);
81#[repr(transparent)]
82#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
83#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineDynamicStateCreateFlags.html>"]
84pub struct PipelineDynamicStateCreateFlags(pub(crate) Flags);
85vk_bitflags_wrapped!(PipelineDynamicStateCreateFlags, Flags);
86#[repr(transparent)]
87#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
88#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineMultisampleStateCreateFlags.html>"]
89pub struct PipelineMultisampleStateCreateFlags(pub(crate) Flags);
90vk_bitflags_wrapped!(PipelineMultisampleStateCreateFlags, Flags);
91#[repr(transparent)]
92#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
93#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationStateCreateFlags.html>"]
94pub struct PipelineRasterizationStateCreateFlags(pub(crate) Flags);
95vk_bitflags_wrapped!(PipelineRasterizationStateCreateFlags, Flags);
96#[repr(transparent)]
97#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
98#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportStateCreateFlags.html>"]
99pub struct PipelineViewportStateCreateFlags(pub(crate) Flags);
100vk_bitflags_wrapped!(PipelineViewportStateCreateFlags, Flags);
101#[repr(transparent)]
102#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
103#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineTessellationStateCreateFlags.html>"]
104pub struct PipelineTessellationStateCreateFlags(pub(crate) Flags);
105vk_bitflags_wrapped!(PipelineTessellationStateCreateFlags, Flags);
106#[repr(transparent)]
107#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
108#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineInputAssemblyStateCreateFlags.html>"]
109pub struct PipelineInputAssemblyStateCreateFlags(pub(crate) Flags);
110vk_bitflags_wrapped!(PipelineInputAssemblyStateCreateFlags, Flags);
111#[repr(transparent)]
112#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
113#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineVertexInputStateCreateFlags.html>"]
114pub struct PipelineVertexInputStateCreateFlags(pub(crate) Flags);
115vk_bitflags_wrapped!(PipelineVertexInputStateCreateFlags, Flags);
116#[repr(transparent)]
117#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
118#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferViewCreateFlags.html>"]
119pub struct BufferViewCreateFlags(pub(crate) Flags);
120vk_bitflags_wrapped!(BufferViewCreateFlags, Flags);
121#[repr(transparent)]
122#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
123#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceCreateFlags.html>"]
124pub struct DeviceCreateFlags(pub(crate) Flags);
125vk_bitflags_wrapped!(DeviceCreateFlags, Flags);
126#[repr(transparent)]
127#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
128#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorPoolResetFlags.html>"]
129pub struct DescriptorPoolResetFlags(pub(crate) Flags);
130vk_bitflags_wrapped!(DescriptorPoolResetFlags, Flags);
131#[repr(transparent)]
132#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
133#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorUpdateTemplateCreateFlags.html>"]
134pub struct DescriptorUpdateTemplateCreateFlags(pub(crate) Flags);
135vk_bitflags_wrapped!(DescriptorUpdateTemplateCreateFlags, Flags);
136#[repr(transparent)]
137#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
138#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMotionInfoFlagsNV.html>"]
139pub struct AccelerationStructureMotionInfoFlagsNV(pub(crate) Flags);
140vk_bitflags_wrapped!(AccelerationStructureMotionInfoFlagsNV, Flags);
141#[repr(transparent)]
142#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
143#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMotionInstanceFlagsNV.html>"]
144pub struct AccelerationStructureMotionInstanceFlagsNV(pub(crate) Flags);
145vk_bitflags_wrapped!(AccelerationStructureMotionInstanceFlagsNV, Flags);
146#[repr(transparent)]
147#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
148#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDirectDriverLoadingFlagsLUNARG.html>"]
149pub struct DirectDriverLoadingFlagsLUNARG(pub(crate) Flags);
150vk_bitflags_wrapped!(DirectDriverLoadingFlagsLUNARG, Flags);
151#[repr(transparent)]
152#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
153#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModeCreateFlagsKHR.html>"]
154pub struct DisplayModeCreateFlagsKHR(pub(crate) Flags);
155vk_bitflags_wrapped!(DisplayModeCreateFlagsKHR, Flags);
156#[repr(transparent)]
157#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
158#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplaySurfaceCreateFlagsKHR.html>"]
159pub struct DisplaySurfaceCreateFlagsKHR(pub(crate) Flags);
160vk_bitflags_wrapped!(DisplaySurfaceCreateFlagsKHR, Flags);
161#[repr(transparent)]
162#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
163#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidSurfaceCreateFlagsKHR.html>"]
164pub struct AndroidSurfaceCreateFlagsKHR(pub(crate) Flags);
165vk_bitflags_wrapped!(AndroidSurfaceCreateFlagsKHR, Flags);
166#[repr(transparent)]
167#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
168#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkViSurfaceCreateFlagsNN.html>"]
169pub struct ViSurfaceCreateFlagsNN(pub(crate) Flags);
170vk_bitflags_wrapped!(ViSurfaceCreateFlagsNN, Flags);
171#[repr(transparent)]
172#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
173#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWaylandSurfaceCreateFlagsKHR.html>"]
174pub struct WaylandSurfaceCreateFlagsKHR(pub(crate) Flags);
175vk_bitflags_wrapped!(WaylandSurfaceCreateFlagsKHR, Flags);
176#[repr(transparent)]
177#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
178#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWin32SurfaceCreateFlagsKHR.html>"]
179pub struct Win32SurfaceCreateFlagsKHR(pub(crate) Flags);
180vk_bitflags_wrapped!(Win32SurfaceCreateFlagsKHR, Flags);
181#[repr(transparent)]
182#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
183#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkXlibSurfaceCreateFlagsKHR.html>"]
184pub struct XlibSurfaceCreateFlagsKHR(pub(crate) Flags);
185vk_bitflags_wrapped!(XlibSurfaceCreateFlagsKHR, Flags);
186#[repr(transparent)]
187#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
188#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkXcbSurfaceCreateFlagsKHR.html>"]
189pub struct XcbSurfaceCreateFlagsKHR(pub(crate) Flags);
190vk_bitflags_wrapped!(XcbSurfaceCreateFlagsKHR, Flags);
191#[repr(transparent)]
192#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
193#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDirectFBSurfaceCreateFlagsEXT.html>"]
194pub struct DirectFBSurfaceCreateFlagsEXT(pub(crate) Flags);
195vk_bitflags_wrapped!(DirectFBSurfaceCreateFlagsEXT, Flags);
196#[repr(transparent)]
197#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
198#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIOSSurfaceCreateFlagsMVK.html>"]
199pub struct IOSSurfaceCreateFlagsMVK(pub(crate) Flags);
200vk_bitflags_wrapped!(IOSSurfaceCreateFlagsMVK, Flags);
201#[repr(transparent)]
202#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
203#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMacOSSurfaceCreateFlagsMVK.html>"]
204pub struct MacOSSurfaceCreateFlagsMVK(pub(crate) Flags);
205vk_bitflags_wrapped!(MacOSSurfaceCreateFlagsMVK, Flags);
206#[repr(transparent)]
207#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
208#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMetalSurfaceCreateFlagsEXT.html>"]
209pub struct MetalSurfaceCreateFlagsEXT(pub(crate) Flags);
210vk_bitflags_wrapped!(MetalSurfaceCreateFlagsEXT, Flags);
211#[repr(transparent)]
212#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
213#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImagePipeSurfaceCreateFlagsFUCHSIA.html>"]
214pub struct ImagePipeSurfaceCreateFlagsFUCHSIA(pub(crate) Flags);
215vk_bitflags_wrapped!(ImagePipeSurfaceCreateFlagsFUCHSIA, Flags);
216#[repr(transparent)]
217#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
218#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkStreamDescriptorSurfaceCreateFlagsGGP.html>"]
219pub struct StreamDescriptorSurfaceCreateFlagsGGP(pub(crate) Flags);
220vk_bitflags_wrapped!(StreamDescriptorSurfaceCreateFlagsGGP, Flags);
221#[repr(transparent)]
222#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
223#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkHeadlessSurfaceCreateFlagsEXT.html>"]
224pub struct HeadlessSurfaceCreateFlagsEXT(pub(crate) Flags);
225vk_bitflags_wrapped!(HeadlessSurfaceCreateFlagsEXT, Flags);
226#[repr(transparent)]
227#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
228#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkScreenSurfaceCreateFlagsQNX.html>"]
229pub struct ScreenSurfaceCreateFlagsQNX(pub(crate) Flags);
230vk_bitflags_wrapped!(ScreenSurfaceCreateFlagsQNX, Flags);
231#[repr(transparent)]
232#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
233#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandPoolTrimFlags.html>"]
234pub struct CommandPoolTrimFlags(pub(crate) Flags);
235vk_bitflags_wrapped!(CommandPoolTrimFlags, Flags);
236#[repr(transparent)]
237#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
238#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportSwizzleStateCreateFlagsNV.html>"]
239pub struct PipelineViewportSwizzleStateCreateFlagsNV(pub(crate) Flags);
240vk_bitflags_wrapped!(PipelineViewportSwizzleStateCreateFlagsNV, Flags);
241#[repr(transparent)]
242#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
243#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineDiscardRectangleStateCreateFlagsEXT.html>"]
244pub struct PipelineDiscardRectangleStateCreateFlagsEXT(pub(crate) Flags);
245vk_bitflags_wrapped!(PipelineDiscardRectangleStateCreateFlagsEXT, Flags);
246#[repr(transparent)]
247#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
248#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageToColorStateCreateFlagsNV.html>"]
249pub struct PipelineCoverageToColorStateCreateFlagsNV(pub(crate) Flags);
250vk_bitflags_wrapped!(PipelineCoverageToColorStateCreateFlagsNV, Flags);
251#[repr(transparent)]
252#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
253#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageModulationStateCreateFlagsNV.html>"]
254pub struct PipelineCoverageModulationStateCreateFlagsNV(pub(crate) Flags);
255vk_bitflags_wrapped!(PipelineCoverageModulationStateCreateFlagsNV, Flags);
256#[repr(transparent)]
257#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
258#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageReductionStateCreateFlagsNV.html>"]
259pub struct PipelineCoverageReductionStateCreateFlagsNV(pub(crate) Flags);
260vk_bitflags_wrapped!(PipelineCoverageReductionStateCreateFlagsNV, Flags);
261#[repr(transparent)]
262#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
263#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkValidationCacheCreateFlagsEXT.html>"]
264pub struct ValidationCacheCreateFlagsEXT(pub(crate) Flags);
265vk_bitflags_wrapped!(ValidationCacheCreateFlagsEXT, Flags);
266#[repr(transparent)]
267#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
268#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsMessengerCreateFlagsEXT.html>"]
269pub struct DebugUtilsMessengerCreateFlagsEXT(pub(crate) Flags);
270vk_bitflags_wrapped!(DebugUtilsMessengerCreateFlagsEXT, Flags);
271#[repr(transparent)]
272#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
273#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsMessengerCallbackDataFlagsEXT.html>"]
274pub struct DebugUtilsMessengerCallbackDataFlagsEXT(pub(crate) Flags);
275vk_bitflags_wrapped!(DebugUtilsMessengerCallbackDataFlagsEXT, Flags);
276#[repr(transparent)]
277#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
278#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceMemoryReportFlagsEXT.html>"]
279pub struct DeviceMemoryReportFlagsEXT(pub(crate) Flags);
280vk_bitflags_wrapped!(DeviceMemoryReportFlagsEXT, Flags);
281#[repr(transparent)]
282#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
283#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationConservativeStateCreateFlagsEXT.html>"]
284pub struct PipelineRasterizationConservativeStateCreateFlagsEXT(pub(crate) Flags);
285vk_bitflags_wrapped!(PipelineRasterizationConservativeStateCreateFlagsEXT, Flags);
286#[repr(transparent)]
287#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
288#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationStateStreamCreateFlagsEXT.html>"]
289pub struct PipelineRasterizationStateStreamCreateFlagsEXT(pub(crate) Flags);
290vk_bitflags_wrapped!(PipelineRasterizationStateStreamCreateFlagsEXT, Flags);
291#[repr(transparent)]
292#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
293#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationDepthClipStateCreateFlagsEXT.html>"]
294pub struct PipelineRasterizationDepthClipStateCreateFlagsEXT(pub(crate) Flags);
295vk_bitflags_wrapped!(PipelineRasterizationDepthClipStateCreateFlagsEXT, Flags);
296#[repr(transparent)]
297#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
298#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionParametersCreateFlagsKHR.html>"]
299pub struct VideoSessionParametersCreateFlagsKHR(pub(crate) Flags);
300vk_bitflags_wrapped!(VideoSessionParametersCreateFlagsKHR, Flags);
301#[repr(transparent)]
302#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
303#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoBeginCodingFlagsKHR.html>"]
304pub struct VideoBeginCodingFlagsKHR(pub(crate) Flags);
305vk_bitflags_wrapped!(VideoBeginCodingFlagsKHR, Flags);
306#[repr(transparent)]
307#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
308#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEndCodingFlagsKHR.html>"]
309pub struct VideoEndCodingFlagsKHR(pub(crate) Flags);
310vk_bitflags_wrapped!(VideoEndCodingFlagsKHR, Flags);
311#[repr(transparent)]
312#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
313#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeFlagsKHR.html>"]
314pub struct VideoDecodeFlagsKHR(pub(crate) Flags);
315vk_bitflags_wrapped!(VideoDecodeFlagsKHR, Flags);
316#[repr(transparent)]
317#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
318#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeRateControlFlagsKHR.html>"]
319pub struct VideoEncodeRateControlFlagsKHR(pub(crate) Flags);
320vk_bitflags_wrapped!(VideoEncodeRateControlFlagsKHR, Flags);
321define_handle!(
322    Instance,
323    INSTANCE,
324    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInstance.html>"
325);
326define_handle!(
327    PhysicalDevice,
328    PHYSICAL_DEVICE,
329    doc =
330        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevice.html>"
331);
332define_handle!(
333    Device,
334    DEVICE,
335    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDevice.html>"
336);
337define_handle!(
338    Queue,
339    QUEUE,
340    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueue.html>"
341);
342define_handle!(
343    CommandBuffer,
344    COMMAND_BUFFER,
345    doc =
346        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBuffer.html>"
347);
348handle_nondispatchable!(
349    DeviceMemory,
350    DEVICE_MEMORY,
351    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceMemory.html>"
352);
353handle_nondispatchable!(
354    CommandPool,
355    COMMAND_POOL,
356    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandPool.html>"
357);
358handle_nondispatchable!(
359    Buffer,
360    BUFFER,
361    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBuffer.html>"
362);
363handle_nondispatchable!(
364    BufferView,
365    BUFFER_VIEW,
366    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferView.html>"
367);
368handle_nondispatchable!(
369    Image,
370    IMAGE,
371    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImage.html>"
372);
373handle_nondispatchable!(
374    ImageView,
375    IMAGE_VIEW,
376    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageView.html>"
377);
378handle_nondispatchable!(
379    ShaderModule,
380    SHADER_MODULE,
381    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderModule.html>"
382);
383handle_nondispatchable!(
384    Pipeline,
385    PIPELINE,
386    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipeline.html>"
387);
388handle_nondispatchable!(
389    PipelineLayout,
390    PIPELINE_LAYOUT,
391    doc =
392        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineLayout.html>"
393);
394handle_nondispatchable!(
395    Sampler,
396    SAMPLER,
397    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSampler.html>"
398);
399handle_nondispatchable!(
400    DescriptorSet,
401    DESCRIPTOR_SET,
402    doc =
403        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSet.html>"
404);
405handle_nondispatchable ! (DescriptorSetLayout , DESCRIPTOR_SET_LAYOUT , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayout.html>") ;
406handle_nondispatchable!(
407    DescriptorPool,
408    DESCRIPTOR_POOL,
409    doc =
410        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorPool.html>"
411);
412handle_nondispatchable!(
413    Fence,
414    FENCE,
415    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFence.html>"
416);
417handle_nondispatchable!(
418    Semaphore,
419    SEMAPHORE,
420    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphore.html>"
421);
422handle_nondispatchable!(
423    Event,
424    EVENT,
425    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkEvent.html>"
426);
427handle_nondispatchable!(
428    QueryPool,
429    QUERY_POOL,
430    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPool.html>"
431);
432handle_nondispatchable!(
433    Framebuffer,
434    FRAMEBUFFER,
435    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFramebuffer.html>"
436);
437handle_nondispatchable!(
438    RenderPass,
439    RENDER_PASS,
440    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPass.html>"
441);
442handle_nondispatchable!(
443    PipelineCache,
444    PIPELINE_CACHE,
445    doc =
446        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCache.html>"
447);
448handle_nondispatchable ! (IndirectCommandsLayoutNV , INDIRECT_COMMANDS_LAYOUT_NV , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutNV.html>") ;
449handle_nondispatchable ! (DescriptorUpdateTemplate , DESCRIPTOR_UPDATE_TEMPLATE , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorUpdateTemplate.html>") ;
450handle_nondispatchable ! (SamplerYcbcrConversion , SAMPLER_YCBCR_CONVERSION , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerYcbcrConversion.html>") ;
451handle_nondispatchable ! (ValidationCacheEXT , VALIDATION_CACHE_EXT , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkValidationCacheEXT.html>") ;
452handle_nondispatchable ! (AccelerationStructureKHR , ACCELERATION_STRUCTURE_KHR , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureKHR.html>") ;
453handle_nondispatchable ! (AccelerationStructureNV , ACCELERATION_STRUCTURE_NV , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureNV.html>") ;
454handle_nondispatchable ! (PerformanceConfigurationINTEL , PERFORMANCE_CONFIGURATION_INTEL , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceConfigurationINTEL.html>") ;
455handle_nondispatchable ! (BufferCollectionFUCHSIA , BUFFER_COLLECTION_FUCHSIA , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionFUCHSIA.html>") ;
456handle_nondispatchable ! (DeferredOperationKHR , DEFERRED_OPERATION_KHR , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeferredOperationKHR.html>") ;
457handle_nondispatchable ! (PrivateDataSlot , PRIVATE_DATA_SLOT , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPrivateDataSlot.html>") ;
458handle_nondispatchable!(
459    CuModuleNVX,
460    CU_MODULE_NVX,
461    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCuModuleNVX.html>"
462);
463handle_nondispatchable!(
464    CuFunctionNVX,
465    CU_FUNCTION_NVX,
466    doc =
467        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCuFunctionNVX.html>"
468);
469handle_nondispatchable ! (OpticalFlowSessionNV , OPTICAL_FLOW_SESSION_NV , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowSessionNV.html>") ;
470handle_nondispatchable!(
471    MicromapEXT,
472    MICROMAP_EXT,
473    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapEXT.html>"
474);
475handle_nondispatchable!(
476    ShaderEXT,
477    SHADER_EXT,
478    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderEXT.html>"
479);
480handle_nondispatchable!(
481    DisplayKHR,
482    DISPLAY_KHR,
483    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayKHR.html>"
484);
485handle_nondispatchable!(
486    DisplayModeKHR,
487    DISPLAY_MODE_KHR,
488    doc =
489        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModeKHR.html>"
490);
491handle_nondispatchable!(
492    SurfaceKHR,
493    SURFACE_KHR,
494    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceKHR.html>"
495);
496handle_nondispatchable!(
497    SwapchainKHR,
498    SWAPCHAIN_KHR,
499    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainKHR.html>"
500);
501handle_nondispatchable ! (DebugReportCallbackEXT , DEBUG_REPORT_CALLBACK_EXT , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugReportCallbackEXT.html>") ;
502handle_nondispatchable ! (DebugUtilsMessengerEXT , DEBUG_UTILS_MESSENGER_EXT , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsMessengerEXT.html>") ;
503handle_nondispatchable ! (VideoSessionKHR , VIDEO_SESSION_KHR , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionKHR.html>") ;
504handle_nondispatchable ! (VideoSessionParametersKHR , VIDEO_SESSION_PARAMETERS_KHR , doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionParametersKHR.html>") ;
505#[allow(non_camel_case_types)]
506#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkInternalAllocationNotification.html>"]
507pub type PFN_vkInternalAllocationNotification = Option<
508    unsafe extern "system" fn(
509        p_user_data: *mut c_void,
510        size: usize,
511        allocation_type: InternalAllocationType,
512        allocation_scope: SystemAllocationScope,
513    ),
514>;
515#[allow(non_camel_case_types)]
516#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkInternalFreeNotification.html>"]
517pub type PFN_vkInternalFreeNotification = Option<
518    unsafe extern "system" fn(
519        p_user_data: *mut c_void,
520        size: usize,
521        allocation_type: InternalAllocationType,
522        allocation_scope: SystemAllocationScope,
523    ),
524>;
525#[allow(non_camel_case_types)]
526#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkReallocationFunction.html>"]
527pub type PFN_vkReallocationFunction = Option<
528    unsafe extern "system" fn(
529        p_user_data: *mut c_void,
530        p_original: *mut c_void,
531        size: usize,
532        alignment: usize,
533        allocation_scope: SystemAllocationScope,
534    ) -> *mut c_void,
535>;
536#[allow(non_camel_case_types)]
537#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkAllocationFunction.html>"]
538pub type PFN_vkAllocationFunction = Option<
539    unsafe extern "system" fn(
540        p_user_data: *mut c_void,
541        size: usize,
542        alignment: usize,
543        allocation_scope: SystemAllocationScope,
544    ) -> *mut c_void,
545>;
546#[allow(non_camel_case_types)]
547#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkFreeFunction.html>"]
548pub type PFN_vkFreeFunction =
549    Option<unsafe extern "system" fn(p_user_data: *mut c_void, p_memory: *mut c_void)>;
550#[allow(non_camel_case_types)]
551#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkVoidFunction.html>"]
552pub type PFN_vkVoidFunction = Option<unsafe extern "system" fn()>;
553#[allow(non_camel_case_types)]
554#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkDebugReportCallbackEXT.html>"]
555pub type PFN_vkDebugReportCallbackEXT = Option<
556    unsafe extern "system" fn(
557        flags: DebugReportFlagsEXT,
558        object_type: DebugReportObjectTypeEXT,
559        object: u64,
560        location: usize,
561        message_code: i32,
562        p_layer_prefix: *const c_char,
563        p_message: *const c_char,
564        p_user_data: *mut c_void,
565    ) -> Bool32,
566>;
567#[allow(non_camel_case_types)]
568#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkDebugUtilsMessengerCallbackEXT.html>"]
569pub type PFN_vkDebugUtilsMessengerCallbackEXT = Option<
570    unsafe extern "system" fn(
571        message_severity: DebugUtilsMessageSeverityFlagsEXT,
572        message_types: DebugUtilsMessageTypeFlagsEXT,
573        p_callback_data: *const DebugUtilsMessengerCallbackDataEXT<'_>,
574        p_user_data: *mut c_void,
575    ) -> Bool32,
576>;
577#[allow(non_camel_case_types)]
578#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkDeviceMemoryReportCallbackEXT.html>"]
579pub type PFN_vkDeviceMemoryReportCallbackEXT = Option<
580    unsafe extern "system" fn(
581        p_callback_data: *const DeviceMemoryReportCallbackDataEXT<'_>,
582        p_user_data: *mut c_void,
583    ),
584>;
585#[allow(non_camel_case_types)]
586#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/PFN_vkGetInstanceProcAddrLUNARG.html>"]
587pub type PFN_vkGetInstanceProcAddrLUNARG = Option<
588    unsafe extern "system" fn(instance: Instance, p_name: *const c_char) -> PFN_vkVoidFunction,
589>;
590#[repr(C)]
591#[cfg_attr(feature = "debug", derive(Debug))]
592#[derive(Copy, Clone)]
593#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBaseOutStructure.html>"]
594#[must_use]
595pub struct BaseOutStructure<'a> {
596    pub s_type: StructureType,
597    pub p_next: *mut Self,
598    pub _marker: PhantomData<&'a ()>,
599}
600unsafe impl Send for BaseOutStructure<'_> {}
601unsafe impl Sync for BaseOutStructure<'_> {}
602impl ::core::default::Default for BaseOutStructure<'_> {
603    #[inline]
604    fn default() -> Self {
605        Self {
606            s_type: unsafe { ::core::mem::zeroed() },
607            p_next: ::core::ptr::null_mut(),
608            _marker: PhantomData,
609        }
610    }
611}
612#[repr(C)]
613#[cfg_attr(feature = "debug", derive(Debug))]
614#[derive(Copy, Clone)]
615#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBaseInStructure.html>"]
616#[must_use]
617pub struct BaseInStructure<'a> {
618    pub s_type: StructureType,
619    pub p_next: *const Self,
620    pub _marker: PhantomData<&'a ()>,
621}
622unsafe impl Send for BaseInStructure<'_> {}
623unsafe impl Sync for BaseInStructure<'_> {}
624impl ::core::default::Default for BaseInStructure<'_> {
625    #[inline]
626    fn default() -> Self {
627        Self {
628            s_type: unsafe { ::core::mem::zeroed() },
629            p_next: ::core::ptr::null(),
630            _marker: PhantomData,
631        }
632    }
633}
634#[repr(C)]
635#[cfg_attr(feature = "debug", derive(Debug))]
636#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
637#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOffset2D.html>"]
638#[must_use]
639pub struct Offset2D {
640    pub x: i32,
641    pub y: i32,
642}
643impl Offset2D {
644    #[inline]
645    pub fn x(mut self, x: i32) -> Self {
646        self.x = x;
647        self
648    }
649    #[inline]
650    pub fn y(mut self, y: i32) -> Self {
651        self.y = y;
652        self
653    }
654}
655#[repr(C)]
656#[cfg_attr(feature = "debug", derive(Debug))]
657#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
658#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOffset3D.html>"]
659#[must_use]
660pub struct Offset3D {
661    pub x: i32,
662    pub y: i32,
663    pub z: i32,
664}
665impl Offset3D {
666    #[inline]
667    pub fn x(mut self, x: i32) -> Self {
668        self.x = x;
669        self
670    }
671    #[inline]
672    pub fn y(mut self, y: i32) -> Self {
673        self.y = y;
674        self
675    }
676    #[inline]
677    pub fn z(mut self, z: i32) -> Self {
678        self.z = z;
679        self
680    }
681}
682#[repr(C)]
683#[cfg_attr(feature = "debug", derive(Debug))]
684#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
685#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExtent2D.html>"]
686#[must_use]
687pub struct Extent2D {
688    pub width: u32,
689    pub height: u32,
690}
691impl Extent2D {
692    #[inline]
693    pub fn width(mut self, width: u32) -> Self {
694        self.width = width;
695        self
696    }
697    #[inline]
698    pub fn height(mut self, height: u32) -> Self {
699        self.height = height;
700        self
701    }
702}
703#[repr(C)]
704#[cfg_attr(feature = "debug", derive(Debug))]
705#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
706#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExtent3D.html>"]
707#[must_use]
708pub struct Extent3D {
709    pub width: u32,
710    pub height: u32,
711    pub depth: u32,
712}
713impl Extent3D {
714    #[inline]
715    pub fn width(mut self, width: u32) -> Self {
716        self.width = width;
717        self
718    }
719    #[inline]
720    pub fn height(mut self, height: u32) -> Self {
721        self.height = height;
722        self
723    }
724    #[inline]
725    pub fn depth(mut self, depth: u32) -> Self {
726        self.depth = depth;
727        self
728    }
729}
730#[repr(C)]
731#[cfg_attr(feature = "debug", derive(Debug))]
732#[derive(Copy, Clone, Default)]
733#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkViewport.html>"]
734#[must_use]
735pub struct Viewport {
736    pub x: f32,
737    pub y: f32,
738    pub width: f32,
739    pub height: f32,
740    pub min_depth: f32,
741    pub max_depth: f32,
742}
743impl Viewport {
744    #[inline]
745    pub fn x(mut self, x: f32) -> Self {
746        self.x = x;
747        self
748    }
749    #[inline]
750    pub fn y(mut self, y: f32) -> Self {
751        self.y = y;
752        self
753    }
754    #[inline]
755    pub fn width(mut self, width: f32) -> Self {
756        self.width = width;
757        self
758    }
759    #[inline]
760    pub fn height(mut self, height: f32) -> Self {
761        self.height = height;
762        self
763    }
764    #[inline]
765    pub fn min_depth(mut self, min_depth: f32) -> Self {
766        self.min_depth = min_depth;
767        self
768    }
769    #[inline]
770    pub fn max_depth(mut self, max_depth: f32) -> Self {
771        self.max_depth = max_depth;
772        self
773    }
774}
775#[repr(C)]
776#[cfg_attr(feature = "debug", derive(Debug))]
777#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
778#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRect2D.html>"]
779#[must_use]
780pub struct Rect2D {
781    pub offset: Offset2D,
782    pub extent: Extent2D,
783}
784impl Rect2D {
785    #[inline]
786    pub fn offset(mut self, offset: Offset2D) -> Self {
787        self.offset = offset;
788        self
789    }
790    #[inline]
791    pub fn extent(mut self, extent: Extent2D) -> Self {
792        self.extent = extent;
793        self
794    }
795}
796#[repr(C)]
797#[cfg_attr(feature = "debug", derive(Debug))]
798#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
799#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkClearRect.html>"]
800#[must_use]
801pub struct ClearRect {
802    pub rect: Rect2D,
803    pub base_array_layer: u32,
804    pub layer_count: u32,
805}
806impl ClearRect {
807    #[inline]
808    pub fn rect(mut self, rect: Rect2D) -> Self {
809        self.rect = rect;
810        self
811    }
812    #[inline]
813    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
814        self.base_array_layer = base_array_layer;
815        self
816    }
817    #[inline]
818    pub fn layer_count(mut self, layer_count: u32) -> Self {
819        self.layer_count = layer_count;
820        self
821    }
822}
823#[repr(C)]
824#[cfg_attr(feature = "debug", derive(Debug))]
825#[derive(Copy, Clone, Default)]
826#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkComponentMapping.html>"]
827#[must_use]
828pub struct ComponentMapping {
829    pub r: ComponentSwizzle,
830    pub g: ComponentSwizzle,
831    pub b: ComponentSwizzle,
832    pub a: ComponentSwizzle,
833}
834impl ComponentMapping {
835    #[inline]
836    pub fn r(mut self, r: ComponentSwizzle) -> Self {
837        self.r = r;
838        self
839    }
840    #[inline]
841    pub fn g(mut self, g: ComponentSwizzle) -> Self {
842        self.g = g;
843        self
844    }
845    #[inline]
846    pub fn b(mut self, b: ComponentSwizzle) -> Self {
847        self.b = b;
848        self
849    }
850    #[inline]
851    pub fn a(mut self, a: ComponentSwizzle) -> Self {
852        self.a = a;
853        self
854    }
855}
856#[repr(C)]
857#[derive(Copy, Clone)]
858#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProperties.html>"]
859#[must_use]
860pub struct PhysicalDeviceProperties {
861    pub api_version: u32,
862    pub driver_version: u32,
863    pub vendor_id: u32,
864    pub device_id: u32,
865    pub device_type: PhysicalDeviceType,
866    pub device_name: [c_char; MAX_PHYSICAL_DEVICE_NAME_SIZE],
867    pub pipeline_cache_uuid: [u8; UUID_SIZE],
868    pub limits: PhysicalDeviceLimits,
869    pub sparse_properties: PhysicalDeviceSparseProperties,
870}
871#[cfg(feature = "debug")]
872impl fmt::Debug for PhysicalDeviceProperties {
873    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
874        fmt.debug_struct("PhysicalDeviceProperties")
875            .field("api_version", &self.api_version)
876            .field("driver_version", &self.driver_version)
877            .field("vendor_id", &self.vendor_id)
878            .field("device_id", &self.device_id)
879            .field("device_type", &self.device_type)
880            .field("device_name", &self.device_name_as_c_str())
881            .field("pipeline_cache_uuid", &self.pipeline_cache_uuid)
882            .field("limits", &self.limits)
883            .field("sparse_properties", &self.sparse_properties)
884            .finish()
885    }
886}
887impl ::core::default::Default for PhysicalDeviceProperties {
888    #[inline]
889    fn default() -> Self {
890        Self {
891            api_version: u32::default(),
892            driver_version: u32::default(),
893            vendor_id: u32::default(),
894            device_id: u32::default(),
895            device_type: PhysicalDeviceType::default(),
896            device_name: unsafe { ::core::mem::zeroed() },
897            pipeline_cache_uuid: unsafe { ::core::mem::zeroed() },
898            limits: PhysicalDeviceLimits::default(),
899            sparse_properties: PhysicalDeviceSparseProperties::default(),
900        }
901    }
902}
903impl PhysicalDeviceProperties {
904    #[inline]
905    pub fn api_version(mut self, api_version: u32) -> Self {
906        self.api_version = api_version;
907        self
908    }
909    #[inline]
910    pub fn driver_version(mut self, driver_version: u32) -> Self {
911        self.driver_version = driver_version;
912        self
913    }
914    #[inline]
915    pub fn vendor_id(mut self, vendor_id: u32) -> Self {
916        self.vendor_id = vendor_id;
917        self
918    }
919    #[inline]
920    pub fn device_id(mut self, device_id: u32) -> Self {
921        self.device_id = device_id;
922        self
923    }
924    #[inline]
925    pub fn device_type(mut self, device_type: PhysicalDeviceType) -> Self {
926        self.device_type = device_type;
927        self
928    }
929    #[inline]
930    pub fn device_name(
931        mut self,
932        device_name: &CStr,
933    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
934        write_c_str_slice_with_nul(&mut self.device_name, device_name).map(|()| self)
935    }
936    #[inline]
937    pub fn device_name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
938        wrap_c_str_slice_until_nul(&self.device_name)
939    }
940    #[inline]
941    pub fn pipeline_cache_uuid(mut self, pipeline_cache_uuid: [u8; UUID_SIZE]) -> Self {
942        self.pipeline_cache_uuid = pipeline_cache_uuid;
943        self
944    }
945    #[inline]
946    pub fn limits(mut self, limits: PhysicalDeviceLimits) -> Self {
947        self.limits = limits;
948        self
949    }
950    #[inline]
951    pub fn sparse_properties(mut self, sparse_properties: PhysicalDeviceSparseProperties) -> Self {
952        self.sparse_properties = sparse_properties;
953        self
954    }
955}
956#[repr(C)]
957#[derive(Copy, Clone)]
958#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExtensionProperties.html>"]
959#[must_use]
960pub struct ExtensionProperties {
961    pub extension_name: [c_char; MAX_EXTENSION_NAME_SIZE],
962    pub spec_version: u32,
963}
964#[cfg(feature = "debug")]
965impl fmt::Debug for ExtensionProperties {
966    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
967        fmt.debug_struct("ExtensionProperties")
968            .field("extension_name", &self.extension_name_as_c_str())
969            .field("spec_version", &self.spec_version)
970            .finish()
971    }
972}
973impl ::core::default::Default for ExtensionProperties {
974    #[inline]
975    fn default() -> Self {
976        Self {
977            extension_name: unsafe { ::core::mem::zeroed() },
978            spec_version: u32::default(),
979        }
980    }
981}
982impl ExtensionProperties {
983    #[inline]
984    pub fn extension_name(
985        mut self,
986        extension_name: &CStr,
987    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
988        write_c_str_slice_with_nul(&mut self.extension_name, extension_name).map(|()| self)
989    }
990    #[inline]
991    pub fn extension_name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
992        wrap_c_str_slice_until_nul(&self.extension_name)
993    }
994    #[inline]
995    pub fn spec_version(mut self, spec_version: u32) -> Self {
996        self.spec_version = spec_version;
997        self
998    }
999}
1000#[repr(C)]
1001#[derive(Copy, Clone)]
1002#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLayerProperties.html>"]
1003#[must_use]
1004pub struct LayerProperties {
1005    pub layer_name: [c_char; MAX_EXTENSION_NAME_SIZE],
1006    pub spec_version: u32,
1007    pub implementation_version: u32,
1008    pub description: [c_char; MAX_DESCRIPTION_SIZE],
1009}
1010#[cfg(feature = "debug")]
1011impl fmt::Debug for LayerProperties {
1012    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
1013        fmt.debug_struct("LayerProperties")
1014            .field("layer_name", &self.layer_name_as_c_str())
1015            .field("spec_version", &self.spec_version)
1016            .field("implementation_version", &self.implementation_version)
1017            .field("description", &self.description_as_c_str())
1018            .finish()
1019    }
1020}
1021impl ::core::default::Default for LayerProperties {
1022    #[inline]
1023    fn default() -> Self {
1024        Self {
1025            layer_name: unsafe { ::core::mem::zeroed() },
1026            spec_version: u32::default(),
1027            implementation_version: u32::default(),
1028            description: unsafe { ::core::mem::zeroed() },
1029        }
1030    }
1031}
1032impl LayerProperties {
1033    #[inline]
1034    pub fn layer_name(
1035        mut self,
1036        layer_name: &CStr,
1037    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
1038        write_c_str_slice_with_nul(&mut self.layer_name, layer_name).map(|()| self)
1039    }
1040    #[inline]
1041    pub fn layer_name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
1042        wrap_c_str_slice_until_nul(&self.layer_name)
1043    }
1044    #[inline]
1045    pub fn spec_version(mut self, spec_version: u32) -> Self {
1046        self.spec_version = spec_version;
1047        self
1048    }
1049    #[inline]
1050    pub fn implementation_version(mut self, implementation_version: u32) -> Self {
1051        self.implementation_version = implementation_version;
1052        self
1053    }
1054    #[inline]
1055    pub fn description(
1056        mut self,
1057        description: &CStr,
1058    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
1059        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
1060    }
1061    #[inline]
1062    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
1063        wrap_c_str_slice_until_nul(&self.description)
1064    }
1065}
1066#[repr(C)]
1067#[cfg_attr(feature = "debug", derive(Debug))]
1068#[derive(Copy, Clone)]
1069#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkApplicationInfo.html>"]
1070#[must_use]
1071pub struct ApplicationInfo<'a> {
1072    pub s_type: StructureType,
1073    pub p_next: *const c_void,
1074    pub p_application_name: *const c_char,
1075    pub application_version: u32,
1076    pub p_engine_name: *const c_char,
1077    pub engine_version: u32,
1078    pub api_version: u32,
1079    pub _marker: PhantomData<&'a ()>,
1080}
1081unsafe impl Send for ApplicationInfo<'_> {}
1082unsafe impl Sync for ApplicationInfo<'_> {}
1083impl ::core::default::Default for ApplicationInfo<'_> {
1084    #[inline]
1085    fn default() -> Self {
1086        Self {
1087            s_type: Self::STRUCTURE_TYPE,
1088            p_next: ::core::ptr::null(),
1089            p_application_name: ::core::ptr::null(),
1090            application_version: u32::default(),
1091            p_engine_name: ::core::ptr::null(),
1092            engine_version: u32::default(),
1093            api_version: u32::default(),
1094            _marker: PhantomData,
1095        }
1096    }
1097}
1098unsafe impl<'a> TaggedStructure for ApplicationInfo<'a> {
1099    const STRUCTURE_TYPE: StructureType = StructureType::APPLICATION_INFO;
1100}
1101impl<'a> ApplicationInfo<'a> {
1102    #[inline]
1103    pub fn application_name(mut self, application_name: &'a CStr) -> Self {
1104        self.p_application_name = application_name.as_ptr();
1105        self
1106    }
1107    #[inline]
1108    pub unsafe fn application_name_as_c_str(&self) -> Option<&CStr> {
1109        if self.p_application_name.is_null() {
1110            None
1111        } else {
1112            Some(CStr::from_ptr(self.p_application_name))
1113        }
1114    }
1115    #[inline]
1116    pub fn application_version(mut self, application_version: u32) -> Self {
1117        self.application_version = application_version;
1118        self
1119    }
1120    #[inline]
1121    pub fn engine_name(mut self, engine_name: &'a CStr) -> Self {
1122        self.p_engine_name = engine_name.as_ptr();
1123        self
1124    }
1125    #[inline]
1126    pub unsafe fn engine_name_as_c_str(&self) -> Option<&CStr> {
1127        if self.p_engine_name.is_null() {
1128            None
1129        } else {
1130            Some(CStr::from_ptr(self.p_engine_name))
1131        }
1132    }
1133    #[inline]
1134    pub fn engine_version(mut self, engine_version: u32) -> Self {
1135        self.engine_version = engine_version;
1136        self
1137    }
1138    #[inline]
1139    pub fn api_version(mut self, api_version: u32) -> Self {
1140        self.api_version = api_version;
1141        self
1142    }
1143}
1144#[repr(C)]
1145#[derive(Copy, Clone)]
1146#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAllocationCallbacks.html>"]
1147#[must_use]
1148pub struct AllocationCallbacks<'a> {
1149    pub p_user_data: *mut c_void,
1150    pub pfn_allocation: PFN_vkAllocationFunction,
1151    pub pfn_reallocation: PFN_vkReallocationFunction,
1152    pub pfn_free: PFN_vkFreeFunction,
1153    pub pfn_internal_allocation: PFN_vkInternalAllocationNotification,
1154    pub pfn_internal_free: PFN_vkInternalFreeNotification,
1155    pub _marker: PhantomData<&'a ()>,
1156}
1157unsafe impl Send for AllocationCallbacks<'_> {}
1158unsafe impl Sync for AllocationCallbacks<'_> {}
1159#[cfg(feature = "debug")]
1160impl fmt::Debug for AllocationCallbacks<'_> {
1161    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
1162        fmt.debug_struct("AllocationCallbacks")
1163            .field("p_user_data", &self.p_user_data)
1164            .field(
1165                "pfn_allocation",
1166                &(self.pfn_allocation.map(|x| x as *const ())),
1167            )
1168            .field(
1169                "pfn_reallocation",
1170                &(self.pfn_reallocation.map(|x| x as *const ())),
1171            )
1172            .field("pfn_free", &(self.pfn_free.map(|x| x as *const ())))
1173            .field(
1174                "pfn_internal_allocation",
1175                &(self.pfn_internal_allocation.map(|x| x as *const ())),
1176            )
1177            .field(
1178                "pfn_internal_free",
1179                &(self.pfn_internal_free.map(|x| x as *const ())),
1180            )
1181            .finish()
1182    }
1183}
1184impl ::core::default::Default for AllocationCallbacks<'_> {
1185    #[inline]
1186    fn default() -> Self {
1187        Self {
1188            p_user_data: ::core::ptr::null_mut(),
1189            pfn_allocation: PFN_vkAllocationFunction::default(),
1190            pfn_reallocation: PFN_vkReallocationFunction::default(),
1191            pfn_free: PFN_vkFreeFunction::default(),
1192            pfn_internal_allocation: PFN_vkInternalAllocationNotification::default(),
1193            pfn_internal_free: PFN_vkInternalFreeNotification::default(),
1194            _marker: PhantomData,
1195        }
1196    }
1197}
1198impl<'a> AllocationCallbacks<'a> {
1199    #[inline]
1200    pub fn user_data(mut self, user_data: *mut c_void) -> Self {
1201        self.p_user_data = user_data;
1202        self
1203    }
1204    #[inline]
1205    pub fn pfn_allocation(mut self, pfn_allocation: PFN_vkAllocationFunction) -> Self {
1206        self.pfn_allocation = pfn_allocation;
1207        self
1208    }
1209    #[inline]
1210    pub fn pfn_reallocation(mut self, pfn_reallocation: PFN_vkReallocationFunction) -> Self {
1211        self.pfn_reallocation = pfn_reallocation;
1212        self
1213    }
1214    #[inline]
1215    pub fn pfn_free(mut self, pfn_free: PFN_vkFreeFunction) -> Self {
1216        self.pfn_free = pfn_free;
1217        self
1218    }
1219    #[inline]
1220    pub fn pfn_internal_allocation(
1221        mut self,
1222        pfn_internal_allocation: PFN_vkInternalAllocationNotification,
1223    ) -> Self {
1224        self.pfn_internal_allocation = pfn_internal_allocation;
1225        self
1226    }
1227    #[inline]
1228    pub fn pfn_internal_free(mut self, pfn_internal_free: PFN_vkInternalFreeNotification) -> Self {
1229        self.pfn_internal_free = pfn_internal_free;
1230        self
1231    }
1232}
1233#[repr(C)]
1234#[cfg_attr(feature = "debug", derive(Debug))]
1235#[derive(Copy, Clone)]
1236#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceQueueCreateInfo.html>"]
1237#[must_use]
1238pub struct DeviceQueueCreateInfo<'a> {
1239    pub s_type: StructureType,
1240    pub p_next: *const c_void,
1241    pub flags: DeviceQueueCreateFlags,
1242    pub queue_family_index: u32,
1243    pub queue_count: u32,
1244    pub p_queue_priorities: *const f32,
1245    pub _marker: PhantomData<&'a ()>,
1246}
1247unsafe impl Send for DeviceQueueCreateInfo<'_> {}
1248unsafe impl Sync for DeviceQueueCreateInfo<'_> {}
1249impl ::core::default::Default for DeviceQueueCreateInfo<'_> {
1250    #[inline]
1251    fn default() -> Self {
1252        Self {
1253            s_type: Self::STRUCTURE_TYPE,
1254            p_next: ::core::ptr::null(),
1255            flags: DeviceQueueCreateFlags::default(),
1256            queue_family_index: u32::default(),
1257            queue_count: u32::default(),
1258            p_queue_priorities: ::core::ptr::null(),
1259            _marker: PhantomData,
1260        }
1261    }
1262}
1263unsafe impl<'a> TaggedStructure for DeviceQueueCreateInfo<'a> {
1264    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_QUEUE_CREATE_INFO;
1265}
1266pub unsafe trait ExtendsDeviceQueueCreateInfo {}
1267impl<'a> DeviceQueueCreateInfo<'a> {
1268    #[inline]
1269    pub fn flags(mut self, flags: DeviceQueueCreateFlags) -> Self {
1270        self.flags = flags;
1271        self
1272    }
1273    #[inline]
1274    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
1275        self.queue_family_index = queue_family_index;
1276        self
1277    }
1278    #[inline]
1279    pub fn queue_priorities(mut self, queue_priorities: &'a [f32]) -> Self {
1280        self.queue_count = queue_priorities.len() as _;
1281        self.p_queue_priorities = queue_priorities.as_ptr();
1282        self
1283    }
1284    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
1285    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
1286    #[doc = r" valid extension structs can be pushed into the chain."]
1287    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
1288    #[doc = r" chain will look like `A -> D -> B -> C`."]
1289    pub fn push_next<T: ExtendsDeviceQueueCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
1290        unsafe {
1291            let next_ptr = <*const T>::cast(next);
1292            let last_next = ptr_chain_iter(next).last().unwrap();
1293            (*last_next).p_next = self.p_next as _;
1294            self.p_next = next_ptr;
1295        }
1296        self
1297    }
1298}
1299#[repr(C)]
1300#[cfg_attr(feature = "debug", derive(Debug))]
1301#[derive(Copy, Clone)]
1302#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceCreateInfo.html>"]
1303#[must_use]
1304pub struct DeviceCreateInfo<'a> {
1305    pub s_type: StructureType,
1306    pub p_next: *const c_void,
1307    pub flags: DeviceCreateFlags,
1308    pub queue_create_info_count: u32,
1309    pub p_queue_create_infos: *const DeviceQueueCreateInfo<'a>,
1310    #[deprecated = "functionality described by this member no longer operates"]
1311    pub enabled_layer_count: u32,
1312    #[deprecated = "functionality described by this member no longer operates"]
1313    pub pp_enabled_layer_names: *const *const c_char,
1314    pub enabled_extension_count: u32,
1315    pub pp_enabled_extension_names: *const *const c_char,
1316    pub p_enabled_features: *const PhysicalDeviceFeatures,
1317    pub _marker: PhantomData<&'a ()>,
1318}
1319unsafe impl Send for DeviceCreateInfo<'_> {}
1320unsafe impl Sync for DeviceCreateInfo<'_> {}
1321impl ::core::default::Default for DeviceCreateInfo<'_> {
1322    #[inline]
1323    fn default() -> Self {
1324        #[allow(deprecated)]
1325        Self {
1326            s_type: Self::STRUCTURE_TYPE,
1327            p_next: ::core::ptr::null(),
1328            flags: DeviceCreateFlags::default(),
1329            queue_create_info_count: u32::default(),
1330            p_queue_create_infos: ::core::ptr::null(),
1331            enabled_layer_count: u32::default(),
1332            pp_enabled_layer_names: ::core::ptr::null(),
1333            enabled_extension_count: u32::default(),
1334            pp_enabled_extension_names: ::core::ptr::null(),
1335            p_enabled_features: ::core::ptr::null(),
1336            _marker: PhantomData,
1337        }
1338    }
1339}
1340unsafe impl<'a> TaggedStructure for DeviceCreateInfo<'a> {
1341    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_CREATE_INFO;
1342}
1343pub unsafe trait ExtendsDeviceCreateInfo {}
1344impl<'a> DeviceCreateInfo<'a> {
1345    #[inline]
1346    pub fn flags(mut self, flags: DeviceCreateFlags) -> Self {
1347        self.flags = flags;
1348        self
1349    }
1350    #[inline]
1351    pub fn queue_create_infos(
1352        mut self,
1353        queue_create_infos: &'a [DeviceQueueCreateInfo<'a>],
1354    ) -> Self {
1355        self.queue_create_info_count = queue_create_infos.len() as _;
1356        self.p_queue_create_infos = queue_create_infos.as_ptr();
1357        self
1358    }
1359    #[deprecated = "functionality described by this member no longer operates"]
1360    #[allow(deprecated)]
1361    #[inline]
1362    pub fn enabled_layer_names(mut self, enabled_layer_names: &'a [*const c_char]) -> Self {
1363        self.enabled_layer_count = enabled_layer_names.len() as _;
1364        self.pp_enabled_layer_names = enabled_layer_names.as_ptr();
1365        self
1366    }
1367    #[inline]
1368    pub fn enabled_extension_names(mut self, enabled_extension_names: &'a [*const c_char]) -> Self {
1369        self.enabled_extension_count = enabled_extension_names.len() as _;
1370        self.pp_enabled_extension_names = enabled_extension_names.as_ptr();
1371        self
1372    }
1373    #[inline]
1374    pub fn enabled_features(mut self, enabled_features: &'a PhysicalDeviceFeatures) -> Self {
1375        self.p_enabled_features = enabled_features;
1376        self
1377    }
1378    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
1379    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
1380    #[doc = r" valid extension structs can be pushed into the chain."]
1381    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
1382    #[doc = r" chain will look like `A -> D -> B -> C`."]
1383    pub fn push_next<T: ExtendsDeviceCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
1384        unsafe {
1385            let next_ptr = <*const T>::cast(next);
1386            let last_next = ptr_chain_iter(next).last().unwrap();
1387            (*last_next).p_next = self.p_next as _;
1388            self.p_next = next_ptr;
1389        }
1390        self
1391    }
1392}
1393#[repr(C)]
1394#[cfg_attr(feature = "debug", derive(Debug))]
1395#[derive(Copy, Clone)]
1396#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInstanceCreateInfo.html>"]
1397#[must_use]
1398pub struct InstanceCreateInfo<'a> {
1399    pub s_type: StructureType,
1400    pub p_next: *const c_void,
1401    pub flags: InstanceCreateFlags,
1402    pub p_application_info: *const ApplicationInfo<'a>,
1403    pub enabled_layer_count: u32,
1404    pub pp_enabled_layer_names: *const *const c_char,
1405    pub enabled_extension_count: u32,
1406    pub pp_enabled_extension_names: *const *const c_char,
1407    pub _marker: PhantomData<&'a ()>,
1408}
1409unsafe impl Send for InstanceCreateInfo<'_> {}
1410unsafe impl Sync for InstanceCreateInfo<'_> {}
1411impl ::core::default::Default for InstanceCreateInfo<'_> {
1412    #[inline]
1413    fn default() -> Self {
1414        Self {
1415            s_type: Self::STRUCTURE_TYPE,
1416            p_next: ::core::ptr::null(),
1417            flags: InstanceCreateFlags::default(),
1418            p_application_info: ::core::ptr::null(),
1419            enabled_layer_count: u32::default(),
1420            pp_enabled_layer_names: ::core::ptr::null(),
1421            enabled_extension_count: u32::default(),
1422            pp_enabled_extension_names: ::core::ptr::null(),
1423            _marker: PhantomData,
1424        }
1425    }
1426}
1427unsafe impl<'a> TaggedStructure for InstanceCreateInfo<'a> {
1428    const STRUCTURE_TYPE: StructureType = StructureType::INSTANCE_CREATE_INFO;
1429}
1430pub unsafe trait ExtendsInstanceCreateInfo {}
1431impl<'a> InstanceCreateInfo<'a> {
1432    #[inline]
1433    pub fn flags(mut self, flags: InstanceCreateFlags) -> Self {
1434        self.flags = flags;
1435        self
1436    }
1437    #[inline]
1438    pub fn application_info(mut self, application_info: &'a ApplicationInfo<'a>) -> Self {
1439        self.p_application_info = application_info;
1440        self
1441    }
1442    #[inline]
1443    pub fn enabled_layer_names(mut self, enabled_layer_names: &'a [*const c_char]) -> Self {
1444        self.enabled_layer_count = enabled_layer_names.len() as _;
1445        self.pp_enabled_layer_names = enabled_layer_names.as_ptr();
1446        self
1447    }
1448    #[inline]
1449    pub fn enabled_extension_names(mut self, enabled_extension_names: &'a [*const c_char]) -> Self {
1450        self.enabled_extension_count = enabled_extension_names.len() as _;
1451        self.pp_enabled_extension_names = enabled_extension_names.as_ptr();
1452        self
1453    }
1454    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
1455    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
1456    #[doc = r" valid extension structs can be pushed into the chain."]
1457    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
1458    #[doc = r" chain will look like `A -> D -> B -> C`."]
1459    pub fn push_next<T: ExtendsInstanceCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
1460        unsafe {
1461            let next_ptr = <*const T>::cast(next);
1462            let last_next = ptr_chain_iter(next).last().unwrap();
1463            (*last_next).p_next = self.p_next as _;
1464            self.p_next = next_ptr;
1465        }
1466        self
1467    }
1468}
1469#[repr(C)]
1470#[cfg_attr(feature = "debug", derive(Debug))]
1471#[derive(Copy, Clone, Default)]
1472#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyProperties.html>"]
1473#[must_use]
1474pub struct QueueFamilyProperties {
1475    pub queue_flags: QueueFlags,
1476    pub queue_count: u32,
1477    pub timestamp_valid_bits: u32,
1478    pub min_image_transfer_granularity: Extent3D,
1479}
1480impl QueueFamilyProperties {
1481    #[inline]
1482    pub fn queue_flags(mut self, queue_flags: QueueFlags) -> Self {
1483        self.queue_flags = queue_flags;
1484        self
1485    }
1486    #[inline]
1487    pub fn queue_count(mut self, queue_count: u32) -> Self {
1488        self.queue_count = queue_count;
1489        self
1490    }
1491    #[inline]
1492    pub fn timestamp_valid_bits(mut self, timestamp_valid_bits: u32) -> Self {
1493        self.timestamp_valid_bits = timestamp_valid_bits;
1494        self
1495    }
1496    #[inline]
1497    pub fn min_image_transfer_granularity(
1498        mut self,
1499        min_image_transfer_granularity: Extent3D,
1500    ) -> Self {
1501        self.min_image_transfer_granularity = min_image_transfer_granularity;
1502        self
1503    }
1504}
1505#[repr(C)]
1506#[derive(Copy, Clone)]
1507#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryProperties.html>"]
1508#[must_use]
1509pub struct PhysicalDeviceMemoryProperties {
1510    pub memory_type_count: u32,
1511    pub memory_types: [MemoryType; MAX_MEMORY_TYPES],
1512    pub memory_heap_count: u32,
1513    pub memory_heaps: [MemoryHeap; MAX_MEMORY_HEAPS],
1514}
1515#[cfg(feature = "debug")]
1516impl fmt::Debug for PhysicalDeviceMemoryProperties {
1517    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
1518        fmt.debug_struct("PhysicalDeviceMemoryProperties")
1519            .field("memory_type_count", &self.memory_type_count)
1520            .field("memory_types", &self.memory_types_as_slice())
1521            .field("memory_heap_count", &self.memory_heap_count)
1522            .field("memory_heaps", &self.memory_heaps_as_slice())
1523            .finish()
1524    }
1525}
1526impl ::core::default::Default for PhysicalDeviceMemoryProperties {
1527    #[inline]
1528    fn default() -> Self {
1529        Self {
1530            memory_type_count: u32::default(),
1531            memory_types: unsafe { ::core::mem::zeroed() },
1532            memory_heap_count: u32::default(),
1533            memory_heaps: unsafe { ::core::mem::zeroed() },
1534        }
1535    }
1536}
1537impl PhysicalDeviceMemoryProperties {
1538    #[inline]
1539    pub fn memory_types(mut self, memory_types: &'_ [MemoryType]) -> Self {
1540        self.memory_type_count = memory_types.len() as _;
1541        self.memory_types[..memory_types.len()].copy_from_slice(memory_types);
1542        self
1543    }
1544    #[inline]
1545    pub fn memory_types_as_slice(&self) -> &[MemoryType] {
1546        &self.memory_types[..self.memory_type_count as _]
1547    }
1548    #[inline]
1549    pub fn memory_heaps(mut self, memory_heaps: &'_ [MemoryHeap]) -> Self {
1550        self.memory_heap_count = memory_heaps.len() as _;
1551        self.memory_heaps[..memory_heaps.len()].copy_from_slice(memory_heaps);
1552        self
1553    }
1554    #[inline]
1555    pub fn memory_heaps_as_slice(&self) -> &[MemoryHeap] {
1556        &self.memory_heaps[..self.memory_heap_count as _]
1557    }
1558}
1559#[repr(C)]
1560#[cfg_attr(feature = "debug", derive(Debug))]
1561#[derive(Copy, Clone)]
1562#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryAllocateInfo.html>"]
1563#[must_use]
1564pub struct MemoryAllocateInfo<'a> {
1565    pub s_type: StructureType,
1566    pub p_next: *const c_void,
1567    pub allocation_size: DeviceSize,
1568    pub memory_type_index: u32,
1569    pub _marker: PhantomData<&'a ()>,
1570}
1571unsafe impl Send for MemoryAllocateInfo<'_> {}
1572unsafe impl Sync for MemoryAllocateInfo<'_> {}
1573impl ::core::default::Default for MemoryAllocateInfo<'_> {
1574    #[inline]
1575    fn default() -> Self {
1576        Self {
1577            s_type: Self::STRUCTURE_TYPE,
1578            p_next: ::core::ptr::null(),
1579            allocation_size: DeviceSize::default(),
1580            memory_type_index: u32::default(),
1581            _marker: PhantomData,
1582        }
1583    }
1584}
1585unsafe impl<'a> TaggedStructure for MemoryAllocateInfo<'a> {
1586    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_ALLOCATE_INFO;
1587}
1588pub unsafe trait ExtendsMemoryAllocateInfo {}
1589impl<'a> MemoryAllocateInfo<'a> {
1590    #[inline]
1591    pub fn allocation_size(mut self, allocation_size: DeviceSize) -> Self {
1592        self.allocation_size = allocation_size;
1593        self
1594    }
1595    #[inline]
1596    pub fn memory_type_index(mut self, memory_type_index: u32) -> Self {
1597        self.memory_type_index = memory_type_index;
1598        self
1599    }
1600    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
1601    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
1602    #[doc = r" valid extension structs can be pushed into the chain."]
1603    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
1604    #[doc = r" chain will look like `A -> D -> B -> C`."]
1605    pub fn push_next<T: ExtendsMemoryAllocateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
1606        unsafe {
1607            let next_ptr = <*const T>::cast(next);
1608            let last_next = ptr_chain_iter(next).last().unwrap();
1609            (*last_next).p_next = self.p_next as _;
1610            self.p_next = next_ptr;
1611        }
1612        self
1613    }
1614}
1615#[repr(C)]
1616#[cfg_attr(feature = "debug", derive(Debug))]
1617#[derive(Copy, Clone, Default)]
1618#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryRequirements.html>"]
1619#[must_use]
1620pub struct MemoryRequirements {
1621    pub size: DeviceSize,
1622    pub alignment: DeviceSize,
1623    pub memory_type_bits: u32,
1624}
1625impl MemoryRequirements {
1626    #[inline]
1627    pub fn size(mut self, size: DeviceSize) -> Self {
1628        self.size = size;
1629        self
1630    }
1631    #[inline]
1632    pub fn alignment(mut self, alignment: DeviceSize) -> Self {
1633        self.alignment = alignment;
1634        self
1635    }
1636    #[inline]
1637    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
1638        self.memory_type_bits = memory_type_bits;
1639        self
1640    }
1641}
1642#[repr(C)]
1643#[cfg_attr(feature = "debug", derive(Debug))]
1644#[derive(Copy, Clone, Default)]
1645#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageFormatProperties.html>"]
1646#[must_use]
1647pub struct SparseImageFormatProperties {
1648    pub aspect_mask: ImageAspectFlags,
1649    pub image_granularity: Extent3D,
1650    pub flags: SparseImageFormatFlags,
1651}
1652impl SparseImageFormatProperties {
1653    #[inline]
1654    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
1655        self.aspect_mask = aspect_mask;
1656        self
1657    }
1658    #[inline]
1659    pub fn image_granularity(mut self, image_granularity: Extent3D) -> Self {
1660        self.image_granularity = image_granularity;
1661        self
1662    }
1663    #[inline]
1664    pub fn flags(mut self, flags: SparseImageFormatFlags) -> Self {
1665        self.flags = flags;
1666        self
1667    }
1668}
1669#[repr(C)]
1670#[cfg_attr(feature = "debug", derive(Debug))]
1671#[derive(Copy, Clone, Default)]
1672#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageMemoryRequirements.html>"]
1673#[must_use]
1674pub struct SparseImageMemoryRequirements {
1675    pub format_properties: SparseImageFormatProperties,
1676    pub image_mip_tail_first_lod: u32,
1677    pub image_mip_tail_size: DeviceSize,
1678    pub image_mip_tail_offset: DeviceSize,
1679    pub image_mip_tail_stride: DeviceSize,
1680}
1681impl SparseImageMemoryRequirements {
1682    #[inline]
1683    pub fn format_properties(mut self, format_properties: SparseImageFormatProperties) -> Self {
1684        self.format_properties = format_properties;
1685        self
1686    }
1687    #[inline]
1688    pub fn image_mip_tail_first_lod(mut self, image_mip_tail_first_lod: u32) -> Self {
1689        self.image_mip_tail_first_lod = image_mip_tail_first_lod;
1690        self
1691    }
1692    #[inline]
1693    pub fn image_mip_tail_size(mut self, image_mip_tail_size: DeviceSize) -> Self {
1694        self.image_mip_tail_size = image_mip_tail_size;
1695        self
1696    }
1697    #[inline]
1698    pub fn image_mip_tail_offset(mut self, image_mip_tail_offset: DeviceSize) -> Self {
1699        self.image_mip_tail_offset = image_mip_tail_offset;
1700        self
1701    }
1702    #[inline]
1703    pub fn image_mip_tail_stride(mut self, image_mip_tail_stride: DeviceSize) -> Self {
1704        self.image_mip_tail_stride = image_mip_tail_stride;
1705        self
1706    }
1707}
1708#[repr(C)]
1709#[cfg_attr(feature = "debug", derive(Debug))]
1710#[derive(Copy, Clone, Default)]
1711#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryType.html>"]
1712#[must_use]
1713pub struct MemoryType {
1714    pub property_flags: MemoryPropertyFlags,
1715    pub heap_index: u32,
1716}
1717impl MemoryType {
1718    #[inline]
1719    pub fn property_flags(mut self, property_flags: MemoryPropertyFlags) -> Self {
1720        self.property_flags = property_flags;
1721        self
1722    }
1723    #[inline]
1724    pub fn heap_index(mut self, heap_index: u32) -> Self {
1725        self.heap_index = heap_index;
1726        self
1727    }
1728}
1729#[repr(C)]
1730#[cfg_attr(feature = "debug", derive(Debug))]
1731#[derive(Copy, Clone, Default)]
1732#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryHeap.html>"]
1733#[must_use]
1734pub struct MemoryHeap {
1735    pub size: DeviceSize,
1736    pub flags: MemoryHeapFlags,
1737}
1738impl MemoryHeap {
1739    #[inline]
1740    pub fn size(mut self, size: DeviceSize) -> Self {
1741        self.size = size;
1742        self
1743    }
1744    #[inline]
1745    pub fn flags(mut self, flags: MemoryHeapFlags) -> Self {
1746        self.flags = flags;
1747        self
1748    }
1749}
1750#[repr(C)]
1751#[cfg_attr(feature = "debug", derive(Debug))]
1752#[derive(Copy, Clone)]
1753#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMappedMemoryRange.html>"]
1754#[must_use]
1755pub struct MappedMemoryRange<'a> {
1756    pub s_type: StructureType,
1757    pub p_next: *const c_void,
1758    pub memory: DeviceMemory,
1759    pub offset: DeviceSize,
1760    pub size: DeviceSize,
1761    pub _marker: PhantomData<&'a ()>,
1762}
1763unsafe impl Send for MappedMemoryRange<'_> {}
1764unsafe impl Sync for MappedMemoryRange<'_> {}
1765impl ::core::default::Default for MappedMemoryRange<'_> {
1766    #[inline]
1767    fn default() -> Self {
1768        Self {
1769            s_type: Self::STRUCTURE_TYPE,
1770            p_next: ::core::ptr::null(),
1771            memory: DeviceMemory::default(),
1772            offset: DeviceSize::default(),
1773            size: DeviceSize::default(),
1774            _marker: PhantomData,
1775        }
1776    }
1777}
1778unsafe impl<'a> TaggedStructure for MappedMemoryRange<'a> {
1779    const STRUCTURE_TYPE: StructureType = StructureType::MAPPED_MEMORY_RANGE;
1780}
1781impl<'a> MappedMemoryRange<'a> {
1782    #[inline]
1783    pub fn memory(mut self, memory: DeviceMemory) -> Self {
1784        self.memory = memory;
1785        self
1786    }
1787    #[inline]
1788    pub fn offset(mut self, offset: DeviceSize) -> Self {
1789        self.offset = offset;
1790        self
1791    }
1792    #[inline]
1793    pub fn size(mut self, size: DeviceSize) -> Self {
1794        self.size = size;
1795        self
1796    }
1797}
1798#[repr(C)]
1799#[cfg_attr(feature = "debug", derive(Debug))]
1800#[derive(Copy, Clone, Default)]
1801#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFormatProperties.html>"]
1802#[must_use]
1803pub struct FormatProperties {
1804    pub linear_tiling_features: FormatFeatureFlags,
1805    pub optimal_tiling_features: FormatFeatureFlags,
1806    pub buffer_features: FormatFeatureFlags,
1807}
1808impl FormatProperties {
1809    #[inline]
1810    pub fn linear_tiling_features(mut self, linear_tiling_features: FormatFeatureFlags) -> Self {
1811        self.linear_tiling_features = linear_tiling_features;
1812        self
1813    }
1814    #[inline]
1815    pub fn optimal_tiling_features(mut self, optimal_tiling_features: FormatFeatureFlags) -> Self {
1816        self.optimal_tiling_features = optimal_tiling_features;
1817        self
1818    }
1819    #[inline]
1820    pub fn buffer_features(mut self, buffer_features: FormatFeatureFlags) -> Self {
1821        self.buffer_features = buffer_features;
1822        self
1823    }
1824}
1825#[repr(C)]
1826#[cfg_attr(feature = "debug", derive(Debug))]
1827#[derive(Copy, Clone, Default)]
1828#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageFormatProperties.html>"]
1829#[must_use]
1830pub struct ImageFormatProperties {
1831    pub max_extent: Extent3D,
1832    pub max_mip_levels: u32,
1833    pub max_array_layers: u32,
1834    pub sample_counts: SampleCountFlags,
1835    pub max_resource_size: DeviceSize,
1836}
1837impl ImageFormatProperties {
1838    #[inline]
1839    pub fn max_extent(mut self, max_extent: Extent3D) -> Self {
1840        self.max_extent = max_extent;
1841        self
1842    }
1843    #[inline]
1844    pub fn max_mip_levels(mut self, max_mip_levels: u32) -> Self {
1845        self.max_mip_levels = max_mip_levels;
1846        self
1847    }
1848    #[inline]
1849    pub fn max_array_layers(mut self, max_array_layers: u32) -> Self {
1850        self.max_array_layers = max_array_layers;
1851        self
1852    }
1853    #[inline]
1854    pub fn sample_counts(mut self, sample_counts: SampleCountFlags) -> Self {
1855        self.sample_counts = sample_counts;
1856        self
1857    }
1858    #[inline]
1859    pub fn max_resource_size(mut self, max_resource_size: DeviceSize) -> Self {
1860        self.max_resource_size = max_resource_size;
1861        self
1862    }
1863}
1864#[repr(C)]
1865#[cfg_attr(feature = "debug", derive(Debug))]
1866#[derive(Copy, Clone, Default)]
1867#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorBufferInfo.html>"]
1868#[must_use]
1869pub struct DescriptorBufferInfo {
1870    pub buffer: Buffer,
1871    pub offset: DeviceSize,
1872    pub range: DeviceSize,
1873}
1874impl DescriptorBufferInfo {
1875    #[inline]
1876    pub fn buffer(mut self, buffer: Buffer) -> Self {
1877        self.buffer = buffer;
1878        self
1879    }
1880    #[inline]
1881    pub fn offset(mut self, offset: DeviceSize) -> Self {
1882        self.offset = offset;
1883        self
1884    }
1885    #[inline]
1886    pub fn range(mut self, range: DeviceSize) -> Self {
1887        self.range = range;
1888        self
1889    }
1890}
1891#[repr(C)]
1892#[cfg_attr(feature = "debug", derive(Debug))]
1893#[derive(Copy, Clone, Default)]
1894#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorImageInfo.html>"]
1895#[must_use]
1896pub struct DescriptorImageInfo {
1897    pub sampler: Sampler,
1898    pub image_view: ImageView,
1899    pub image_layout: ImageLayout,
1900}
1901impl DescriptorImageInfo {
1902    #[inline]
1903    pub fn sampler(mut self, sampler: Sampler) -> Self {
1904        self.sampler = sampler;
1905        self
1906    }
1907    #[inline]
1908    pub fn image_view(mut self, image_view: ImageView) -> Self {
1909        self.image_view = image_view;
1910        self
1911    }
1912    #[inline]
1913    pub fn image_layout(mut self, image_layout: ImageLayout) -> Self {
1914        self.image_layout = image_layout;
1915        self
1916    }
1917}
1918#[repr(C)]
1919#[cfg_attr(feature = "debug", derive(Debug))]
1920#[derive(Copy, Clone)]
1921#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWriteDescriptorSet.html>"]
1922#[must_use]
1923pub struct WriteDescriptorSet<'a> {
1924    pub s_type: StructureType,
1925    pub p_next: *const c_void,
1926    pub dst_set: DescriptorSet,
1927    pub dst_binding: u32,
1928    pub dst_array_element: u32,
1929    pub descriptor_count: u32,
1930    pub descriptor_type: DescriptorType,
1931    pub p_image_info: *const DescriptorImageInfo,
1932    pub p_buffer_info: *const DescriptorBufferInfo,
1933    pub p_texel_buffer_view: *const BufferView,
1934    pub _marker: PhantomData<&'a ()>,
1935}
1936unsafe impl Send for WriteDescriptorSet<'_> {}
1937unsafe impl Sync for WriteDescriptorSet<'_> {}
1938impl ::core::default::Default for WriteDescriptorSet<'_> {
1939    #[inline]
1940    fn default() -> Self {
1941        Self {
1942            s_type: Self::STRUCTURE_TYPE,
1943            p_next: ::core::ptr::null(),
1944            dst_set: DescriptorSet::default(),
1945            dst_binding: u32::default(),
1946            dst_array_element: u32::default(),
1947            descriptor_count: u32::default(),
1948            descriptor_type: DescriptorType::default(),
1949            p_image_info: ::core::ptr::null(),
1950            p_buffer_info: ::core::ptr::null(),
1951            p_texel_buffer_view: ::core::ptr::null(),
1952            _marker: PhantomData,
1953        }
1954    }
1955}
1956unsafe impl<'a> TaggedStructure for WriteDescriptorSet<'a> {
1957    const STRUCTURE_TYPE: StructureType = StructureType::WRITE_DESCRIPTOR_SET;
1958}
1959pub unsafe trait ExtendsWriteDescriptorSet {}
1960impl<'a> WriteDescriptorSet<'a> {
1961    #[inline]
1962    pub fn dst_set(mut self, dst_set: DescriptorSet) -> Self {
1963        self.dst_set = dst_set;
1964        self
1965    }
1966    #[inline]
1967    pub fn dst_binding(mut self, dst_binding: u32) -> Self {
1968        self.dst_binding = dst_binding;
1969        self
1970    }
1971    #[inline]
1972    pub fn dst_array_element(mut self, dst_array_element: u32) -> Self {
1973        self.dst_array_element = dst_array_element;
1974        self
1975    }
1976    #[inline]
1977    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
1978        self.descriptor_count = descriptor_count;
1979        self
1980    }
1981    #[inline]
1982    pub fn descriptor_type(mut self, descriptor_type: DescriptorType) -> Self {
1983        self.descriptor_type = descriptor_type;
1984        self
1985    }
1986    #[inline]
1987    pub fn image_info(mut self, image_info: &'a [DescriptorImageInfo]) -> Self {
1988        self.descriptor_count = image_info.len() as _;
1989        self.p_image_info = image_info.as_ptr();
1990        self
1991    }
1992    #[inline]
1993    pub fn buffer_info(mut self, buffer_info: &'a [DescriptorBufferInfo]) -> Self {
1994        self.descriptor_count = buffer_info.len() as _;
1995        self.p_buffer_info = buffer_info.as_ptr();
1996        self
1997    }
1998    #[inline]
1999    pub fn texel_buffer_view(mut self, texel_buffer_view: &'a [BufferView]) -> Self {
2000        self.descriptor_count = texel_buffer_view.len() as _;
2001        self.p_texel_buffer_view = texel_buffer_view.as_ptr();
2002        self
2003    }
2004    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2005    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2006    #[doc = r" valid extension structs can be pushed into the chain."]
2007    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2008    #[doc = r" chain will look like `A -> D -> B -> C`."]
2009    pub fn push_next<T: ExtendsWriteDescriptorSet + ?Sized>(mut self, next: &'a mut T) -> Self {
2010        unsafe {
2011            let next_ptr = <*const T>::cast(next);
2012            let last_next = ptr_chain_iter(next).last().unwrap();
2013            (*last_next).p_next = self.p_next as _;
2014            self.p_next = next_ptr;
2015        }
2016        self
2017    }
2018}
2019#[repr(C)]
2020#[cfg_attr(feature = "debug", derive(Debug))]
2021#[derive(Copy, Clone)]
2022#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyDescriptorSet.html>"]
2023#[must_use]
2024pub struct CopyDescriptorSet<'a> {
2025    pub s_type: StructureType,
2026    pub p_next: *const c_void,
2027    pub src_set: DescriptorSet,
2028    pub src_binding: u32,
2029    pub src_array_element: u32,
2030    pub dst_set: DescriptorSet,
2031    pub dst_binding: u32,
2032    pub dst_array_element: u32,
2033    pub descriptor_count: u32,
2034    pub _marker: PhantomData<&'a ()>,
2035}
2036unsafe impl Send for CopyDescriptorSet<'_> {}
2037unsafe impl Sync for CopyDescriptorSet<'_> {}
2038impl ::core::default::Default for CopyDescriptorSet<'_> {
2039    #[inline]
2040    fn default() -> Self {
2041        Self {
2042            s_type: Self::STRUCTURE_TYPE,
2043            p_next: ::core::ptr::null(),
2044            src_set: DescriptorSet::default(),
2045            src_binding: u32::default(),
2046            src_array_element: u32::default(),
2047            dst_set: DescriptorSet::default(),
2048            dst_binding: u32::default(),
2049            dst_array_element: u32::default(),
2050            descriptor_count: u32::default(),
2051            _marker: PhantomData,
2052        }
2053    }
2054}
2055unsafe impl<'a> TaggedStructure for CopyDescriptorSet<'a> {
2056    const STRUCTURE_TYPE: StructureType = StructureType::COPY_DESCRIPTOR_SET;
2057}
2058impl<'a> CopyDescriptorSet<'a> {
2059    #[inline]
2060    pub fn src_set(mut self, src_set: DescriptorSet) -> Self {
2061        self.src_set = src_set;
2062        self
2063    }
2064    #[inline]
2065    pub fn src_binding(mut self, src_binding: u32) -> Self {
2066        self.src_binding = src_binding;
2067        self
2068    }
2069    #[inline]
2070    pub fn src_array_element(mut self, src_array_element: u32) -> Self {
2071        self.src_array_element = src_array_element;
2072        self
2073    }
2074    #[inline]
2075    pub fn dst_set(mut self, dst_set: DescriptorSet) -> Self {
2076        self.dst_set = dst_set;
2077        self
2078    }
2079    #[inline]
2080    pub fn dst_binding(mut self, dst_binding: u32) -> Self {
2081        self.dst_binding = dst_binding;
2082        self
2083    }
2084    #[inline]
2085    pub fn dst_array_element(mut self, dst_array_element: u32) -> Self {
2086        self.dst_array_element = dst_array_element;
2087        self
2088    }
2089    #[inline]
2090    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
2091        self.descriptor_count = descriptor_count;
2092        self
2093    }
2094}
2095#[repr(C)]
2096#[cfg_attr(feature = "debug", derive(Debug))]
2097#[derive(Copy, Clone)]
2098#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferUsageFlags2CreateInfoKHR.html>"]
2099#[must_use]
2100pub struct BufferUsageFlags2CreateInfoKHR<'a> {
2101    pub s_type: StructureType,
2102    pub p_next: *const c_void,
2103    pub usage: BufferUsageFlags2KHR,
2104    pub _marker: PhantomData<&'a ()>,
2105}
2106unsafe impl Send for BufferUsageFlags2CreateInfoKHR<'_> {}
2107unsafe impl Sync for BufferUsageFlags2CreateInfoKHR<'_> {}
2108impl ::core::default::Default for BufferUsageFlags2CreateInfoKHR<'_> {
2109    #[inline]
2110    fn default() -> Self {
2111        Self {
2112            s_type: Self::STRUCTURE_TYPE,
2113            p_next: ::core::ptr::null(),
2114            usage: BufferUsageFlags2KHR::default(),
2115            _marker: PhantomData,
2116        }
2117    }
2118}
2119unsafe impl<'a> TaggedStructure for BufferUsageFlags2CreateInfoKHR<'a> {
2120    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR;
2121}
2122unsafe impl ExtendsBufferViewCreateInfo for BufferUsageFlags2CreateInfoKHR<'_> {}
2123unsafe impl ExtendsBufferCreateInfo for BufferUsageFlags2CreateInfoKHR<'_> {}
2124unsafe impl ExtendsPhysicalDeviceExternalBufferInfo for BufferUsageFlags2CreateInfoKHR<'_> {}
2125unsafe impl ExtendsDescriptorBufferBindingInfoEXT for BufferUsageFlags2CreateInfoKHR<'_> {}
2126impl<'a> BufferUsageFlags2CreateInfoKHR<'a> {
2127    #[inline]
2128    pub fn usage(mut self, usage: BufferUsageFlags2KHR) -> Self {
2129        self.usage = usage;
2130        self
2131    }
2132}
2133#[repr(C)]
2134#[cfg_attr(feature = "debug", derive(Debug))]
2135#[derive(Copy, Clone)]
2136#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCreateInfo.html>"]
2137#[must_use]
2138pub struct BufferCreateInfo<'a> {
2139    pub s_type: StructureType,
2140    pub p_next: *const c_void,
2141    pub flags: BufferCreateFlags,
2142    pub size: DeviceSize,
2143    pub usage: BufferUsageFlags,
2144    pub sharing_mode: SharingMode,
2145    pub queue_family_index_count: u32,
2146    pub p_queue_family_indices: *const u32,
2147    pub _marker: PhantomData<&'a ()>,
2148}
2149unsafe impl Send for BufferCreateInfo<'_> {}
2150unsafe impl Sync for BufferCreateInfo<'_> {}
2151impl ::core::default::Default for BufferCreateInfo<'_> {
2152    #[inline]
2153    fn default() -> Self {
2154        Self {
2155            s_type: Self::STRUCTURE_TYPE,
2156            p_next: ::core::ptr::null(),
2157            flags: BufferCreateFlags::default(),
2158            size: DeviceSize::default(),
2159            usage: BufferUsageFlags::default(),
2160            sharing_mode: SharingMode::default(),
2161            queue_family_index_count: u32::default(),
2162            p_queue_family_indices: ::core::ptr::null(),
2163            _marker: PhantomData,
2164        }
2165    }
2166}
2167unsafe impl<'a> TaggedStructure for BufferCreateInfo<'a> {
2168    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_CREATE_INFO;
2169}
2170pub unsafe trait ExtendsBufferCreateInfo {}
2171impl<'a> BufferCreateInfo<'a> {
2172    #[inline]
2173    pub fn flags(mut self, flags: BufferCreateFlags) -> Self {
2174        self.flags = flags;
2175        self
2176    }
2177    #[inline]
2178    pub fn size(mut self, size: DeviceSize) -> Self {
2179        self.size = size;
2180        self
2181    }
2182    #[inline]
2183    pub fn usage(mut self, usage: BufferUsageFlags) -> Self {
2184        self.usage = usage;
2185        self
2186    }
2187    #[inline]
2188    pub fn sharing_mode(mut self, sharing_mode: SharingMode) -> Self {
2189        self.sharing_mode = sharing_mode;
2190        self
2191    }
2192    #[inline]
2193    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
2194        self.queue_family_index_count = queue_family_indices.len() as _;
2195        self.p_queue_family_indices = queue_family_indices.as_ptr();
2196        self
2197    }
2198    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2199    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2200    #[doc = r" valid extension structs can be pushed into the chain."]
2201    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2202    #[doc = r" chain will look like `A -> D -> B -> C`."]
2203    pub fn push_next<T: ExtendsBufferCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
2204        unsafe {
2205            let next_ptr = <*const T>::cast(next);
2206            let last_next = ptr_chain_iter(next).last().unwrap();
2207            (*last_next).p_next = self.p_next as _;
2208            self.p_next = next_ptr;
2209        }
2210        self
2211    }
2212}
2213#[repr(C)]
2214#[cfg_attr(feature = "debug", derive(Debug))]
2215#[derive(Copy, Clone)]
2216#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferViewCreateInfo.html>"]
2217#[must_use]
2218pub struct BufferViewCreateInfo<'a> {
2219    pub s_type: StructureType,
2220    pub p_next: *const c_void,
2221    pub flags: BufferViewCreateFlags,
2222    pub buffer: Buffer,
2223    pub format: Format,
2224    pub offset: DeviceSize,
2225    pub range: DeviceSize,
2226    pub _marker: PhantomData<&'a ()>,
2227}
2228unsafe impl Send for BufferViewCreateInfo<'_> {}
2229unsafe impl Sync for BufferViewCreateInfo<'_> {}
2230impl ::core::default::Default for BufferViewCreateInfo<'_> {
2231    #[inline]
2232    fn default() -> Self {
2233        Self {
2234            s_type: Self::STRUCTURE_TYPE,
2235            p_next: ::core::ptr::null(),
2236            flags: BufferViewCreateFlags::default(),
2237            buffer: Buffer::default(),
2238            format: Format::default(),
2239            offset: DeviceSize::default(),
2240            range: DeviceSize::default(),
2241            _marker: PhantomData,
2242        }
2243    }
2244}
2245unsafe impl<'a> TaggedStructure for BufferViewCreateInfo<'a> {
2246    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_VIEW_CREATE_INFO;
2247}
2248pub unsafe trait ExtendsBufferViewCreateInfo {}
2249impl<'a> BufferViewCreateInfo<'a> {
2250    #[inline]
2251    pub fn flags(mut self, flags: BufferViewCreateFlags) -> Self {
2252        self.flags = flags;
2253        self
2254    }
2255    #[inline]
2256    pub fn buffer(mut self, buffer: Buffer) -> Self {
2257        self.buffer = buffer;
2258        self
2259    }
2260    #[inline]
2261    pub fn format(mut self, format: Format) -> Self {
2262        self.format = format;
2263        self
2264    }
2265    #[inline]
2266    pub fn offset(mut self, offset: DeviceSize) -> Self {
2267        self.offset = offset;
2268        self
2269    }
2270    #[inline]
2271    pub fn range(mut self, range: DeviceSize) -> Self {
2272        self.range = range;
2273        self
2274    }
2275    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2276    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2277    #[doc = r" valid extension structs can be pushed into the chain."]
2278    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2279    #[doc = r" chain will look like `A -> D -> B -> C`."]
2280    pub fn push_next<T: ExtendsBufferViewCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
2281        unsafe {
2282            let next_ptr = <*const T>::cast(next);
2283            let last_next = ptr_chain_iter(next).last().unwrap();
2284            (*last_next).p_next = self.p_next as _;
2285            self.p_next = next_ptr;
2286        }
2287        self
2288    }
2289}
2290#[repr(C)]
2291#[cfg_attr(feature = "debug", derive(Debug))]
2292#[derive(Copy, Clone, Default)]
2293#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSubresource.html>"]
2294#[must_use]
2295pub struct ImageSubresource {
2296    pub aspect_mask: ImageAspectFlags,
2297    pub mip_level: u32,
2298    pub array_layer: u32,
2299}
2300impl ImageSubresource {
2301    #[inline]
2302    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
2303        self.aspect_mask = aspect_mask;
2304        self
2305    }
2306    #[inline]
2307    pub fn mip_level(mut self, mip_level: u32) -> Self {
2308        self.mip_level = mip_level;
2309        self
2310    }
2311    #[inline]
2312    pub fn array_layer(mut self, array_layer: u32) -> Self {
2313        self.array_layer = array_layer;
2314        self
2315    }
2316}
2317#[repr(C)]
2318#[cfg_attr(feature = "debug", derive(Debug))]
2319#[derive(Copy, Clone, Default)]
2320#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSubresourceLayers.html>"]
2321#[must_use]
2322pub struct ImageSubresourceLayers {
2323    pub aspect_mask: ImageAspectFlags,
2324    pub mip_level: u32,
2325    pub base_array_layer: u32,
2326    pub layer_count: u32,
2327}
2328impl ImageSubresourceLayers {
2329    #[inline]
2330    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
2331        self.aspect_mask = aspect_mask;
2332        self
2333    }
2334    #[inline]
2335    pub fn mip_level(mut self, mip_level: u32) -> Self {
2336        self.mip_level = mip_level;
2337        self
2338    }
2339    #[inline]
2340    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
2341        self.base_array_layer = base_array_layer;
2342        self
2343    }
2344    #[inline]
2345    pub fn layer_count(mut self, layer_count: u32) -> Self {
2346        self.layer_count = layer_count;
2347        self
2348    }
2349}
2350#[repr(C)]
2351#[cfg_attr(feature = "debug", derive(Debug))]
2352#[derive(Copy, Clone, Default)]
2353#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSubresourceRange.html>"]
2354#[must_use]
2355pub struct ImageSubresourceRange {
2356    pub aspect_mask: ImageAspectFlags,
2357    pub base_mip_level: u32,
2358    pub level_count: u32,
2359    pub base_array_layer: u32,
2360    pub layer_count: u32,
2361}
2362impl ImageSubresourceRange {
2363    #[inline]
2364    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
2365        self.aspect_mask = aspect_mask;
2366        self
2367    }
2368    #[inline]
2369    pub fn base_mip_level(mut self, base_mip_level: u32) -> Self {
2370        self.base_mip_level = base_mip_level;
2371        self
2372    }
2373    #[inline]
2374    pub fn level_count(mut self, level_count: u32) -> Self {
2375        self.level_count = level_count;
2376        self
2377    }
2378    #[inline]
2379    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
2380        self.base_array_layer = base_array_layer;
2381        self
2382    }
2383    #[inline]
2384    pub fn layer_count(mut self, layer_count: u32) -> Self {
2385        self.layer_count = layer_count;
2386        self
2387    }
2388}
2389#[repr(C)]
2390#[cfg_attr(feature = "debug", derive(Debug))]
2391#[derive(Copy, Clone)]
2392#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryBarrier.html>"]
2393#[must_use]
2394pub struct MemoryBarrier<'a> {
2395    pub s_type: StructureType,
2396    pub p_next: *const c_void,
2397    pub src_access_mask: AccessFlags,
2398    pub dst_access_mask: AccessFlags,
2399    pub _marker: PhantomData<&'a ()>,
2400}
2401unsafe impl Send for MemoryBarrier<'_> {}
2402unsafe impl Sync for MemoryBarrier<'_> {}
2403impl ::core::default::Default for MemoryBarrier<'_> {
2404    #[inline]
2405    fn default() -> Self {
2406        Self {
2407            s_type: Self::STRUCTURE_TYPE,
2408            p_next: ::core::ptr::null(),
2409            src_access_mask: AccessFlags::default(),
2410            dst_access_mask: AccessFlags::default(),
2411            _marker: PhantomData,
2412        }
2413    }
2414}
2415unsafe impl<'a> TaggedStructure for MemoryBarrier<'a> {
2416    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_BARRIER;
2417}
2418impl<'a> MemoryBarrier<'a> {
2419    #[inline]
2420    pub fn src_access_mask(mut self, src_access_mask: AccessFlags) -> Self {
2421        self.src_access_mask = src_access_mask;
2422        self
2423    }
2424    #[inline]
2425    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags) -> Self {
2426        self.dst_access_mask = dst_access_mask;
2427        self
2428    }
2429}
2430#[repr(C)]
2431#[cfg_attr(feature = "debug", derive(Debug))]
2432#[derive(Copy, Clone)]
2433#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferMemoryBarrier.html>"]
2434#[must_use]
2435pub struct BufferMemoryBarrier<'a> {
2436    pub s_type: StructureType,
2437    pub p_next: *const c_void,
2438    pub src_access_mask: AccessFlags,
2439    pub dst_access_mask: AccessFlags,
2440    pub src_queue_family_index: u32,
2441    pub dst_queue_family_index: u32,
2442    pub buffer: Buffer,
2443    pub offset: DeviceSize,
2444    pub size: DeviceSize,
2445    pub _marker: PhantomData<&'a ()>,
2446}
2447unsafe impl Send for BufferMemoryBarrier<'_> {}
2448unsafe impl Sync for BufferMemoryBarrier<'_> {}
2449impl ::core::default::Default for BufferMemoryBarrier<'_> {
2450    #[inline]
2451    fn default() -> Self {
2452        Self {
2453            s_type: Self::STRUCTURE_TYPE,
2454            p_next: ::core::ptr::null(),
2455            src_access_mask: AccessFlags::default(),
2456            dst_access_mask: AccessFlags::default(),
2457            src_queue_family_index: u32::default(),
2458            dst_queue_family_index: u32::default(),
2459            buffer: Buffer::default(),
2460            offset: DeviceSize::default(),
2461            size: DeviceSize::default(),
2462            _marker: PhantomData,
2463        }
2464    }
2465}
2466unsafe impl<'a> TaggedStructure for BufferMemoryBarrier<'a> {
2467    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_MEMORY_BARRIER;
2468}
2469pub unsafe trait ExtendsBufferMemoryBarrier {}
2470impl<'a> BufferMemoryBarrier<'a> {
2471    #[inline]
2472    pub fn src_access_mask(mut self, src_access_mask: AccessFlags) -> Self {
2473        self.src_access_mask = src_access_mask;
2474        self
2475    }
2476    #[inline]
2477    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags) -> Self {
2478        self.dst_access_mask = dst_access_mask;
2479        self
2480    }
2481    #[inline]
2482    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
2483        self.src_queue_family_index = src_queue_family_index;
2484        self
2485    }
2486    #[inline]
2487    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
2488        self.dst_queue_family_index = dst_queue_family_index;
2489        self
2490    }
2491    #[inline]
2492    pub fn buffer(mut self, buffer: Buffer) -> Self {
2493        self.buffer = buffer;
2494        self
2495    }
2496    #[inline]
2497    pub fn offset(mut self, offset: DeviceSize) -> Self {
2498        self.offset = offset;
2499        self
2500    }
2501    #[inline]
2502    pub fn size(mut self, size: DeviceSize) -> Self {
2503        self.size = size;
2504        self
2505    }
2506    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2507    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2508    #[doc = r" valid extension structs can be pushed into the chain."]
2509    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2510    #[doc = r" chain will look like `A -> D -> B -> C`."]
2511    pub fn push_next<T: ExtendsBufferMemoryBarrier + ?Sized>(mut self, next: &'a mut T) -> Self {
2512        unsafe {
2513            let next_ptr = <*const T>::cast(next);
2514            let last_next = ptr_chain_iter(next).last().unwrap();
2515            (*last_next).p_next = self.p_next as _;
2516            self.p_next = next_ptr;
2517        }
2518        self
2519    }
2520}
2521#[repr(C)]
2522#[cfg_attr(feature = "debug", derive(Debug))]
2523#[derive(Copy, Clone)]
2524#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageMemoryBarrier.html>"]
2525#[must_use]
2526pub struct ImageMemoryBarrier<'a> {
2527    pub s_type: StructureType,
2528    pub p_next: *const c_void,
2529    pub src_access_mask: AccessFlags,
2530    pub dst_access_mask: AccessFlags,
2531    pub old_layout: ImageLayout,
2532    pub new_layout: ImageLayout,
2533    pub src_queue_family_index: u32,
2534    pub dst_queue_family_index: u32,
2535    pub image: Image,
2536    pub subresource_range: ImageSubresourceRange,
2537    pub _marker: PhantomData<&'a ()>,
2538}
2539unsafe impl Send for ImageMemoryBarrier<'_> {}
2540unsafe impl Sync for ImageMemoryBarrier<'_> {}
2541impl ::core::default::Default for ImageMemoryBarrier<'_> {
2542    #[inline]
2543    fn default() -> Self {
2544        Self {
2545            s_type: Self::STRUCTURE_TYPE,
2546            p_next: ::core::ptr::null(),
2547            src_access_mask: AccessFlags::default(),
2548            dst_access_mask: AccessFlags::default(),
2549            old_layout: ImageLayout::default(),
2550            new_layout: ImageLayout::default(),
2551            src_queue_family_index: u32::default(),
2552            dst_queue_family_index: u32::default(),
2553            image: Image::default(),
2554            subresource_range: ImageSubresourceRange::default(),
2555            _marker: PhantomData,
2556        }
2557    }
2558}
2559unsafe impl<'a> TaggedStructure for ImageMemoryBarrier<'a> {
2560    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_MEMORY_BARRIER;
2561}
2562pub unsafe trait ExtendsImageMemoryBarrier {}
2563impl<'a> ImageMemoryBarrier<'a> {
2564    #[inline]
2565    pub fn src_access_mask(mut self, src_access_mask: AccessFlags) -> Self {
2566        self.src_access_mask = src_access_mask;
2567        self
2568    }
2569    #[inline]
2570    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags) -> Self {
2571        self.dst_access_mask = dst_access_mask;
2572        self
2573    }
2574    #[inline]
2575    pub fn old_layout(mut self, old_layout: ImageLayout) -> Self {
2576        self.old_layout = old_layout;
2577        self
2578    }
2579    #[inline]
2580    pub fn new_layout(mut self, new_layout: ImageLayout) -> Self {
2581        self.new_layout = new_layout;
2582        self
2583    }
2584    #[inline]
2585    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
2586        self.src_queue_family_index = src_queue_family_index;
2587        self
2588    }
2589    #[inline]
2590    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
2591        self.dst_queue_family_index = dst_queue_family_index;
2592        self
2593    }
2594    #[inline]
2595    pub fn image(mut self, image: Image) -> Self {
2596        self.image = image;
2597        self
2598    }
2599    #[inline]
2600    pub fn subresource_range(mut self, subresource_range: ImageSubresourceRange) -> Self {
2601        self.subresource_range = subresource_range;
2602        self
2603    }
2604    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2605    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2606    #[doc = r" valid extension structs can be pushed into the chain."]
2607    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2608    #[doc = r" chain will look like `A -> D -> B -> C`."]
2609    pub fn push_next<T: ExtendsImageMemoryBarrier + ?Sized>(mut self, next: &'a mut T) -> Self {
2610        unsafe {
2611            let next_ptr = <*const T>::cast(next);
2612            let last_next = ptr_chain_iter(next).last().unwrap();
2613            (*last_next).p_next = self.p_next as _;
2614            self.p_next = next_ptr;
2615        }
2616        self
2617    }
2618}
2619#[repr(C)]
2620#[cfg_attr(feature = "debug", derive(Debug))]
2621#[derive(Copy, Clone)]
2622#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCreateInfo.html>"]
2623#[must_use]
2624pub struct ImageCreateInfo<'a> {
2625    pub s_type: StructureType,
2626    pub p_next: *const c_void,
2627    pub flags: ImageCreateFlags,
2628    pub image_type: ImageType,
2629    pub format: Format,
2630    pub extent: Extent3D,
2631    pub mip_levels: u32,
2632    pub array_layers: u32,
2633    pub samples: SampleCountFlags,
2634    pub tiling: ImageTiling,
2635    pub usage: ImageUsageFlags,
2636    pub sharing_mode: SharingMode,
2637    pub queue_family_index_count: u32,
2638    pub p_queue_family_indices: *const u32,
2639    pub initial_layout: ImageLayout,
2640    pub _marker: PhantomData<&'a ()>,
2641}
2642unsafe impl Send for ImageCreateInfo<'_> {}
2643unsafe impl Sync for ImageCreateInfo<'_> {}
2644impl ::core::default::Default for ImageCreateInfo<'_> {
2645    #[inline]
2646    fn default() -> Self {
2647        Self {
2648            s_type: Self::STRUCTURE_TYPE,
2649            p_next: ::core::ptr::null(),
2650            flags: ImageCreateFlags::default(),
2651            image_type: ImageType::default(),
2652            format: Format::default(),
2653            extent: Extent3D::default(),
2654            mip_levels: u32::default(),
2655            array_layers: u32::default(),
2656            samples: SampleCountFlags::default(),
2657            tiling: ImageTiling::default(),
2658            usage: ImageUsageFlags::default(),
2659            sharing_mode: SharingMode::default(),
2660            queue_family_index_count: u32::default(),
2661            p_queue_family_indices: ::core::ptr::null(),
2662            initial_layout: ImageLayout::default(),
2663            _marker: PhantomData,
2664        }
2665    }
2666}
2667unsafe impl<'a> TaggedStructure for ImageCreateInfo<'a> {
2668    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_CREATE_INFO;
2669}
2670pub unsafe trait ExtendsImageCreateInfo {}
2671impl<'a> ImageCreateInfo<'a> {
2672    #[inline]
2673    pub fn flags(mut self, flags: ImageCreateFlags) -> Self {
2674        self.flags = flags;
2675        self
2676    }
2677    #[inline]
2678    pub fn image_type(mut self, image_type: ImageType) -> Self {
2679        self.image_type = image_type;
2680        self
2681    }
2682    #[inline]
2683    pub fn format(mut self, format: Format) -> Self {
2684        self.format = format;
2685        self
2686    }
2687    #[inline]
2688    pub fn extent(mut self, extent: Extent3D) -> Self {
2689        self.extent = extent;
2690        self
2691    }
2692    #[inline]
2693    pub fn mip_levels(mut self, mip_levels: u32) -> Self {
2694        self.mip_levels = mip_levels;
2695        self
2696    }
2697    #[inline]
2698    pub fn array_layers(mut self, array_layers: u32) -> Self {
2699        self.array_layers = array_layers;
2700        self
2701    }
2702    #[inline]
2703    pub fn samples(mut self, samples: SampleCountFlags) -> Self {
2704        self.samples = samples;
2705        self
2706    }
2707    #[inline]
2708    pub fn tiling(mut self, tiling: ImageTiling) -> Self {
2709        self.tiling = tiling;
2710        self
2711    }
2712    #[inline]
2713    pub fn usage(mut self, usage: ImageUsageFlags) -> Self {
2714        self.usage = usage;
2715        self
2716    }
2717    #[inline]
2718    pub fn sharing_mode(mut self, sharing_mode: SharingMode) -> Self {
2719        self.sharing_mode = sharing_mode;
2720        self
2721    }
2722    #[inline]
2723    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
2724        self.queue_family_index_count = queue_family_indices.len() as _;
2725        self.p_queue_family_indices = queue_family_indices.as_ptr();
2726        self
2727    }
2728    #[inline]
2729    pub fn initial_layout(mut self, initial_layout: ImageLayout) -> Self {
2730        self.initial_layout = initial_layout;
2731        self
2732    }
2733    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2734    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2735    #[doc = r" valid extension structs can be pushed into the chain."]
2736    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2737    #[doc = r" chain will look like `A -> D -> B -> C`."]
2738    pub fn push_next<T: ExtendsImageCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
2739        unsafe {
2740            let next_ptr = <*const T>::cast(next);
2741            let last_next = ptr_chain_iter(next).last().unwrap();
2742            (*last_next).p_next = self.p_next as _;
2743            self.p_next = next_ptr;
2744        }
2745        self
2746    }
2747}
2748#[repr(C)]
2749#[cfg_attr(feature = "debug", derive(Debug))]
2750#[derive(Copy, Clone, Default)]
2751#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubresourceLayout.html>"]
2752#[must_use]
2753pub struct SubresourceLayout {
2754    pub offset: DeviceSize,
2755    pub size: DeviceSize,
2756    pub row_pitch: DeviceSize,
2757    pub array_pitch: DeviceSize,
2758    pub depth_pitch: DeviceSize,
2759}
2760impl SubresourceLayout {
2761    #[inline]
2762    pub fn offset(mut self, offset: DeviceSize) -> Self {
2763        self.offset = offset;
2764        self
2765    }
2766    #[inline]
2767    pub fn size(mut self, size: DeviceSize) -> Self {
2768        self.size = size;
2769        self
2770    }
2771    #[inline]
2772    pub fn row_pitch(mut self, row_pitch: DeviceSize) -> Self {
2773        self.row_pitch = row_pitch;
2774        self
2775    }
2776    #[inline]
2777    pub fn array_pitch(mut self, array_pitch: DeviceSize) -> Self {
2778        self.array_pitch = array_pitch;
2779        self
2780    }
2781    #[inline]
2782    pub fn depth_pitch(mut self, depth_pitch: DeviceSize) -> Self {
2783        self.depth_pitch = depth_pitch;
2784        self
2785    }
2786}
2787#[repr(C)]
2788#[cfg_attr(feature = "debug", derive(Debug))]
2789#[derive(Copy, Clone)]
2790#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewCreateInfo.html>"]
2791#[must_use]
2792pub struct ImageViewCreateInfo<'a> {
2793    pub s_type: StructureType,
2794    pub p_next: *const c_void,
2795    pub flags: ImageViewCreateFlags,
2796    pub image: Image,
2797    pub view_type: ImageViewType,
2798    pub format: Format,
2799    pub components: ComponentMapping,
2800    pub subresource_range: ImageSubresourceRange,
2801    pub _marker: PhantomData<&'a ()>,
2802}
2803unsafe impl Send for ImageViewCreateInfo<'_> {}
2804unsafe impl Sync for ImageViewCreateInfo<'_> {}
2805impl ::core::default::Default for ImageViewCreateInfo<'_> {
2806    #[inline]
2807    fn default() -> Self {
2808        Self {
2809            s_type: Self::STRUCTURE_TYPE,
2810            p_next: ::core::ptr::null(),
2811            flags: ImageViewCreateFlags::default(),
2812            image: Image::default(),
2813            view_type: ImageViewType::default(),
2814            format: Format::default(),
2815            components: ComponentMapping::default(),
2816            subresource_range: ImageSubresourceRange::default(),
2817            _marker: PhantomData,
2818        }
2819    }
2820}
2821unsafe impl<'a> TaggedStructure for ImageViewCreateInfo<'a> {
2822    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_CREATE_INFO;
2823}
2824pub unsafe trait ExtendsImageViewCreateInfo {}
2825impl<'a> ImageViewCreateInfo<'a> {
2826    #[inline]
2827    pub fn flags(mut self, flags: ImageViewCreateFlags) -> Self {
2828        self.flags = flags;
2829        self
2830    }
2831    #[inline]
2832    pub fn image(mut self, image: Image) -> Self {
2833        self.image = image;
2834        self
2835    }
2836    #[inline]
2837    pub fn view_type(mut self, view_type: ImageViewType) -> Self {
2838        self.view_type = view_type;
2839        self
2840    }
2841    #[inline]
2842    pub fn format(mut self, format: Format) -> Self {
2843        self.format = format;
2844        self
2845    }
2846    #[inline]
2847    pub fn components(mut self, components: ComponentMapping) -> Self {
2848        self.components = components;
2849        self
2850    }
2851    #[inline]
2852    pub fn subresource_range(mut self, subresource_range: ImageSubresourceRange) -> Self {
2853        self.subresource_range = subresource_range;
2854        self
2855    }
2856    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
2857    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
2858    #[doc = r" valid extension structs can be pushed into the chain."]
2859    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
2860    #[doc = r" chain will look like `A -> D -> B -> C`."]
2861    pub fn push_next<T: ExtendsImageViewCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
2862        unsafe {
2863            let next_ptr = <*const T>::cast(next);
2864            let last_next = ptr_chain_iter(next).last().unwrap();
2865            (*last_next).p_next = self.p_next as _;
2866            self.p_next = next_ptr;
2867        }
2868        self
2869    }
2870}
2871#[repr(C)]
2872#[cfg_attr(feature = "debug", derive(Debug))]
2873#[derive(Copy, Clone, Default)]
2874#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCopy.html>"]
2875#[must_use]
2876pub struct BufferCopy {
2877    pub src_offset: DeviceSize,
2878    pub dst_offset: DeviceSize,
2879    pub size: DeviceSize,
2880}
2881impl BufferCopy {
2882    #[inline]
2883    pub fn src_offset(mut self, src_offset: DeviceSize) -> Self {
2884        self.src_offset = src_offset;
2885        self
2886    }
2887    #[inline]
2888    pub fn dst_offset(mut self, dst_offset: DeviceSize) -> Self {
2889        self.dst_offset = dst_offset;
2890        self
2891    }
2892    #[inline]
2893    pub fn size(mut self, size: DeviceSize) -> Self {
2894        self.size = size;
2895        self
2896    }
2897}
2898#[repr(C)]
2899#[cfg_attr(feature = "debug", derive(Debug))]
2900#[derive(Copy, Clone, Default)]
2901#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseMemoryBind.html>"]
2902#[must_use]
2903pub struct SparseMemoryBind {
2904    pub resource_offset: DeviceSize,
2905    pub size: DeviceSize,
2906    pub memory: DeviceMemory,
2907    pub memory_offset: DeviceSize,
2908    pub flags: SparseMemoryBindFlags,
2909}
2910impl SparseMemoryBind {
2911    #[inline]
2912    pub fn resource_offset(mut self, resource_offset: DeviceSize) -> Self {
2913        self.resource_offset = resource_offset;
2914        self
2915    }
2916    #[inline]
2917    pub fn size(mut self, size: DeviceSize) -> Self {
2918        self.size = size;
2919        self
2920    }
2921    #[inline]
2922    pub fn memory(mut self, memory: DeviceMemory) -> Self {
2923        self.memory = memory;
2924        self
2925    }
2926    #[inline]
2927    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
2928        self.memory_offset = memory_offset;
2929        self
2930    }
2931    #[inline]
2932    pub fn flags(mut self, flags: SparseMemoryBindFlags) -> Self {
2933        self.flags = flags;
2934        self
2935    }
2936}
2937#[repr(C)]
2938#[cfg_attr(feature = "debug", derive(Debug))]
2939#[derive(Copy, Clone, Default)]
2940#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageMemoryBind.html>"]
2941#[must_use]
2942pub struct SparseImageMemoryBind {
2943    pub subresource: ImageSubresource,
2944    pub offset: Offset3D,
2945    pub extent: Extent3D,
2946    pub memory: DeviceMemory,
2947    pub memory_offset: DeviceSize,
2948    pub flags: SparseMemoryBindFlags,
2949}
2950impl SparseImageMemoryBind {
2951    #[inline]
2952    pub fn subresource(mut self, subresource: ImageSubresource) -> Self {
2953        self.subresource = subresource;
2954        self
2955    }
2956    #[inline]
2957    pub fn offset(mut self, offset: Offset3D) -> Self {
2958        self.offset = offset;
2959        self
2960    }
2961    #[inline]
2962    pub fn extent(mut self, extent: Extent3D) -> Self {
2963        self.extent = extent;
2964        self
2965    }
2966    #[inline]
2967    pub fn memory(mut self, memory: DeviceMemory) -> Self {
2968        self.memory = memory;
2969        self
2970    }
2971    #[inline]
2972    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
2973        self.memory_offset = memory_offset;
2974        self
2975    }
2976    #[inline]
2977    pub fn flags(mut self, flags: SparseMemoryBindFlags) -> Self {
2978        self.flags = flags;
2979        self
2980    }
2981}
2982#[repr(C)]
2983#[cfg_attr(feature = "debug", derive(Debug))]
2984#[derive(Copy, Clone)]
2985#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseBufferMemoryBindInfo.html>"]
2986#[must_use]
2987pub struct SparseBufferMemoryBindInfo<'a> {
2988    pub buffer: Buffer,
2989    pub bind_count: u32,
2990    pub p_binds: *const SparseMemoryBind,
2991    pub _marker: PhantomData<&'a ()>,
2992}
2993unsafe impl Send for SparseBufferMemoryBindInfo<'_> {}
2994unsafe impl Sync for SparseBufferMemoryBindInfo<'_> {}
2995impl ::core::default::Default for SparseBufferMemoryBindInfo<'_> {
2996    #[inline]
2997    fn default() -> Self {
2998        Self {
2999            buffer: Buffer::default(),
3000            bind_count: u32::default(),
3001            p_binds: ::core::ptr::null(),
3002            _marker: PhantomData,
3003        }
3004    }
3005}
3006impl<'a> SparseBufferMemoryBindInfo<'a> {
3007    #[inline]
3008    pub fn buffer(mut self, buffer: Buffer) -> Self {
3009        self.buffer = buffer;
3010        self
3011    }
3012    #[inline]
3013    pub fn binds(mut self, binds: &'a [SparseMemoryBind]) -> Self {
3014        self.bind_count = binds.len() as _;
3015        self.p_binds = binds.as_ptr();
3016        self
3017    }
3018}
3019#[repr(C)]
3020#[cfg_attr(feature = "debug", derive(Debug))]
3021#[derive(Copy, Clone)]
3022#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageOpaqueMemoryBindInfo.html>"]
3023#[must_use]
3024pub struct SparseImageOpaqueMemoryBindInfo<'a> {
3025    pub image: Image,
3026    pub bind_count: u32,
3027    pub p_binds: *const SparseMemoryBind,
3028    pub _marker: PhantomData<&'a ()>,
3029}
3030unsafe impl Send for SparseImageOpaqueMemoryBindInfo<'_> {}
3031unsafe impl Sync for SparseImageOpaqueMemoryBindInfo<'_> {}
3032impl ::core::default::Default for SparseImageOpaqueMemoryBindInfo<'_> {
3033    #[inline]
3034    fn default() -> Self {
3035        Self {
3036            image: Image::default(),
3037            bind_count: u32::default(),
3038            p_binds: ::core::ptr::null(),
3039            _marker: PhantomData,
3040        }
3041    }
3042}
3043impl<'a> SparseImageOpaqueMemoryBindInfo<'a> {
3044    #[inline]
3045    pub fn image(mut self, image: Image) -> Self {
3046        self.image = image;
3047        self
3048    }
3049    #[inline]
3050    pub fn binds(mut self, binds: &'a [SparseMemoryBind]) -> Self {
3051        self.bind_count = binds.len() as _;
3052        self.p_binds = binds.as_ptr();
3053        self
3054    }
3055}
3056#[repr(C)]
3057#[cfg_attr(feature = "debug", derive(Debug))]
3058#[derive(Copy, Clone)]
3059#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageMemoryBindInfo.html>"]
3060#[must_use]
3061pub struct SparseImageMemoryBindInfo<'a> {
3062    pub image: Image,
3063    pub bind_count: u32,
3064    pub p_binds: *const SparseImageMemoryBind,
3065    pub _marker: PhantomData<&'a ()>,
3066}
3067unsafe impl Send for SparseImageMemoryBindInfo<'_> {}
3068unsafe impl Sync for SparseImageMemoryBindInfo<'_> {}
3069impl ::core::default::Default for SparseImageMemoryBindInfo<'_> {
3070    #[inline]
3071    fn default() -> Self {
3072        Self {
3073            image: Image::default(),
3074            bind_count: u32::default(),
3075            p_binds: ::core::ptr::null(),
3076            _marker: PhantomData,
3077        }
3078    }
3079}
3080impl<'a> SparseImageMemoryBindInfo<'a> {
3081    #[inline]
3082    pub fn image(mut self, image: Image) -> Self {
3083        self.image = image;
3084        self
3085    }
3086    #[inline]
3087    pub fn binds(mut self, binds: &'a [SparseImageMemoryBind]) -> Self {
3088        self.bind_count = binds.len() as _;
3089        self.p_binds = binds.as_ptr();
3090        self
3091    }
3092}
3093#[repr(C)]
3094#[cfg_attr(feature = "debug", derive(Debug))]
3095#[derive(Copy, Clone)]
3096#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindSparseInfo.html>"]
3097#[must_use]
3098pub struct BindSparseInfo<'a> {
3099    pub s_type: StructureType,
3100    pub p_next: *const c_void,
3101    pub wait_semaphore_count: u32,
3102    pub p_wait_semaphores: *const Semaphore,
3103    pub buffer_bind_count: u32,
3104    pub p_buffer_binds: *const SparseBufferMemoryBindInfo<'a>,
3105    pub image_opaque_bind_count: u32,
3106    pub p_image_opaque_binds: *const SparseImageOpaqueMemoryBindInfo<'a>,
3107    pub image_bind_count: u32,
3108    pub p_image_binds: *const SparseImageMemoryBindInfo<'a>,
3109    pub signal_semaphore_count: u32,
3110    pub p_signal_semaphores: *const Semaphore,
3111    pub _marker: PhantomData<&'a ()>,
3112}
3113unsafe impl Send for BindSparseInfo<'_> {}
3114unsafe impl Sync for BindSparseInfo<'_> {}
3115impl ::core::default::Default for BindSparseInfo<'_> {
3116    #[inline]
3117    fn default() -> Self {
3118        Self {
3119            s_type: Self::STRUCTURE_TYPE,
3120            p_next: ::core::ptr::null(),
3121            wait_semaphore_count: u32::default(),
3122            p_wait_semaphores: ::core::ptr::null(),
3123            buffer_bind_count: u32::default(),
3124            p_buffer_binds: ::core::ptr::null(),
3125            image_opaque_bind_count: u32::default(),
3126            p_image_opaque_binds: ::core::ptr::null(),
3127            image_bind_count: u32::default(),
3128            p_image_binds: ::core::ptr::null(),
3129            signal_semaphore_count: u32::default(),
3130            p_signal_semaphores: ::core::ptr::null(),
3131            _marker: PhantomData,
3132        }
3133    }
3134}
3135unsafe impl<'a> TaggedStructure for BindSparseInfo<'a> {
3136    const STRUCTURE_TYPE: StructureType = StructureType::BIND_SPARSE_INFO;
3137}
3138pub unsafe trait ExtendsBindSparseInfo {}
3139impl<'a> BindSparseInfo<'a> {
3140    #[inline]
3141    pub fn wait_semaphores(mut self, wait_semaphores: &'a [Semaphore]) -> Self {
3142        self.wait_semaphore_count = wait_semaphores.len() as _;
3143        self.p_wait_semaphores = wait_semaphores.as_ptr();
3144        self
3145    }
3146    #[inline]
3147    pub fn buffer_binds(mut self, buffer_binds: &'a [SparseBufferMemoryBindInfo<'a>]) -> Self {
3148        self.buffer_bind_count = buffer_binds.len() as _;
3149        self.p_buffer_binds = buffer_binds.as_ptr();
3150        self
3151    }
3152    #[inline]
3153    pub fn image_opaque_binds(
3154        mut self,
3155        image_opaque_binds: &'a [SparseImageOpaqueMemoryBindInfo<'a>],
3156    ) -> Self {
3157        self.image_opaque_bind_count = image_opaque_binds.len() as _;
3158        self.p_image_opaque_binds = image_opaque_binds.as_ptr();
3159        self
3160    }
3161    #[inline]
3162    pub fn image_binds(mut self, image_binds: &'a [SparseImageMemoryBindInfo<'a>]) -> Self {
3163        self.image_bind_count = image_binds.len() as _;
3164        self.p_image_binds = image_binds.as_ptr();
3165        self
3166    }
3167    #[inline]
3168    pub fn signal_semaphores(mut self, signal_semaphores: &'a [Semaphore]) -> Self {
3169        self.signal_semaphore_count = signal_semaphores.len() as _;
3170        self.p_signal_semaphores = signal_semaphores.as_ptr();
3171        self
3172    }
3173    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3174    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3175    #[doc = r" valid extension structs can be pushed into the chain."]
3176    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3177    #[doc = r" chain will look like `A -> D -> B -> C`."]
3178    pub fn push_next<T: ExtendsBindSparseInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
3179        unsafe {
3180            let next_ptr = <*const T>::cast(next);
3181            let last_next = ptr_chain_iter(next).last().unwrap();
3182            (*last_next).p_next = self.p_next as _;
3183            self.p_next = next_ptr;
3184        }
3185        self
3186    }
3187}
3188#[repr(C)]
3189#[cfg_attr(feature = "debug", derive(Debug))]
3190#[derive(Copy, Clone, Default)]
3191#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCopy.html>"]
3192#[must_use]
3193pub struct ImageCopy {
3194    pub src_subresource: ImageSubresourceLayers,
3195    pub src_offset: Offset3D,
3196    pub dst_subresource: ImageSubresourceLayers,
3197    pub dst_offset: Offset3D,
3198    pub extent: Extent3D,
3199}
3200impl ImageCopy {
3201    #[inline]
3202    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
3203        self.src_subresource = src_subresource;
3204        self
3205    }
3206    #[inline]
3207    pub fn src_offset(mut self, src_offset: Offset3D) -> Self {
3208        self.src_offset = src_offset;
3209        self
3210    }
3211    #[inline]
3212    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
3213        self.dst_subresource = dst_subresource;
3214        self
3215    }
3216    #[inline]
3217    pub fn dst_offset(mut self, dst_offset: Offset3D) -> Self {
3218        self.dst_offset = dst_offset;
3219        self
3220    }
3221    #[inline]
3222    pub fn extent(mut self, extent: Extent3D) -> Self {
3223        self.extent = extent;
3224        self
3225    }
3226}
3227#[repr(C)]
3228#[cfg_attr(feature = "debug", derive(Debug))]
3229#[derive(Copy, Clone)]
3230#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageBlit.html>"]
3231#[must_use]
3232pub struct ImageBlit {
3233    pub src_subresource: ImageSubresourceLayers,
3234    pub src_offsets: [Offset3D; 2],
3235    pub dst_subresource: ImageSubresourceLayers,
3236    pub dst_offsets: [Offset3D; 2],
3237}
3238impl ::core::default::Default for ImageBlit {
3239    #[inline]
3240    fn default() -> Self {
3241        Self {
3242            src_subresource: ImageSubresourceLayers::default(),
3243            src_offsets: unsafe { ::core::mem::zeroed() },
3244            dst_subresource: ImageSubresourceLayers::default(),
3245            dst_offsets: unsafe { ::core::mem::zeroed() },
3246        }
3247    }
3248}
3249impl ImageBlit {
3250    #[inline]
3251    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
3252        self.src_subresource = src_subresource;
3253        self
3254    }
3255    #[inline]
3256    pub fn src_offsets(mut self, src_offsets: [Offset3D; 2]) -> Self {
3257        self.src_offsets = src_offsets;
3258        self
3259    }
3260    #[inline]
3261    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
3262        self.dst_subresource = dst_subresource;
3263        self
3264    }
3265    #[inline]
3266    pub fn dst_offsets(mut self, dst_offsets: [Offset3D; 2]) -> Self {
3267        self.dst_offsets = dst_offsets;
3268        self
3269    }
3270}
3271#[repr(C)]
3272#[cfg_attr(feature = "debug", derive(Debug))]
3273#[derive(Copy, Clone, Default)]
3274#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferImageCopy.html>"]
3275#[must_use]
3276pub struct BufferImageCopy {
3277    pub buffer_offset: DeviceSize,
3278    pub buffer_row_length: u32,
3279    pub buffer_image_height: u32,
3280    pub image_subresource: ImageSubresourceLayers,
3281    pub image_offset: Offset3D,
3282    pub image_extent: Extent3D,
3283}
3284impl BufferImageCopy {
3285    #[inline]
3286    pub fn buffer_offset(mut self, buffer_offset: DeviceSize) -> Self {
3287        self.buffer_offset = buffer_offset;
3288        self
3289    }
3290    #[inline]
3291    pub fn buffer_row_length(mut self, buffer_row_length: u32) -> Self {
3292        self.buffer_row_length = buffer_row_length;
3293        self
3294    }
3295    #[inline]
3296    pub fn buffer_image_height(mut self, buffer_image_height: u32) -> Self {
3297        self.buffer_image_height = buffer_image_height;
3298        self
3299    }
3300    #[inline]
3301    pub fn image_subresource(mut self, image_subresource: ImageSubresourceLayers) -> Self {
3302        self.image_subresource = image_subresource;
3303        self
3304    }
3305    #[inline]
3306    pub fn image_offset(mut self, image_offset: Offset3D) -> Self {
3307        self.image_offset = image_offset;
3308        self
3309    }
3310    #[inline]
3311    pub fn image_extent(mut self, image_extent: Extent3D) -> Self {
3312        self.image_extent = image_extent;
3313        self
3314    }
3315}
3316#[repr(C)]
3317#[cfg_attr(feature = "debug", derive(Debug))]
3318#[derive(Copy, Clone, Default)]
3319#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryIndirectCommandNV.html>"]
3320#[must_use]
3321pub struct CopyMemoryIndirectCommandNV {
3322    pub src_address: DeviceAddress,
3323    pub dst_address: DeviceAddress,
3324    pub size: DeviceSize,
3325}
3326impl CopyMemoryIndirectCommandNV {
3327    #[inline]
3328    pub fn src_address(mut self, src_address: DeviceAddress) -> Self {
3329        self.src_address = src_address;
3330        self
3331    }
3332    #[inline]
3333    pub fn dst_address(mut self, dst_address: DeviceAddress) -> Self {
3334        self.dst_address = dst_address;
3335        self
3336    }
3337    #[inline]
3338    pub fn size(mut self, size: DeviceSize) -> Self {
3339        self.size = size;
3340        self
3341    }
3342}
3343#[repr(C)]
3344#[cfg_attr(feature = "debug", derive(Debug))]
3345#[derive(Copy, Clone, Default)]
3346#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryToImageIndirectCommandNV.html>"]
3347#[must_use]
3348pub struct CopyMemoryToImageIndirectCommandNV {
3349    pub src_address: DeviceAddress,
3350    pub buffer_row_length: u32,
3351    pub buffer_image_height: u32,
3352    pub image_subresource: ImageSubresourceLayers,
3353    pub image_offset: Offset3D,
3354    pub image_extent: Extent3D,
3355}
3356impl CopyMemoryToImageIndirectCommandNV {
3357    #[inline]
3358    pub fn src_address(mut self, src_address: DeviceAddress) -> Self {
3359        self.src_address = src_address;
3360        self
3361    }
3362    #[inline]
3363    pub fn buffer_row_length(mut self, buffer_row_length: u32) -> Self {
3364        self.buffer_row_length = buffer_row_length;
3365        self
3366    }
3367    #[inline]
3368    pub fn buffer_image_height(mut self, buffer_image_height: u32) -> Self {
3369        self.buffer_image_height = buffer_image_height;
3370        self
3371    }
3372    #[inline]
3373    pub fn image_subresource(mut self, image_subresource: ImageSubresourceLayers) -> Self {
3374        self.image_subresource = image_subresource;
3375        self
3376    }
3377    #[inline]
3378    pub fn image_offset(mut self, image_offset: Offset3D) -> Self {
3379        self.image_offset = image_offset;
3380        self
3381    }
3382    #[inline]
3383    pub fn image_extent(mut self, image_extent: Extent3D) -> Self {
3384        self.image_extent = image_extent;
3385        self
3386    }
3387}
3388#[repr(C)]
3389#[cfg_attr(feature = "debug", derive(Debug))]
3390#[derive(Copy, Clone, Default)]
3391#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageResolve.html>"]
3392#[must_use]
3393pub struct ImageResolve {
3394    pub src_subresource: ImageSubresourceLayers,
3395    pub src_offset: Offset3D,
3396    pub dst_subresource: ImageSubresourceLayers,
3397    pub dst_offset: Offset3D,
3398    pub extent: Extent3D,
3399}
3400impl ImageResolve {
3401    #[inline]
3402    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
3403        self.src_subresource = src_subresource;
3404        self
3405    }
3406    #[inline]
3407    pub fn src_offset(mut self, src_offset: Offset3D) -> Self {
3408        self.src_offset = src_offset;
3409        self
3410    }
3411    #[inline]
3412    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
3413        self.dst_subresource = dst_subresource;
3414        self
3415    }
3416    #[inline]
3417    pub fn dst_offset(mut self, dst_offset: Offset3D) -> Self {
3418        self.dst_offset = dst_offset;
3419        self
3420    }
3421    #[inline]
3422    pub fn extent(mut self, extent: Extent3D) -> Self {
3423        self.extent = extent;
3424        self
3425    }
3426}
3427#[repr(C)]
3428#[cfg_attr(feature = "debug", derive(Debug))]
3429#[derive(Copy, Clone)]
3430#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderModuleCreateInfo.html>"]
3431#[must_use]
3432pub struct ShaderModuleCreateInfo<'a> {
3433    pub s_type: StructureType,
3434    pub p_next: *const c_void,
3435    pub flags: ShaderModuleCreateFlags,
3436    pub code_size: usize,
3437    pub p_code: *const u32,
3438    pub _marker: PhantomData<&'a ()>,
3439}
3440unsafe impl Send for ShaderModuleCreateInfo<'_> {}
3441unsafe impl Sync for ShaderModuleCreateInfo<'_> {}
3442impl ::core::default::Default for ShaderModuleCreateInfo<'_> {
3443    #[inline]
3444    fn default() -> Self {
3445        Self {
3446            s_type: Self::STRUCTURE_TYPE,
3447            p_next: ::core::ptr::null(),
3448            flags: ShaderModuleCreateFlags::default(),
3449            code_size: usize::default(),
3450            p_code: ::core::ptr::null(),
3451            _marker: PhantomData,
3452        }
3453    }
3454}
3455unsafe impl<'a> TaggedStructure for ShaderModuleCreateInfo<'a> {
3456    const STRUCTURE_TYPE: StructureType = StructureType::SHADER_MODULE_CREATE_INFO;
3457}
3458unsafe impl ExtendsPipelineShaderStageCreateInfo for ShaderModuleCreateInfo<'_> {}
3459pub unsafe trait ExtendsShaderModuleCreateInfo {}
3460impl<'a> ShaderModuleCreateInfo<'a> {
3461    #[inline]
3462    pub fn flags(mut self, flags: ShaderModuleCreateFlags) -> Self {
3463        self.flags = flags;
3464        self
3465    }
3466    #[inline]
3467    pub fn code(mut self, code: &'a [u32]) -> Self {
3468        self.code_size = code.len() * 4;
3469        self.p_code = code.as_ptr();
3470        self
3471    }
3472    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3473    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3474    #[doc = r" valid extension structs can be pushed into the chain."]
3475    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3476    #[doc = r" chain will look like `A -> D -> B -> C`."]
3477    pub fn push_next<T: ExtendsShaderModuleCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
3478        unsafe {
3479            let next_ptr = <*const T>::cast(next);
3480            let last_next = ptr_chain_iter(next).last().unwrap();
3481            (*last_next).p_next = self.p_next as _;
3482            self.p_next = next_ptr;
3483        }
3484        self
3485    }
3486}
3487#[repr(C)]
3488#[cfg_attr(feature = "debug", derive(Debug))]
3489#[derive(Copy, Clone)]
3490#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutBinding.html>"]
3491#[must_use]
3492pub struct DescriptorSetLayoutBinding<'a> {
3493    pub binding: u32,
3494    pub descriptor_type: DescriptorType,
3495    pub descriptor_count: u32,
3496    pub stage_flags: ShaderStageFlags,
3497    pub p_immutable_samplers: *const Sampler,
3498    pub _marker: PhantomData<&'a ()>,
3499}
3500unsafe impl Send for DescriptorSetLayoutBinding<'_> {}
3501unsafe impl Sync for DescriptorSetLayoutBinding<'_> {}
3502impl ::core::default::Default for DescriptorSetLayoutBinding<'_> {
3503    #[inline]
3504    fn default() -> Self {
3505        Self {
3506            binding: u32::default(),
3507            descriptor_type: DescriptorType::default(),
3508            descriptor_count: u32::default(),
3509            stage_flags: ShaderStageFlags::default(),
3510            p_immutable_samplers: ::core::ptr::null(),
3511            _marker: PhantomData,
3512        }
3513    }
3514}
3515impl<'a> DescriptorSetLayoutBinding<'a> {
3516    #[inline]
3517    pub fn binding(mut self, binding: u32) -> Self {
3518        self.binding = binding;
3519        self
3520    }
3521    #[inline]
3522    pub fn descriptor_type(mut self, descriptor_type: DescriptorType) -> Self {
3523        self.descriptor_type = descriptor_type;
3524        self
3525    }
3526    #[inline]
3527    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
3528        self.descriptor_count = descriptor_count;
3529        self
3530    }
3531    #[inline]
3532    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
3533        self.stage_flags = stage_flags;
3534        self
3535    }
3536    #[inline]
3537    pub fn immutable_samplers(mut self, immutable_samplers: &'a [Sampler]) -> Self {
3538        self.descriptor_count = immutable_samplers.len() as _;
3539        self.p_immutable_samplers = immutable_samplers.as_ptr();
3540        self
3541    }
3542}
3543#[repr(C)]
3544#[cfg_attr(feature = "debug", derive(Debug))]
3545#[derive(Copy, Clone)]
3546#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutCreateInfo.html>"]
3547#[must_use]
3548pub struct DescriptorSetLayoutCreateInfo<'a> {
3549    pub s_type: StructureType,
3550    pub p_next: *const c_void,
3551    pub flags: DescriptorSetLayoutCreateFlags,
3552    pub binding_count: u32,
3553    pub p_bindings: *const DescriptorSetLayoutBinding<'a>,
3554    pub _marker: PhantomData<&'a ()>,
3555}
3556unsafe impl Send for DescriptorSetLayoutCreateInfo<'_> {}
3557unsafe impl Sync for DescriptorSetLayoutCreateInfo<'_> {}
3558impl ::core::default::Default for DescriptorSetLayoutCreateInfo<'_> {
3559    #[inline]
3560    fn default() -> Self {
3561        Self {
3562            s_type: Self::STRUCTURE_TYPE,
3563            p_next: ::core::ptr::null(),
3564            flags: DescriptorSetLayoutCreateFlags::default(),
3565            binding_count: u32::default(),
3566            p_bindings: ::core::ptr::null(),
3567            _marker: PhantomData,
3568        }
3569    }
3570}
3571unsafe impl<'a> TaggedStructure for DescriptorSetLayoutCreateInfo<'a> {
3572    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
3573}
3574pub unsafe trait ExtendsDescriptorSetLayoutCreateInfo {}
3575impl<'a> DescriptorSetLayoutCreateInfo<'a> {
3576    #[inline]
3577    pub fn flags(mut self, flags: DescriptorSetLayoutCreateFlags) -> Self {
3578        self.flags = flags;
3579        self
3580    }
3581    #[inline]
3582    pub fn bindings(mut self, bindings: &'a [DescriptorSetLayoutBinding<'a>]) -> Self {
3583        self.binding_count = bindings.len() as _;
3584        self.p_bindings = bindings.as_ptr();
3585        self
3586    }
3587    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3588    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3589    #[doc = r" valid extension structs can be pushed into the chain."]
3590    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3591    #[doc = r" chain will look like `A -> D -> B -> C`."]
3592    pub fn push_next<T: ExtendsDescriptorSetLayoutCreateInfo + ?Sized>(
3593        mut self,
3594        next: &'a mut T,
3595    ) -> Self {
3596        unsafe {
3597            let next_ptr = <*const T>::cast(next);
3598            let last_next = ptr_chain_iter(next).last().unwrap();
3599            (*last_next).p_next = self.p_next as _;
3600            self.p_next = next_ptr;
3601        }
3602        self
3603    }
3604}
3605#[repr(C)]
3606#[cfg_attr(feature = "debug", derive(Debug))]
3607#[derive(Copy, Clone, Default)]
3608#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorPoolSize.html>"]
3609#[must_use]
3610pub struct DescriptorPoolSize {
3611    pub ty: DescriptorType,
3612    pub descriptor_count: u32,
3613}
3614impl DescriptorPoolSize {
3615    #[inline]
3616    pub fn ty(mut self, ty: DescriptorType) -> Self {
3617        self.ty = ty;
3618        self
3619    }
3620    #[inline]
3621    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
3622        self.descriptor_count = descriptor_count;
3623        self
3624    }
3625}
3626#[repr(C)]
3627#[cfg_attr(feature = "debug", derive(Debug))]
3628#[derive(Copy, Clone)]
3629#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorPoolCreateInfo.html>"]
3630#[must_use]
3631pub struct DescriptorPoolCreateInfo<'a> {
3632    pub s_type: StructureType,
3633    pub p_next: *const c_void,
3634    pub flags: DescriptorPoolCreateFlags,
3635    pub max_sets: u32,
3636    pub pool_size_count: u32,
3637    pub p_pool_sizes: *const DescriptorPoolSize,
3638    pub _marker: PhantomData<&'a ()>,
3639}
3640unsafe impl Send for DescriptorPoolCreateInfo<'_> {}
3641unsafe impl Sync for DescriptorPoolCreateInfo<'_> {}
3642impl ::core::default::Default for DescriptorPoolCreateInfo<'_> {
3643    #[inline]
3644    fn default() -> Self {
3645        Self {
3646            s_type: Self::STRUCTURE_TYPE,
3647            p_next: ::core::ptr::null(),
3648            flags: DescriptorPoolCreateFlags::default(),
3649            max_sets: u32::default(),
3650            pool_size_count: u32::default(),
3651            p_pool_sizes: ::core::ptr::null(),
3652            _marker: PhantomData,
3653        }
3654    }
3655}
3656unsafe impl<'a> TaggedStructure for DescriptorPoolCreateInfo<'a> {
3657    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_POOL_CREATE_INFO;
3658}
3659pub unsafe trait ExtendsDescriptorPoolCreateInfo {}
3660impl<'a> DescriptorPoolCreateInfo<'a> {
3661    #[inline]
3662    pub fn flags(mut self, flags: DescriptorPoolCreateFlags) -> Self {
3663        self.flags = flags;
3664        self
3665    }
3666    #[inline]
3667    pub fn max_sets(mut self, max_sets: u32) -> Self {
3668        self.max_sets = max_sets;
3669        self
3670    }
3671    #[inline]
3672    pub fn pool_sizes(mut self, pool_sizes: &'a [DescriptorPoolSize]) -> Self {
3673        self.pool_size_count = pool_sizes.len() as _;
3674        self.p_pool_sizes = pool_sizes.as_ptr();
3675        self
3676    }
3677    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3678    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3679    #[doc = r" valid extension structs can be pushed into the chain."]
3680    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3681    #[doc = r" chain will look like `A -> D -> B -> C`."]
3682    pub fn push_next<T: ExtendsDescriptorPoolCreateInfo + ?Sized>(
3683        mut self,
3684        next: &'a mut T,
3685    ) -> Self {
3686        unsafe {
3687            let next_ptr = <*const T>::cast(next);
3688            let last_next = ptr_chain_iter(next).last().unwrap();
3689            (*last_next).p_next = self.p_next as _;
3690            self.p_next = next_ptr;
3691        }
3692        self
3693    }
3694}
3695#[repr(C)]
3696#[cfg_attr(feature = "debug", derive(Debug))]
3697#[derive(Copy, Clone)]
3698#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetAllocateInfo.html>"]
3699#[must_use]
3700pub struct DescriptorSetAllocateInfo<'a> {
3701    pub s_type: StructureType,
3702    pub p_next: *const c_void,
3703    pub descriptor_pool: DescriptorPool,
3704    pub descriptor_set_count: u32,
3705    pub p_set_layouts: *const DescriptorSetLayout,
3706    pub _marker: PhantomData<&'a ()>,
3707}
3708unsafe impl Send for DescriptorSetAllocateInfo<'_> {}
3709unsafe impl Sync for DescriptorSetAllocateInfo<'_> {}
3710impl ::core::default::Default for DescriptorSetAllocateInfo<'_> {
3711    #[inline]
3712    fn default() -> Self {
3713        Self {
3714            s_type: Self::STRUCTURE_TYPE,
3715            p_next: ::core::ptr::null(),
3716            descriptor_pool: DescriptorPool::default(),
3717            descriptor_set_count: u32::default(),
3718            p_set_layouts: ::core::ptr::null(),
3719            _marker: PhantomData,
3720        }
3721    }
3722}
3723unsafe impl<'a> TaggedStructure for DescriptorSetAllocateInfo<'a> {
3724    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_SET_ALLOCATE_INFO;
3725}
3726pub unsafe trait ExtendsDescriptorSetAllocateInfo {}
3727impl<'a> DescriptorSetAllocateInfo<'a> {
3728    #[inline]
3729    pub fn descriptor_pool(mut self, descriptor_pool: DescriptorPool) -> Self {
3730        self.descriptor_pool = descriptor_pool;
3731        self
3732    }
3733    #[inline]
3734    pub fn set_layouts(mut self, set_layouts: &'a [DescriptorSetLayout]) -> Self {
3735        self.descriptor_set_count = set_layouts.len() as _;
3736        self.p_set_layouts = set_layouts.as_ptr();
3737        self
3738    }
3739    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3740    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3741    #[doc = r" valid extension structs can be pushed into the chain."]
3742    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3743    #[doc = r" chain will look like `A -> D -> B -> C`."]
3744    pub fn push_next<T: ExtendsDescriptorSetAllocateInfo + ?Sized>(
3745        mut self,
3746        next: &'a mut T,
3747    ) -> Self {
3748        unsafe {
3749            let next_ptr = <*const T>::cast(next);
3750            let last_next = ptr_chain_iter(next).last().unwrap();
3751            (*last_next).p_next = self.p_next as _;
3752            self.p_next = next_ptr;
3753        }
3754        self
3755    }
3756}
3757#[repr(C)]
3758#[cfg_attr(feature = "debug", derive(Debug))]
3759#[derive(Copy, Clone, Default)]
3760#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSpecializationMapEntry.html>"]
3761#[must_use]
3762pub struct SpecializationMapEntry {
3763    pub constant_id: u32,
3764    pub offset: u32,
3765    pub size: usize,
3766}
3767impl SpecializationMapEntry {
3768    #[inline]
3769    pub fn constant_id(mut self, constant_id: u32) -> Self {
3770        self.constant_id = constant_id;
3771        self
3772    }
3773    #[inline]
3774    pub fn offset(mut self, offset: u32) -> Self {
3775        self.offset = offset;
3776        self
3777    }
3778    #[inline]
3779    pub fn size(mut self, size: usize) -> Self {
3780        self.size = size;
3781        self
3782    }
3783}
3784#[repr(C)]
3785#[cfg_attr(feature = "debug", derive(Debug))]
3786#[derive(Copy, Clone)]
3787#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSpecializationInfo.html>"]
3788#[must_use]
3789pub struct SpecializationInfo<'a> {
3790    pub map_entry_count: u32,
3791    pub p_map_entries: *const SpecializationMapEntry,
3792    pub data_size: usize,
3793    pub p_data: *const c_void,
3794    pub _marker: PhantomData<&'a ()>,
3795}
3796unsafe impl Send for SpecializationInfo<'_> {}
3797unsafe impl Sync for SpecializationInfo<'_> {}
3798impl ::core::default::Default for SpecializationInfo<'_> {
3799    #[inline]
3800    fn default() -> Self {
3801        Self {
3802            map_entry_count: u32::default(),
3803            p_map_entries: ::core::ptr::null(),
3804            data_size: usize::default(),
3805            p_data: ::core::ptr::null(),
3806            _marker: PhantomData,
3807        }
3808    }
3809}
3810impl<'a> SpecializationInfo<'a> {
3811    #[inline]
3812    pub fn map_entries(mut self, map_entries: &'a [SpecializationMapEntry]) -> Self {
3813        self.map_entry_count = map_entries.len() as _;
3814        self.p_map_entries = map_entries.as_ptr();
3815        self
3816    }
3817    #[inline]
3818    pub fn data(mut self, data: &'a [u8]) -> Self {
3819        self.data_size = data.len();
3820        self.p_data = data.as_ptr().cast();
3821        self
3822    }
3823}
3824#[repr(C)]
3825#[cfg_attr(feature = "debug", derive(Debug))]
3826#[derive(Copy, Clone)]
3827#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineShaderStageCreateInfo.html>"]
3828#[must_use]
3829pub struct PipelineShaderStageCreateInfo<'a> {
3830    pub s_type: StructureType,
3831    pub p_next: *const c_void,
3832    pub flags: PipelineShaderStageCreateFlags,
3833    pub stage: ShaderStageFlags,
3834    pub module: ShaderModule,
3835    pub p_name: *const c_char,
3836    pub p_specialization_info: *const SpecializationInfo<'a>,
3837    pub _marker: PhantomData<&'a ()>,
3838}
3839unsafe impl Send for PipelineShaderStageCreateInfo<'_> {}
3840unsafe impl Sync for PipelineShaderStageCreateInfo<'_> {}
3841impl ::core::default::Default for PipelineShaderStageCreateInfo<'_> {
3842    #[inline]
3843    fn default() -> Self {
3844        Self {
3845            s_type: Self::STRUCTURE_TYPE,
3846            p_next: ::core::ptr::null(),
3847            flags: PipelineShaderStageCreateFlags::default(),
3848            stage: ShaderStageFlags::default(),
3849            module: ShaderModule::default(),
3850            p_name: ::core::ptr::null(),
3851            p_specialization_info: ::core::ptr::null(),
3852            _marker: PhantomData,
3853        }
3854    }
3855}
3856unsafe impl<'a> TaggedStructure for PipelineShaderStageCreateInfo<'a> {
3857    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_SHADER_STAGE_CREATE_INFO;
3858}
3859pub unsafe trait ExtendsPipelineShaderStageCreateInfo {}
3860impl<'a> PipelineShaderStageCreateInfo<'a> {
3861    #[inline]
3862    pub fn flags(mut self, flags: PipelineShaderStageCreateFlags) -> Self {
3863        self.flags = flags;
3864        self
3865    }
3866    #[inline]
3867    pub fn stage(mut self, stage: ShaderStageFlags) -> Self {
3868        self.stage = stage;
3869        self
3870    }
3871    #[inline]
3872    pub fn module(mut self, module: ShaderModule) -> Self {
3873        self.module = module;
3874        self
3875    }
3876    #[inline]
3877    pub fn name(mut self, name: &'a CStr) -> Self {
3878        self.p_name = name.as_ptr();
3879        self
3880    }
3881    #[inline]
3882    pub unsafe fn name_as_c_str(&self) -> Option<&CStr> {
3883        if self.p_name.is_null() {
3884            None
3885        } else {
3886            Some(CStr::from_ptr(self.p_name))
3887        }
3888    }
3889    #[inline]
3890    pub fn specialization_info(mut self, specialization_info: &'a SpecializationInfo<'a>) -> Self {
3891        self.p_specialization_info = specialization_info;
3892        self
3893    }
3894    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3895    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3896    #[doc = r" valid extension structs can be pushed into the chain."]
3897    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3898    #[doc = r" chain will look like `A -> D -> B -> C`."]
3899    pub fn push_next<T: ExtendsPipelineShaderStageCreateInfo + ?Sized>(
3900        mut self,
3901        next: &'a mut T,
3902    ) -> Self {
3903        unsafe {
3904            let next_ptr = <*const T>::cast(next);
3905            let last_next = ptr_chain_iter(next).last().unwrap();
3906            (*last_next).p_next = self.p_next as _;
3907            self.p_next = next_ptr;
3908        }
3909        self
3910    }
3911}
3912#[repr(C)]
3913#[cfg_attr(feature = "debug", derive(Debug))]
3914#[derive(Copy, Clone)]
3915#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkComputePipelineCreateInfo.html>"]
3916#[must_use]
3917pub struct ComputePipelineCreateInfo<'a> {
3918    pub s_type: StructureType,
3919    pub p_next: *const c_void,
3920    pub flags: PipelineCreateFlags,
3921    pub stage: PipelineShaderStageCreateInfo<'a>,
3922    pub layout: PipelineLayout,
3923    pub base_pipeline_handle: Pipeline,
3924    pub base_pipeline_index: i32,
3925    pub _marker: PhantomData<&'a ()>,
3926}
3927unsafe impl Send for ComputePipelineCreateInfo<'_> {}
3928unsafe impl Sync for ComputePipelineCreateInfo<'_> {}
3929impl ::core::default::Default for ComputePipelineCreateInfo<'_> {
3930    #[inline]
3931    fn default() -> Self {
3932        Self {
3933            s_type: Self::STRUCTURE_TYPE,
3934            p_next: ::core::ptr::null(),
3935            flags: PipelineCreateFlags::default(),
3936            stage: PipelineShaderStageCreateInfo::default(),
3937            layout: PipelineLayout::default(),
3938            base_pipeline_handle: Pipeline::default(),
3939            base_pipeline_index: i32::default(),
3940            _marker: PhantomData,
3941        }
3942    }
3943}
3944unsafe impl<'a> TaggedStructure for ComputePipelineCreateInfo<'a> {
3945    const STRUCTURE_TYPE: StructureType = StructureType::COMPUTE_PIPELINE_CREATE_INFO;
3946}
3947pub unsafe trait ExtendsComputePipelineCreateInfo {}
3948impl<'a> ComputePipelineCreateInfo<'a> {
3949    #[inline]
3950    pub fn flags(mut self, flags: PipelineCreateFlags) -> Self {
3951        self.flags = flags;
3952        self
3953    }
3954    #[inline]
3955    pub fn stage(mut self, stage: PipelineShaderStageCreateInfo<'a>) -> Self {
3956        self.stage = stage;
3957        self
3958    }
3959    #[inline]
3960    pub fn layout(mut self, layout: PipelineLayout) -> Self {
3961        self.layout = layout;
3962        self
3963    }
3964    #[inline]
3965    pub fn base_pipeline_handle(mut self, base_pipeline_handle: Pipeline) -> Self {
3966        self.base_pipeline_handle = base_pipeline_handle;
3967        self
3968    }
3969    #[inline]
3970    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
3971        self.base_pipeline_index = base_pipeline_index;
3972        self
3973    }
3974    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
3975    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
3976    #[doc = r" valid extension structs can be pushed into the chain."]
3977    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
3978    #[doc = r" chain will look like `A -> D -> B -> C`."]
3979    pub fn push_next<T: ExtendsComputePipelineCreateInfo + ?Sized>(
3980        mut self,
3981        next: &'a mut T,
3982    ) -> Self {
3983        unsafe {
3984            let next_ptr = <*const T>::cast(next);
3985            let last_next = ptr_chain_iter(next).last().unwrap();
3986            (*last_next).p_next = self.p_next as _;
3987            self.p_next = next_ptr;
3988        }
3989        self
3990    }
3991}
3992#[repr(C)]
3993#[cfg_attr(feature = "debug", derive(Debug))]
3994#[derive(Copy, Clone)]
3995#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkComputePipelineIndirectBufferInfoNV.html>"]
3996#[must_use]
3997pub struct ComputePipelineIndirectBufferInfoNV<'a> {
3998    pub s_type: StructureType,
3999    pub p_next: *const c_void,
4000    pub device_address: DeviceAddress,
4001    pub size: DeviceSize,
4002    pub pipeline_device_address_capture_replay: DeviceAddress,
4003    pub _marker: PhantomData<&'a ()>,
4004}
4005unsafe impl Send for ComputePipelineIndirectBufferInfoNV<'_> {}
4006unsafe impl Sync for ComputePipelineIndirectBufferInfoNV<'_> {}
4007impl ::core::default::Default for ComputePipelineIndirectBufferInfoNV<'_> {
4008    #[inline]
4009    fn default() -> Self {
4010        Self {
4011            s_type: Self::STRUCTURE_TYPE,
4012            p_next: ::core::ptr::null(),
4013            device_address: DeviceAddress::default(),
4014            size: DeviceSize::default(),
4015            pipeline_device_address_capture_replay: DeviceAddress::default(),
4016            _marker: PhantomData,
4017        }
4018    }
4019}
4020unsafe impl<'a> TaggedStructure for ComputePipelineIndirectBufferInfoNV<'a> {
4021    const STRUCTURE_TYPE: StructureType = StructureType::COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV;
4022}
4023unsafe impl ExtendsComputePipelineCreateInfo for ComputePipelineIndirectBufferInfoNV<'_> {}
4024impl<'a> ComputePipelineIndirectBufferInfoNV<'a> {
4025    #[inline]
4026    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
4027        self.device_address = device_address;
4028        self
4029    }
4030    #[inline]
4031    pub fn size(mut self, size: DeviceSize) -> Self {
4032        self.size = size;
4033        self
4034    }
4035    #[inline]
4036    pub fn pipeline_device_address_capture_replay(
4037        mut self,
4038        pipeline_device_address_capture_replay: DeviceAddress,
4039    ) -> Self {
4040        self.pipeline_device_address_capture_replay = pipeline_device_address_capture_replay;
4041        self
4042    }
4043}
4044#[repr(C)]
4045#[cfg_attr(feature = "debug", derive(Debug))]
4046#[derive(Copy, Clone)]
4047#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCreateFlags2CreateInfoKHR.html>"]
4048#[must_use]
4049pub struct PipelineCreateFlags2CreateInfoKHR<'a> {
4050    pub s_type: StructureType,
4051    pub p_next: *const c_void,
4052    pub flags: PipelineCreateFlags2KHR,
4053    pub _marker: PhantomData<&'a ()>,
4054}
4055unsafe impl Send for PipelineCreateFlags2CreateInfoKHR<'_> {}
4056unsafe impl Sync for PipelineCreateFlags2CreateInfoKHR<'_> {}
4057impl ::core::default::Default for PipelineCreateFlags2CreateInfoKHR<'_> {
4058    #[inline]
4059    fn default() -> Self {
4060        Self {
4061            s_type: Self::STRUCTURE_TYPE,
4062            p_next: ::core::ptr::null(),
4063            flags: PipelineCreateFlags2KHR::default(),
4064            _marker: PhantomData,
4065        }
4066    }
4067}
4068unsafe impl<'a> TaggedStructure for PipelineCreateFlags2CreateInfoKHR<'a> {
4069    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR;
4070}
4071unsafe impl ExtendsComputePipelineCreateInfo for PipelineCreateFlags2CreateInfoKHR<'_> {}
4072unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineCreateFlags2CreateInfoKHR<'_> {}
4073unsafe impl ExtendsRayTracingPipelineCreateInfoNV for PipelineCreateFlags2CreateInfoKHR<'_> {}
4074unsafe impl ExtendsRayTracingPipelineCreateInfoKHR for PipelineCreateFlags2CreateInfoKHR<'_> {}
4075impl<'a> PipelineCreateFlags2CreateInfoKHR<'a> {
4076    #[inline]
4077    pub fn flags(mut self, flags: PipelineCreateFlags2KHR) -> Self {
4078        self.flags = flags;
4079        self
4080    }
4081}
4082#[repr(C)]
4083#[cfg_attr(feature = "debug", derive(Debug))]
4084#[derive(Copy, Clone, Default)]
4085#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVertexInputBindingDescription.html>"]
4086#[must_use]
4087pub struct VertexInputBindingDescription {
4088    pub binding: u32,
4089    pub stride: u32,
4090    pub input_rate: VertexInputRate,
4091}
4092impl VertexInputBindingDescription {
4093    #[inline]
4094    pub fn binding(mut self, binding: u32) -> Self {
4095        self.binding = binding;
4096        self
4097    }
4098    #[inline]
4099    pub fn stride(mut self, stride: u32) -> Self {
4100        self.stride = stride;
4101        self
4102    }
4103    #[inline]
4104    pub fn input_rate(mut self, input_rate: VertexInputRate) -> Self {
4105        self.input_rate = input_rate;
4106        self
4107    }
4108}
4109#[repr(C)]
4110#[cfg_attr(feature = "debug", derive(Debug))]
4111#[derive(Copy, Clone, Default)]
4112#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVertexInputAttributeDescription.html>"]
4113#[must_use]
4114pub struct VertexInputAttributeDescription {
4115    pub location: u32,
4116    pub binding: u32,
4117    pub format: Format,
4118    pub offset: u32,
4119}
4120impl VertexInputAttributeDescription {
4121    #[inline]
4122    pub fn location(mut self, location: u32) -> Self {
4123        self.location = location;
4124        self
4125    }
4126    #[inline]
4127    pub fn binding(mut self, binding: u32) -> Self {
4128        self.binding = binding;
4129        self
4130    }
4131    #[inline]
4132    pub fn format(mut self, format: Format) -> Self {
4133        self.format = format;
4134        self
4135    }
4136    #[inline]
4137    pub fn offset(mut self, offset: u32) -> Self {
4138        self.offset = offset;
4139        self
4140    }
4141}
4142#[repr(C)]
4143#[cfg_attr(feature = "debug", derive(Debug))]
4144#[derive(Copy, Clone)]
4145#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineVertexInputStateCreateInfo.html>"]
4146#[must_use]
4147pub struct PipelineVertexInputStateCreateInfo<'a> {
4148    pub s_type: StructureType,
4149    pub p_next: *const c_void,
4150    pub flags: PipelineVertexInputStateCreateFlags,
4151    pub vertex_binding_description_count: u32,
4152    pub p_vertex_binding_descriptions: *const VertexInputBindingDescription,
4153    pub vertex_attribute_description_count: u32,
4154    pub p_vertex_attribute_descriptions: *const VertexInputAttributeDescription,
4155    pub _marker: PhantomData<&'a ()>,
4156}
4157unsafe impl Send for PipelineVertexInputStateCreateInfo<'_> {}
4158unsafe impl Sync for PipelineVertexInputStateCreateInfo<'_> {}
4159impl ::core::default::Default for PipelineVertexInputStateCreateInfo<'_> {
4160    #[inline]
4161    fn default() -> Self {
4162        Self {
4163            s_type: Self::STRUCTURE_TYPE,
4164            p_next: ::core::ptr::null(),
4165            flags: PipelineVertexInputStateCreateFlags::default(),
4166            vertex_binding_description_count: u32::default(),
4167            p_vertex_binding_descriptions: ::core::ptr::null(),
4168            vertex_attribute_description_count: u32::default(),
4169            p_vertex_attribute_descriptions: ::core::ptr::null(),
4170            _marker: PhantomData,
4171        }
4172    }
4173}
4174unsafe impl<'a> TaggedStructure for PipelineVertexInputStateCreateInfo<'a> {
4175    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
4176}
4177pub unsafe trait ExtendsPipelineVertexInputStateCreateInfo {}
4178impl<'a> PipelineVertexInputStateCreateInfo<'a> {
4179    #[inline]
4180    pub fn flags(mut self, flags: PipelineVertexInputStateCreateFlags) -> Self {
4181        self.flags = flags;
4182        self
4183    }
4184    #[inline]
4185    pub fn vertex_binding_descriptions(
4186        mut self,
4187        vertex_binding_descriptions: &'a [VertexInputBindingDescription],
4188    ) -> Self {
4189        self.vertex_binding_description_count = vertex_binding_descriptions.len() as _;
4190        self.p_vertex_binding_descriptions = vertex_binding_descriptions.as_ptr();
4191        self
4192    }
4193    #[inline]
4194    pub fn vertex_attribute_descriptions(
4195        mut self,
4196        vertex_attribute_descriptions: &'a [VertexInputAttributeDescription],
4197    ) -> Self {
4198        self.vertex_attribute_description_count = vertex_attribute_descriptions.len() as _;
4199        self.p_vertex_attribute_descriptions = vertex_attribute_descriptions.as_ptr();
4200        self
4201    }
4202    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4203    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4204    #[doc = r" valid extension structs can be pushed into the chain."]
4205    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4206    #[doc = r" chain will look like `A -> D -> B -> C`."]
4207    pub fn push_next<T: ExtendsPipelineVertexInputStateCreateInfo + ?Sized>(
4208        mut self,
4209        next: &'a mut T,
4210    ) -> Self {
4211        unsafe {
4212            let next_ptr = <*const T>::cast(next);
4213            let last_next = ptr_chain_iter(next).last().unwrap();
4214            (*last_next).p_next = self.p_next as _;
4215            self.p_next = next_ptr;
4216        }
4217        self
4218    }
4219}
4220#[repr(C)]
4221#[cfg_attr(feature = "debug", derive(Debug))]
4222#[derive(Copy, Clone)]
4223#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineInputAssemblyStateCreateInfo.html>"]
4224#[must_use]
4225pub struct PipelineInputAssemblyStateCreateInfo<'a> {
4226    pub s_type: StructureType,
4227    pub p_next: *const c_void,
4228    pub flags: PipelineInputAssemblyStateCreateFlags,
4229    pub topology: PrimitiveTopology,
4230    pub primitive_restart_enable: Bool32,
4231    pub _marker: PhantomData<&'a ()>,
4232}
4233unsafe impl Send for PipelineInputAssemblyStateCreateInfo<'_> {}
4234unsafe impl Sync for PipelineInputAssemblyStateCreateInfo<'_> {}
4235impl ::core::default::Default for PipelineInputAssemblyStateCreateInfo<'_> {
4236    #[inline]
4237    fn default() -> Self {
4238        Self {
4239            s_type: Self::STRUCTURE_TYPE,
4240            p_next: ::core::ptr::null(),
4241            flags: PipelineInputAssemblyStateCreateFlags::default(),
4242            topology: PrimitiveTopology::default(),
4243            primitive_restart_enable: Bool32::default(),
4244            _marker: PhantomData,
4245        }
4246    }
4247}
4248unsafe impl<'a> TaggedStructure for PipelineInputAssemblyStateCreateInfo<'a> {
4249    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
4250}
4251impl<'a> PipelineInputAssemblyStateCreateInfo<'a> {
4252    #[inline]
4253    pub fn flags(mut self, flags: PipelineInputAssemblyStateCreateFlags) -> Self {
4254        self.flags = flags;
4255        self
4256    }
4257    #[inline]
4258    pub fn topology(mut self, topology: PrimitiveTopology) -> Self {
4259        self.topology = topology;
4260        self
4261    }
4262    #[inline]
4263    pub fn primitive_restart_enable(mut self, primitive_restart_enable: bool) -> Self {
4264        self.primitive_restart_enable = primitive_restart_enable.into();
4265        self
4266    }
4267}
4268#[repr(C)]
4269#[cfg_attr(feature = "debug", derive(Debug))]
4270#[derive(Copy, Clone)]
4271#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineTessellationStateCreateInfo.html>"]
4272#[must_use]
4273pub struct PipelineTessellationStateCreateInfo<'a> {
4274    pub s_type: StructureType,
4275    pub p_next: *const c_void,
4276    pub flags: PipelineTessellationStateCreateFlags,
4277    pub patch_control_points: u32,
4278    pub _marker: PhantomData<&'a ()>,
4279}
4280unsafe impl Send for PipelineTessellationStateCreateInfo<'_> {}
4281unsafe impl Sync for PipelineTessellationStateCreateInfo<'_> {}
4282impl ::core::default::Default for PipelineTessellationStateCreateInfo<'_> {
4283    #[inline]
4284    fn default() -> Self {
4285        Self {
4286            s_type: Self::STRUCTURE_TYPE,
4287            p_next: ::core::ptr::null(),
4288            flags: PipelineTessellationStateCreateFlags::default(),
4289            patch_control_points: u32::default(),
4290            _marker: PhantomData,
4291        }
4292    }
4293}
4294unsafe impl<'a> TaggedStructure for PipelineTessellationStateCreateInfo<'a> {
4295    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_TESSELLATION_STATE_CREATE_INFO;
4296}
4297pub unsafe trait ExtendsPipelineTessellationStateCreateInfo {}
4298impl<'a> PipelineTessellationStateCreateInfo<'a> {
4299    #[inline]
4300    pub fn flags(mut self, flags: PipelineTessellationStateCreateFlags) -> Self {
4301        self.flags = flags;
4302        self
4303    }
4304    #[inline]
4305    pub fn patch_control_points(mut self, patch_control_points: u32) -> Self {
4306        self.patch_control_points = patch_control_points;
4307        self
4308    }
4309    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4310    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4311    #[doc = r" valid extension structs can be pushed into the chain."]
4312    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4313    #[doc = r" chain will look like `A -> D -> B -> C`."]
4314    pub fn push_next<T: ExtendsPipelineTessellationStateCreateInfo + ?Sized>(
4315        mut self,
4316        next: &'a mut T,
4317    ) -> Self {
4318        unsafe {
4319            let next_ptr = <*const T>::cast(next);
4320            let last_next = ptr_chain_iter(next).last().unwrap();
4321            (*last_next).p_next = self.p_next as _;
4322            self.p_next = next_ptr;
4323        }
4324        self
4325    }
4326}
4327#[repr(C)]
4328#[cfg_attr(feature = "debug", derive(Debug))]
4329#[derive(Copy, Clone)]
4330#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportStateCreateInfo.html>"]
4331#[must_use]
4332pub struct PipelineViewportStateCreateInfo<'a> {
4333    pub s_type: StructureType,
4334    pub p_next: *const c_void,
4335    pub flags: PipelineViewportStateCreateFlags,
4336    pub viewport_count: u32,
4337    pub p_viewports: *const Viewport,
4338    pub scissor_count: u32,
4339    pub p_scissors: *const Rect2D,
4340    pub _marker: PhantomData<&'a ()>,
4341}
4342unsafe impl Send for PipelineViewportStateCreateInfo<'_> {}
4343unsafe impl Sync for PipelineViewportStateCreateInfo<'_> {}
4344impl ::core::default::Default for PipelineViewportStateCreateInfo<'_> {
4345    #[inline]
4346    fn default() -> Self {
4347        Self {
4348            s_type: Self::STRUCTURE_TYPE,
4349            p_next: ::core::ptr::null(),
4350            flags: PipelineViewportStateCreateFlags::default(),
4351            viewport_count: u32::default(),
4352            p_viewports: ::core::ptr::null(),
4353            scissor_count: u32::default(),
4354            p_scissors: ::core::ptr::null(),
4355            _marker: PhantomData,
4356        }
4357    }
4358}
4359unsafe impl<'a> TaggedStructure for PipelineViewportStateCreateInfo<'a> {
4360    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_VIEWPORT_STATE_CREATE_INFO;
4361}
4362pub unsafe trait ExtendsPipelineViewportStateCreateInfo {}
4363impl<'a> PipelineViewportStateCreateInfo<'a> {
4364    #[inline]
4365    pub fn flags(mut self, flags: PipelineViewportStateCreateFlags) -> Self {
4366        self.flags = flags;
4367        self
4368    }
4369    #[inline]
4370    pub fn viewport_count(mut self, viewport_count: u32) -> Self {
4371        self.viewport_count = viewport_count;
4372        self
4373    }
4374    #[inline]
4375    pub fn viewports(mut self, viewports: &'a [Viewport]) -> Self {
4376        self.viewport_count = viewports.len() as _;
4377        self.p_viewports = viewports.as_ptr();
4378        self
4379    }
4380    #[inline]
4381    pub fn scissor_count(mut self, scissor_count: u32) -> Self {
4382        self.scissor_count = scissor_count;
4383        self
4384    }
4385    #[inline]
4386    pub fn scissors(mut self, scissors: &'a [Rect2D]) -> Self {
4387        self.scissor_count = scissors.len() as _;
4388        self.p_scissors = scissors.as_ptr();
4389        self
4390    }
4391    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4392    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4393    #[doc = r" valid extension structs can be pushed into the chain."]
4394    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4395    #[doc = r" chain will look like `A -> D -> B -> C`."]
4396    pub fn push_next<T: ExtendsPipelineViewportStateCreateInfo + ?Sized>(
4397        mut self,
4398        next: &'a mut T,
4399    ) -> Self {
4400        unsafe {
4401            let next_ptr = <*const T>::cast(next);
4402            let last_next = ptr_chain_iter(next).last().unwrap();
4403            (*last_next).p_next = self.p_next as _;
4404            self.p_next = next_ptr;
4405        }
4406        self
4407    }
4408}
4409#[repr(C)]
4410#[cfg_attr(feature = "debug", derive(Debug))]
4411#[derive(Copy, Clone)]
4412#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationStateCreateInfo.html>"]
4413#[must_use]
4414pub struct PipelineRasterizationStateCreateInfo<'a> {
4415    pub s_type: StructureType,
4416    pub p_next: *const c_void,
4417    pub flags: PipelineRasterizationStateCreateFlags,
4418    pub depth_clamp_enable: Bool32,
4419    pub rasterizer_discard_enable: Bool32,
4420    pub polygon_mode: PolygonMode,
4421    pub cull_mode: CullModeFlags,
4422    pub front_face: FrontFace,
4423    pub depth_bias_enable: Bool32,
4424    pub depth_bias_constant_factor: f32,
4425    pub depth_bias_clamp: f32,
4426    pub depth_bias_slope_factor: f32,
4427    pub line_width: f32,
4428    pub _marker: PhantomData<&'a ()>,
4429}
4430unsafe impl Send for PipelineRasterizationStateCreateInfo<'_> {}
4431unsafe impl Sync for PipelineRasterizationStateCreateInfo<'_> {}
4432impl ::core::default::Default for PipelineRasterizationStateCreateInfo<'_> {
4433    #[inline]
4434    fn default() -> Self {
4435        Self {
4436            s_type: Self::STRUCTURE_TYPE,
4437            p_next: ::core::ptr::null(),
4438            flags: PipelineRasterizationStateCreateFlags::default(),
4439            depth_clamp_enable: Bool32::default(),
4440            rasterizer_discard_enable: Bool32::default(),
4441            polygon_mode: PolygonMode::default(),
4442            cull_mode: CullModeFlags::default(),
4443            front_face: FrontFace::default(),
4444            depth_bias_enable: Bool32::default(),
4445            depth_bias_constant_factor: f32::default(),
4446            depth_bias_clamp: f32::default(),
4447            depth_bias_slope_factor: f32::default(),
4448            line_width: f32::default(),
4449            _marker: PhantomData,
4450        }
4451    }
4452}
4453unsafe impl<'a> TaggedStructure for PipelineRasterizationStateCreateInfo<'a> {
4454    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
4455}
4456pub unsafe trait ExtendsPipelineRasterizationStateCreateInfo {}
4457impl<'a> PipelineRasterizationStateCreateInfo<'a> {
4458    #[inline]
4459    pub fn flags(mut self, flags: PipelineRasterizationStateCreateFlags) -> Self {
4460        self.flags = flags;
4461        self
4462    }
4463    #[inline]
4464    pub fn depth_clamp_enable(mut self, depth_clamp_enable: bool) -> Self {
4465        self.depth_clamp_enable = depth_clamp_enable.into();
4466        self
4467    }
4468    #[inline]
4469    pub fn rasterizer_discard_enable(mut self, rasterizer_discard_enable: bool) -> Self {
4470        self.rasterizer_discard_enable = rasterizer_discard_enable.into();
4471        self
4472    }
4473    #[inline]
4474    pub fn polygon_mode(mut self, polygon_mode: PolygonMode) -> Self {
4475        self.polygon_mode = polygon_mode;
4476        self
4477    }
4478    #[inline]
4479    pub fn cull_mode(mut self, cull_mode: CullModeFlags) -> Self {
4480        self.cull_mode = cull_mode;
4481        self
4482    }
4483    #[inline]
4484    pub fn front_face(mut self, front_face: FrontFace) -> Self {
4485        self.front_face = front_face;
4486        self
4487    }
4488    #[inline]
4489    pub fn depth_bias_enable(mut self, depth_bias_enable: bool) -> Self {
4490        self.depth_bias_enable = depth_bias_enable.into();
4491        self
4492    }
4493    #[inline]
4494    pub fn depth_bias_constant_factor(mut self, depth_bias_constant_factor: f32) -> Self {
4495        self.depth_bias_constant_factor = depth_bias_constant_factor;
4496        self
4497    }
4498    #[inline]
4499    pub fn depth_bias_clamp(mut self, depth_bias_clamp: f32) -> Self {
4500        self.depth_bias_clamp = depth_bias_clamp;
4501        self
4502    }
4503    #[inline]
4504    pub fn depth_bias_slope_factor(mut self, depth_bias_slope_factor: f32) -> Self {
4505        self.depth_bias_slope_factor = depth_bias_slope_factor;
4506        self
4507    }
4508    #[inline]
4509    pub fn line_width(mut self, line_width: f32) -> Self {
4510        self.line_width = line_width;
4511        self
4512    }
4513    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4514    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4515    #[doc = r" valid extension structs can be pushed into the chain."]
4516    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4517    #[doc = r" chain will look like `A -> D -> B -> C`."]
4518    pub fn push_next<T: ExtendsPipelineRasterizationStateCreateInfo + ?Sized>(
4519        mut self,
4520        next: &'a mut T,
4521    ) -> Self {
4522        unsafe {
4523            let next_ptr = <*const T>::cast(next);
4524            let last_next = ptr_chain_iter(next).last().unwrap();
4525            (*last_next).p_next = self.p_next as _;
4526            self.p_next = next_ptr;
4527        }
4528        self
4529    }
4530}
4531#[repr(C)]
4532#[cfg_attr(feature = "debug", derive(Debug))]
4533#[derive(Copy, Clone)]
4534#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineMultisampleStateCreateInfo.html>"]
4535#[must_use]
4536pub struct PipelineMultisampleStateCreateInfo<'a> {
4537    pub s_type: StructureType,
4538    pub p_next: *const c_void,
4539    pub flags: PipelineMultisampleStateCreateFlags,
4540    pub rasterization_samples: SampleCountFlags,
4541    pub sample_shading_enable: Bool32,
4542    pub min_sample_shading: f32,
4543    pub p_sample_mask: *const SampleMask,
4544    pub alpha_to_coverage_enable: Bool32,
4545    pub alpha_to_one_enable: Bool32,
4546    pub _marker: PhantomData<&'a ()>,
4547}
4548unsafe impl Send for PipelineMultisampleStateCreateInfo<'_> {}
4549unsafe impl Sync for PipelineMultisampleStateCreateInfo<'_> {}
4550impl ::core::default::Default for PipelineMultisampleStateCreateInfo<'_> {
4551    #[inline]
4552    fn default() -> Self {
4553        Self {
4554            s_type: Self::STRUCTURE_TYPE,
4555            p_next: ::core::ptr::null(),
4556            flags: PipelineMultisampleStateCreateFlags::default(),
4557            rasterization_samples: SampleCountFlags::default(),
4558            sample_shading_enable: Bool32::default(),
4559            min_sample_shading: f32::default(),
4560            p_sample_mask: ::core::ptr::null(),
4561            alpha_to_coverage_enable: Bool32::default(),
4562            alpha_to_one_enable: Bool32::default(),
4563            _marker: PhantomData,
4564        }
4565    }
4566}
4567unsafe impl<'a> TaggedStructure for PipelineMultisampleStateCreateInfo<'a> {
4568    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
4569}
4570pub unsafe trait ExtendsPipelineMultisampleStateCreateInfo {}
4571impl<'a> PipelineMultisampleStateCreateInfo<'a> {
4572    #[inline]
4573    pub fn flags(mut self, flags: PipelineMultisampleStateCreateFlags) -> Self {
4574        self.flags = flags;
4575        self
4576    }
4577    #[inline]
4578    pub fn rasterization_samples(mut self, rasterization_samples: SampleCountFlags) -> Self {
4579        self.rasterization_samples = rasterization_samples;
4580        self
4581    }
4582    #[inline]
4583    pub fn sample_shading_enable(mut self, sample_shading_enable: bool) -> Self {
4584        self.sample_shading_enable = sample_shading_enable.into();
4585        self
4586    }
4587    #[inline]
4588    pub fn min_sample_shading(mut self, min_sample_shading: f32) -> Self {
4589        self.min_sample_shading = min_sample_shading;
4590        self
4591    }
4592    #[doc = r" Sets `p_sample_mask` to `null` if the slice is empty. The mask will"]
4593    #[doc = r" be treated as if it has all bits set to `1`."]
4594    #[doc = r""]
4595    #[doc = r" See <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineMultisampleStateCreateInfo.html#_description>"]
4596    #[doc = r" for more details."]
4597    #[inline]
4598    pub fn sample_mask(mut self, sample_mask: &'a [SampleMask]) -> Self {
4599        self.p_sample_mask = if sample_mask.is_empty() {
4600            core::ptr::null()
4601        } else {
4602            sample_mask.as_ptr()
4603        };
4604        self
4605    }
4606    #[inline]
4607    pub fn alpha_to_coverage_enable(mut self, alpha_to_coverage_enable: bool) -> Self {
4608        self.alpha_to_coverage_enable = alpha_to_coverage_enable.into();
4609        self
4610    }
4611    #[inline]
4612    pub fn alpha_to_one_enable(mut self, alpha_to_one_enable: bool) -> Self {
4613        self.alpha_to_one_enable = alpha_to_one_enable.into();
4614        self
4615    }
4616    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4617    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4618    #[doc = r" valid extension structs can be pushed into the chain."]
4619    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4620    #[doc = r" chain will look like `A -> D -> B -> C`."]
4621    pub fn push_next<T: ExtendsPipelineMultisampleStateCreateInfo + ?Sized>(
4622        mut self,
4623        next: &'a mut T,
4624    ) -> Self {
4625        unsafe {
4626            let next_ptr = <*const T>::cast(next);
4627            let last_next = ptr_chain_iter(next).last().unwrap();
4628            (*last_next).p_next = self.p_next as _;
4629            self.p_next = next_ptr;
4630        }
4631        self
4632    }
4633}
4634#[repr(C)]
4635#[cfg_attr(feature = "debug", derive(Debug))]
4636#[derive(Copy, Clone, Default)]
4637#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineColorBlendAttachmentState.html>"]
4638#[must_use]
4639pub struct PipelineColorBlendAttachmentState {
4640    pub blend_enable: Bool32,
4641    pub src_color_blend_factor: BlendFactor,
4642    pub dst_color_blend_factor: BlendFactor,
4643    pub color_blend_op: BlendOp,
4644    pub src_alpha_blend_factor: BlendFactor,
4645    pub dst_alpha_blend_factor: BlendFactor,
4646    pub alpha_blend_op: BlendOp,
4647    pub color_write_mask: ColorComponentFlags,
4648}
4649impl PipelineColorBlendAttachmentState {
4650    #[inline]
4651    pub fn blend_enable(mut self, blend_enable: bool) -> Self {
4652        self.blend_enable = blend_enable.into();
4653        self
4654    }
4655    #[inline]
4656    pub fn src_color_blend_factor(mut self, src_color_blend_factor: BlendFactor) -> Self {
4657        self.src_color_blend_factor = src_color_blend_factor;
4658        self
4659    }
4660    #[inline]
4661    pub fn dst_color_blend_factor(mut self, dst_color_blend_factor: BlendFactor) -> Self {
4662        self.dst_color_blend_factor = dst_color_blend_factor;
4663        self
4664    }
4665    #[inline]
4666    pub fn color_blend_op(mut self, color_blend_op: BlendOp) -> Self {
4667        self.color_blend_op = color_blend_op;
4668        self
4669    }
4670    #[inline]
4671    pub fn src_alpha_blend_factor(mut self, src_alpha_blend_factor: BlendFactor) -> Self {
4672        self.src_alpha_blend_factor = src_alpha_blend_factor;
4673        self
4674    }
4675    #[inline]
4676    pub fn dst_alpha_blend_factor(mut self, dst_alpha_blend_factor: BlendFactor) -> Self {
4677        self.dst_alpha_blend_factor = dst_alpha_blend_factor;
4678        self
4679    }
4680    #[inline]
4681    pub fn alpha_blend_op(mut self, alpha_blend_op: BlendOp) -> Self {
4682        self.alpha_blend_op = alpha_blend_op;
4683        self
4684    }
4685    #[inline]
4686    pub fn color_write_mask(mut self, color_write_mask: ColorComponentFlags) -> Self {
4687        self.color_write_mask = color_write_mask;
4688        self
4689    }
4690}
4691#[repr(C)]
4692#[cfg_attr(feature = "debug", derive(Debug))]
4693#[derive(Copy, Clone)]
4694#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineColorBlendStateCreateInfo.html>"]
4695#[must_use]
4696pub struct PipelineColorBlendStateCreateInfo<'a> {
4697    pub s_type: StructureType,
4698    pub p_next: *const c_void,
4699    pub flags: PipelineColorBlendStateCreateFlags,
4700    pub logic_op_enable: Bool32,
4701    pub logic_op: LogicOp,
4702    pub attachment_count: u32,
4703    pub p_attachments: *const PipelineColorBlendAttachmentState,
4704    pub blend_constants: [f32; 4],
4705    pub _marker: PhantomData<&'a ()>,
4706}
4707unsafe impl Send for PipelineColorBlendStateCreateInfo<'_> {}
4708unsafe impl Sync for PipelineColorBlendStateCreateInfo<'_> {}
4709impl ::core::default::Default for PipelineColorBlendStateCreateInfo<'_> {
4710    #[inline]
4711    fn default() -> Self {
4712        Self {
4713            s_type: Self::STRUCTURE_TYPE,
4714            p_next: ::core::ptr::null(),
4715            flags: PipelineColorBlendStateCreateFlags::default(),
4716            logic_op_enable: Bool32::default(),
4717            logic_op: LogicOp::default(),
4718            attachment_count: u32::default(),
4719            p_attachments: ::core::ptr::null(),
4720            blend_constants: unsafe { ::core::mem::zeroed() },
4721            _marker: PhantomData,
4722        }
4723    }
4724}
4725unsafe impl<'a> TaggedStructure for PipelineColorBlendStateCreateInfo<'a> {
4726    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
4727}
4728pub unsafe trait ExtendsPipelineColorBlendStateCreateInfo {}
4729impl<'a> PipelineColorBlendStateCreateInfo<'a> {
4730    #[inline]
4731    pub fn flags(mut self, flags: PipelineColorBlendStateCreateFlags) -> Self {
4732        self.flags = flags;
4733        self
4734    }
4735    #[inline]
4736    pub fn logic_op_enable(mut self, logic_op_enable: bool) -> Self {
4737        self.logic_op_enable = logic_op_enable.into();
4738        self
4739    }
4740    #[inline]
4741    pub fn logic_op(mut self, logic_op: LogicOp) -> Self {
4742        self.logic_op = logic_op;
4743        self
4744    }
4745    #[inline]
4746    pub fn attachments(mut self, attachments: &'a [PipelineColorBlendAttachmentState]) -> Self {
4747        self.attachment_count = attachments.len() as _;
4748        self.p_attachments = attachments.as_ptr();
4749        self
4750    }
4751    #[inline]
4752    pub fn blend_constants(mut self, blend_constants: [f32; 4]) -> Self {
4753        self.blend_constants = blend_constants;
4754        self
4755    }
4756    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
4757    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
4758    #[doc = r" valid extension structs can be pushed into the chain."]
4759    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
4760    #[doc = r" chain will look like `A -> D -> B -> C`."]
4761    pub fn push_next<T: ExtendsPipelineColorBlendStateCreateInfo + ?Sized>(
4762        mut self,
4763        next: &'a mut T,
4764    ) -> Self {
4765        unsafe {
4766            let next_ptr = <*const T>::cast(next);
4767            let last_next = ptr_chain_iter(next).last().unwrap();
4768            (*last_next).p_next = self.p_next as _;
4769            self.p_next = next_ptr;
4770        }
4771        self
4772    }
4773}
4774#[repr(C)]
4775#[cfg_attr(feature = "debug", derive(Debug))]
4776#[derive(Copy, Clone)]
4777#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineDynamicStateCreateInfo.html>"]
4778#[must_use]
4779pub struct PipelineDynamicStateCreateInfo<'a> {
4780    pub s_type: StructureType,
4781    pub p_next: *const c_void,
4782    pub flags: PipelineDynamicStateCreateFlags,
4783    pub dynamic_state_count: u32,
4784    pub p_dynamic_states: *const DynamicState,
4785    pub _marker: PhantomData<&'a ()>,
4786}
4787unsafe impl Send for PipelineDynamicStateCreateInfo<'_> {}
4788unsafe impl Sync for PipelineDynamicStateCreateInfo<'_> {}
4789impl ::core::default::Default for PipelineDynamicStateCreateInfo<'_> {
4790    #[inline]
4791    fn default() -> Self {
4792        Self {
4793            s_type: Self::STRUCTURE_TYPE,
4794            p_next: ::core::ptr::null(),
4795            flags: PipelineDynamicStateCreateFlags::default(),
4796            dynamic_state_count: u32::default(),
4797            p_dynamic_states: ::core::ptr::null(),
4798            _marker: PhantomData,
4799        }
4800    }
4801}
4802unsafe impl<'a> TaggedStructure for PipelineDynamicStateCreateInfo<'a> {
4803    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_DYNAMIC_STATE_CREATE_INFO;
4804}
4805impl<'a> PipelineDynamicStateCreateInfo<'a> {
4806    #[inline]
4807    pub fn flags(mut self, flags: PipelineDynamicStateCreateFlags) -> Self {
4808        self.flags = flags;
4809        self
4810    }
4811    #[inline]
4812    pub fn dynamic_states(mut self, dynamic_states: &'a [DynamicState]) -> Self {
4813        self.dynamic_state_count = dynamic_states.len() as _;
4814        self.p_dynamic_states = dynamic_states.as_ptr();
4815        self
4816    }
4817}
4818#[repr(C)]
4819#[cfg_attr(feature = "debug", derive(Debug))]
4820#[derive(Copy, Clone, Default)]
4821#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkStencilOpState.html>"]
4822#[must_use]
4823pub struct StencilOpState {
4824    pub fail_op: StencilOp,
4825    pub pass_op: StencilOp,
4826    pub depth_fail_op: StencilOp,
4827    pub compare_op: CompareOp,
4828    pub compare_mask: u32,
4829    pub write_mask: u32,
4830    pub reference: u32,
4831}
4832impl StencilOpState {
4833    #[inline]
4834    pub fn fail_op(mut self, fail_op: StencilOp) -> Self {
4835        self.fail_op = fail_op;
4836        self
4837    }
4838    #[inline]
4839    pub fn pass_op(mut self, pass_op: StencilOp) -> Self {
4840        self.pass_op = pass_op;
4841        self
4842    }
4843    #[inline]
4844    pub fn depth_fail_op(mut self, depth_fail_op: StencilOp) -> Self {
4845        self.depth_fail_op = depth_fail_op;
4846        self
4847    }
4848    #[inline]
4849    pub fn compare_op(mut self, compare_op: CompareOp) -> Self {
4850        self.compare_op = compare_op;
4851        self
4852    }
4853    #[inline]
4854    pub fn compare_mask(mut self, compare_mask: u32) -> Self {
4855        self.compare_mask = compare_mask;
4856        self
4857    }
4858    #[inline]
4859    pub fn write_mask(mut self, write_mask: u32) -> Self {
4860        self.write_mask = write_mask;
4861        self
4862    }
4863    #[inline]
4864    pub fn reference(mut self, reference: u32) -> Self {
4865        self.reference = reference;
4866        self
4867    }
4868}
4869#[repr(C)]
4870#[cfg_attr(feature = "debug", derive(Debug))]
4871#[derive(Copy, Clone)]
4872#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineDepthStencilStateCreateInfo.html>"]
4873#[must_use]
4874pub struct PipelineDepthStencilStateCreateInfo<'a> {
4875    pub s_type: StructureType,
4876    pub p_next: *const c_void,
4877    pub flags: PipelineDepthStencilStateCreateFlags,
4878    pub depth_test_enable: Bool32,
4879    pub depth_write_enable: Bool32,
4880    pub depth_compare_op: CompareOp,
4881    pub depth_bounds_test_enable: Bool32,
4882    pub stencil_test_enable: Bool32,
4883    pub front: StencilOpState,
4884    pub back: StencilOpState,
4885    pub min_depth_bounds: f32,
4886    pub max_depth_bounds: f32,
4887    pub _marker: PhantomData<&'a ()>,
4888}
4889unsafe impl Send for PipelineDepthStencilStateCreateInfo<'_> {}
4890unsafe impl Sync for PipelineDepthStencilStateCreateInfo<'_> {}
4891impl ::core::default::Default for PipelineDepthStencilStateCreateInfo<'_> {
4892    #[inline]
4893    fn default() -> Self {
4894        Self {
4895            s_type: Self::STRUCTURE_TYPE,
4896            p_next: ::core::ptr::null(),
4897            flags: PipelineDepthStencilStateCreateFlags::default(),
4898            depth_test_enable: Bool32::default(),
4899            depth_write_enable: Bool32::default(),
4900            depth_compare_op: CompareOp::default(),
4901            depth_bounds_test_enable: Bool32::default(),
4902            stencil_test_enable: Bool32::default(),
4903            front: StencilOpState::default(),
4904            back: StencilOpState::default(),
4905            min_depth_bounds: f32::default(),
4906            max_depth_bounds: f32::default(),
4907            _marker: PhantomData,
4908        }
4909    }
4910}
4911unsafe impl<'a> TaggedStructure for PipelineDepthStencilStateCreateInfo<'a> {
4912    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
4913}
4914impl<'a> PipelineDepthStencilStateCreateInfo<'a> {
4915    #[inline]
4916    pub fn flags(mut self, flags: PipelineDepthStencilStateCreateFlags) -> Self {
4917        self.flags = flags;
4918        self
4919    }
4920    #[inline]
4921    pub fn depth_test_enable(mut self, depth_test_enable: bool) -> Self {
4922        self.depth_test_enable = depth_test_enable.into();
4923        self
4924    }
4925    #[inline]
4926    pub fn depth_write_enable(mut self, depth_write_enable: bool) -> Self {
4927        self.depth_write_enable = depth_write_enable.into();
4928        self
4929    }
4930    #[inline]
4931    pub fn depth_compare_op(mut self, depth_compare_op: CompareOp) -> Self {
4932        self.depth_compare_op = depth_compare_op;
4933        self
4934    }
4935    #[inline]
4936    pub fn depth_bounds_test_enable(mut self, depth_bounds_test_enable: bool) -> Self {
4937        self.depth_bounds_test_enable = depth_bounds_test_enable.into();
4938        self
4939    }
4940    #[inline]
4941    pub fn stencil_test_enable(mut self, stencil_test_enable: bool) -> Self {
4942        self.stencil_test_enable = stencil_test_enable.into();
4943        self
4944    }
4945    #[inline]
4946    pub fn front(mut self, front: StencilOpState) -> Self {
4947        self.front = front;
4948        self
4949    }
4950    #[inline]
4951    pub fn back(mut self, back: StencilOpState) -> Self {
4952        self.back = back;
4953        self
4954    }
4955    #[inline]
4956    pub fn min_depth_bounds(mut self, min_depth_bounds: f32) -> Self {
4957        self.min_depth_bounds = min_depth_bounds;
4958        self
4959    }
4960    #[inline]
4961    pub fn max_depth_bounds(mut self, max_depth_bounds: f32) -> Self {
4962        self.max_depth_bounds = max_depth_bounds;
4963        self
4964    }
4965}
4966#[repr(C)]
4967#[cfg_attr(feature = "debug", derive(Debug))]
4968#[derive(Copy, Clone)]
4969#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineCreateInfo.html>"]
4970#[must_use]
4971pub struct GraphicsPipelineCreateInfo<'a> {
4972    pub s_type: StructureType,
4973    pub p_next: *const c_void,
4974    pub flags: PipelineCreateFlags,
4975    pub stage_count: u32,
4976    pub p_stages: *const PipelineShaderStageCreateInfo<'a>,
4977    pub p_vertex_input_state: *const PipelineVertexInputStateCreateInfo<'a>,
4978    pub p_input_assembly_state: *const PipelineInputAssemblyStateCreateInfo<'a>,
4979    pub p_tessellation_state: *const PipelineTessellationStateCreateInfo<'a>,
4980    pub p_viewport_state: *const PipelineViewportStateCreateInfo<'a>,
4981    pub p_rasterization_state: *const PipelineRasterizationStateCreateInfo<'a>,
4982    pub p_multisample_state: *const PipelineMultisampleStateCreateInfo<'a>,
4983    pub p_depth_stencil_state: *const PipelineDepthStencilStateCreateInfo<'a>,
4984    pub p_color_blend_state: *const PipelineColorBlendStateCreateInfo<'a>,
4985    pub p_dynamic_state: *const PipelineDynamicStateCreateInfo<'a>,
4986    pub layout: PipelineLayout,
4987    pub render_pass: RenderPass,
4988    pub subpass: u32,
4989    pub base_pipeline_handle: Pipeline,
4990    pub base_pipeline_index: i32,
4991    pub _marker: PhantomData<&'a ()>,
4992}
4993unsafe impl Send for GraphicsPipelineCreateInfo<'_> {}
4994unsafe impl Sync for GraphicsPipelineCreateInfo<'_> {}
4995impl ::core::default::Default for GraphicsPipelineCreateInfo<'_> {
4996    #[inline]
4997    fn default() -> Self {
4998        Self {
4999            s_type: Self::STRUCTURE_TYPE,
5000            p_next: ::core::ptr::null(),
5001            flags: PipelineCreateFlags::default(),
5002            stage_count: u32::default(),
5003            p_stages: ::core::ptr::null(),
5004            p_vertex_input_state: ::core::ptr::null(),
5005            p_input_assembly_state: ::core::ptr::null(),
5006            p_tessellation_state: ::core::ptr::null(),
5007            p_viewport_state: ::core::ptr::null(),
5008            p_rasterization_state: ::core::ptr::null(),
5009            p_multisample_state: ::core::ptr::null(),
5010            p_depth_stencil_state: ::core::ptr::null(),
5011            p_color_blend_state: ::core::ptr::null(),
5012            p_dynamic_state: ::core::ptr::null(),
5013            layout: PipelineLayout::default(),
5014            render_pass: RenderPass::default(),
5015            subpass: u32::default(),
5016            base_pipeline_handle: Pipeline::default(),
5017            base_pipeline_index: i32::default(),
5018            _marker: PhantomData,
5019        }
5020    }
5021}
5022unsafe impl<'a> TaggedStructure for GraphicsPipelineCreateInfo<'a> {
5023    const STRUCTURE_TYPE: StructureType = StructureType::GRAPHICS_PIPELINE_CREATE_INFO;
5024}
5025pub unsafe trait ExtendsGraphicsPipelineCreateInfo {}
5026impl<'a> GraphicsPipelineCreateInfo<'a> {
5027    #[inline]
5028    pub fn flags(mut self, flags: PipelineCreateFlags) -> Self {
5029        self.flags = flags;
5030        self
5031    }
5032    #[inline]
5033    pub fn stages(mut self, stages: &'a [PipelineShaderStageCreateInfo<'a>]) -> Self {
5034        self.stage_count = stages.len() as _;
5035        self.p_stages = stages.as_ptr();
5036        self
5037    }
5038    #[inline]
5039    pub fn vertex_input_state(
5040        mut self,
5041        vertex_input_state: &'a PipelineVertexInputStateCreateInfo<'a>,
5042    ) -> Self {
5043        self.p_vertex_input_state = vertex_input_state;
5044        self
5045    }
5046    #[inline]
5047    pub fn input_assembly_state(
5048        mut self,
5049        input_assembly_state: &'a PipelineInputAssemblyStateCreateInfo<'a>,
5050    ) -> Self {
5051        self.p_input_assembly_state = input_assembly_state;
5052        self
5053    }
5054    #[inline]
5055    pub fn tessellation_state(
5056        mut self,
5057        tessellation_state: &'a PipelineTessellationStateCreateInfo<'a>,
5058    ) -> Self {
5059        self.p_tessellation_state = tessellation_state;
5060        self
5061    }
5062    #[inline]
5063    pub fn viewport_state(
5064        mut self,
5065        viewport_state: &'a PipelineViewportStateCreateInfo<'a>,
5066    ) -> Self {
5067        self.p_viewport_state = viewport_state;
5068        self
5069    }
5070    #[inline]
5071    pub fn rasterization_state(
5072        mut self,
5073        rasterization_state: &'a PipelineRasterizationStateCreateInfo<'a>,
5074    ) -> Self {
5075        self.p_rasterization_state = rasterization_state;
5076        self
5077    }
5078    #[inline]
5079    pub fn multisample_state(
5080        mut self,
5081        multisample_state: &'a PipelineMultisampleStateCreateInfo<'a>,
5082    ) -> Self {
5083        self.p_multisample_state = multisample_state;
5084        self
5085    }
5086    #[inline]
5087    pub fn depth_stencil_state(
5088        mut self,
5089        depth_stencil_state: &'a PipelineDepthStencilStateCreateInfo<'a>,
5090    ) -> Self {
5091        self.p_depth_stencil_state = depth_stencil_state;
5092        self
5093    }
5094    #[inline]
5095    pub fn color_blend_state(
5096        mut self,
5097        color_blend_state: &'a PipelineColorBlendStateCreateInfo<'a>,
5098    ) -> Self {
5099        self.p_color_blend_state = color_blend_state;
5100        self
5101    }
5102    #[inline]
5103    pub fn dynamic_state(mut self, dynamic_state: &'a PipelineDynamicStateCreateInfo<'a>) -> Self {
5104        self.p_dynamic_state = dynamic_state;
5105        self
5106    }
5107    #[inline]
5108    pub fn layout(mut self, layout: PipelineLayout) -> Self {
5109        self.layout = layout;
5110        self
5111    }
5112    #[inline]
5113    pub fn render_pass(mut self, render_pass: RenderPass) -> Self {
5114        self.render_pass = render_pass;
5115        self
5116    }
5117    #[inline]
5118    pub fn subpass(mut self, subpass: u32) -> Self {
5119        self.subpass = subpass;
5120        self
5121    }
5122    #[inline]
5123    pub fn base_pipeline_handle(mut self, base_pipeline_handle: Pipeline) -> Self {
5124        self.base_pipeline_handle = base_pipeline_handle;
5125        self
5126    }
5127    #[inline]
5128    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
5129        self.base_pipeline_index = base_pipeline_index;
5130        self
5131    }
5132    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
5133    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
5134    #[doc = r" valid extension structs can be pushed into the chain."]
5135    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
5136    #[doc = r" chain will look like `A -> D -> B -> C`."]
5137    pub fn push_next<T: ExtendsGraphicsPipelineCreateInfo + ?Sized>(
5138        mut self,
5139        next: &'a mut T,
5140    ) -> Self {
5141        unsafe {
5142            let next_ptr = <*const T>::cast(next);
5143            let last_next = ptr_chain_iter(next).last().unwrap();
5144            (*last_next).p_next = self.p_next as _;
5145            self.p_next = next_ptr;
5146        }
5147        self
5148    }
5149}
5150#[repr(C)]
5151#[cfg_attr(feature = "debug", derive(Debug))]
5152#[derive(Copy, Clone)]
5153#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCacheCreateInfo.html>"]
5154#[must_use]
5155pub struct PipelineCacheCreateInfo<'a> {
5156    pub s_type: StructureType,
5157    pub p_next: *const c_void,
5158    pub flags: PipelineCacheCreateFlags,
5159    pub initial_data_size: usize,
5160    pub p_initial_data: *const c_void,
5161    pub _marker: PhantomData<&'a ()>,
5162}
5163unsafe impl Send for PipelineCacheCreateInfo<'_> {}
5164unsafe impl Sync for PipelineCacheCreateInfo<'_> {}
5165impl ::core::default::Default for PipelineCacheCreateInfo<'_> {
5166    #[inline]
5167    fn default() -> Self {
5168        Self {
5169            s_type: Self::STRUCTURE_TYPE,
5170            p_next: ::core::ptr::null(),
5171            flags: PipelineCacheCreateFlags::default(),
5172            initial_data_size: usize::default(),
5173            p_initial_data: ::core::ptr::null(),
5174            _marker: PhantomData,
5175        }
5176    }
5177}
5178unsafe impl<'a> TaggedStructure for PipelineCacheCreateInfo<'a> {
5179    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_CACHE_CREATE_INFO;
5180}
5181impl<'a> PipelineCacheCreateInfo<'a> {
5182    #[inline]
5183    pub fn flags(mut self, flags: PipelineCacheCreateFlags) -> Self {
5184        self.flags = flags;
5185        self
5186    }
5187    #[inline]
5188    pub fn initial_data(mut self, initial_data: &'a [u8]) -> Self {
5189        self.initial_data_size = initial_data.len();
5190        self.p_initial_data = initial_data.as_ptr().cast();
5191        self
5192    }
5193}
5194#[repr(C)]
5195#[cfg_attr(feature = "debug", derive(Debug))]
5196#[derive(Copy, Clone)]
5197#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCacheHeaderVersionOne.html>"]
5198#[must_use]
5199pub struct PipelineCacheHeaderVersionOne {
5200    pub header_size: u32,
5201    pub header_version: PipelineCacheHeaderVersion,
5202    pub vendor_id: u32,
5203    pub device_id: u32,
5204    pub pipeline_cache_uuid: [u8; UUID_SIZE],
5205}
5206impl ::core::default::Default for PipelineCacheHeaderVersionOne {
5207    #[inline]
5208    fn default() -> Self {
5209        Self {
5210            header_size: u32::default(),
5211            header_version: PipelineCacheHeaderVersion::default(),
5212            vendor_id: u32::default(),
5213            device_id: u32::default(),
5214            pipeline_cache_uuid: unsafe { ::core::mem::zeroed() },
5215        }
5216    }
5217}
5218impl PipelineCacheHeaderVersionOne {
5219    #[inline]
5220    pub fn header_size(mut self, header_size: u32) -> Self {
5221        self.header_size = header_size;
5222        self
5223    }
5224    #[inline]
5225    pub fn header_version(mut self, header_version: PipelineCacheHeaderVersion) -> Self {
5226        self.header_version = header_version;
5227        self
5228    }
5229    #[inline]
5230    pub fn vendor_id(mut self, vendor_id: u32) -> Self {
5231        self.vendor_id = vendor_id;
5232        self
5233    }
5234    #[inline]
5235    pub fn device_id(mut self, device_id: u32) -> Self {
5236        self.device_id = device_id;
5237        self
5238    }
5239    #[inline]
5240    pub fn pipeline_cache_uuid(mut self, pipeline_cache_uuid: [u8; UUID_SIZE]) -> Self {
5241        self.pipeline_cache_uuid = pipeline_cache_uuid;
5242        self
5243    }
5244}
5245#[repr(C)]
5246#[cfg_attr(feature = "debug", derive(Debug))]
5247#[derive(Copy, Clone, Default)]
5248#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPushConstantRange.html>"]
5249#[must_use]
5250pub struct PushConstantRange {
5251    pub stage_flags: ShaderStageFlags,
5252    pub offset: u32,
5253    pub size: u32,
5254}
5255impl PushConstantRange {
5256    #[inline]
5257    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
5258        self.stage_flags = stage_flags;
5259        self
5260    }
5261    #[inline]
5262    pub fn offset(mut self, offset: u32) -> Self {
5263        self.offset = offset;
5264        self
5265    }
5266    #[inline]
5267    pub fn size(mut self, size: u32) -> Self {
5268        self.size = size;
5269        self
5270    }
5271}
5272#[repr(C)]
5273#[cfg_attr(feature = "debug", derive(Debug))]
5274#[derive(Copy, Clone)]
5275#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineLayoutCreateInfo.html>"]
5276#[must_use]
5277pub struct PipelineLayoutCreateInfo<'a> {
5278    pub s_type: StructureType,
5279    pub p_next: *const c_void,
5280    pub flags: PipelineLayoutCreateFlags,
5281    pub set_layout_count: u32,
5282    pub p_set_layouts: *const DescriptorSetLayout,
5283    pub push_constant_range_count: u32,
5284    pub p_push_constant_ranges: *const PushConstantRange,
5285    pub _marker: PhantomData<&'a ()>,
5286}
5287unsafe impl Send for PipelineLayoutCreateInfo<'_> {}
5288unsafe impl Sync for PipelineLayoutCreateInfo<'_> {}
5289impl ::core::default::Default for PipelineLayoutCreateInfo<'_> {
5290    #[inline]
5291    fn default() -> Self {
5292        Self {
5293            s_type: Self::STRUCTURE_TYPE,
5294            p_next: ::core::ptr::null(),
5295            flags: PipelineLayoutCreateFlags::default(),
5296            set_layout_count: u32::default(),
5297            p_set_layouts: ::core::ptr::null(),
5298            push_constant_range_count: u32::default(),
5299            p_push_constant_ranges: ::core::ptr::null(),
5300            _marker: PhantomData,
5301        }
5302    }
5303}
5304unsafe impl<'a> TaggedStructure for PipelineLayoutCreateInfo<'a> {
5305    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_LAYOUT_CREATE_INFO;
5306}
5307unsafe impl ExtendsBindDescriptorSetsInfoKHR for PipelineLayoutCreateInfo<'_> {}
5308unsafe impl ExtendsPushConstantsInfoKHR for PipelineLayoutCreateInfo<'_> {}
5309unsafe impl ExtendsPushDescriptorSetInfoKHR for PipelineLayoutCreateInfo<'_> {}
5310unsafe impl ExtendsPushDescriptorSetWithTemplateInfoKHR for PipelineLayoutCreateInfo<'_> {}
5311unsafe impl ExtendsSetDescriptorBufferOffsetsInfoEXT for PipelineLayoutCreateInfo<'_> {}
5312unsafe impl ExtendsBindDescriptorBufferEmbeddedSamplersInfoEXT for PipelineLayoutCreateInfo<'_> {}
5313impl<'a> PipelineLayoutCreateInfo<'a> {
5314    #[inline]
5315    pub fn flags(mut self, flags: PipelineLayoutCreateFlags) -> Self {
5316        self.flags = flags;
5317        self
5318    }
5319    #[inline]
5320    pub fn set_layouts(mut self, set_layouts: &'a [DescriptorSetLayout]) -> Self {
5321        self.set_layout_count = set_layouts.len() as _;
5322        self.p_set_layouts = set_layouts.as_ptr();
5323        self
5324    }
5325    #[inline]
5326    pub fn push_constant_ranges(mut self, push_constant_ranges: &'a [PushConstantRange]) -> Self {
5327        self.push_constant_range_count = push_constant_ranges.len() as _;
5328        self.p_push_constant_ranges = push_constant_ranges.as_ptr();
5329        self
5330    }
5331}
5332#[repr(C)]
5333#[cfg_attr(feature = "debug", derive(Debug))]
5334#[derive(Copy, Clone)]
5335#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerCreateInfo.html>"]
5336#[must_use]
5337pub struct SamplerCreateInfo<'a> {
5338    pub s_type: StructureType,
5339    pub p_next: *const c_void,
5340    pub flags: SamplerCreateFlags,
5341    pub mag_filter: Filter,
5342    pub min_filter: Filter,
5343    pub mipmap_mode: SamplerMipmapMode,
5344    pub address_mode_u: SamplerAddressMode,
5345    pub address_mode_v: SamplerAddressMode,
5346    pub address_mode_w: SamplerAddressMode,
5347    pub mip_lod_bias: f32,
5348    pub anisotropy_enable: Bool32,
5349    pub max_anisotropy: f32,
5350    pub compare_enable: Bool32,
5351    pub compare_op: CompareOp,
5352    pub min_lod: f32,
5353    pub max_lod: f32,
5354    pub border_color: BorderColor,
5355    pub unnormalized_coordinates: Bool32,
5356    pub _marker: PhantomData<&'a ()>,
5357}
5358unsafe impl Send for SamplerCreateInfo<'_> {}
5359unsafe impl Sync for SamplerCreateInfo<'_> {}
5360impl ::core::default::Default for SamplerCreateInfo<'_> {
5361    #[inline]
5362    fn default() -> Self {
5363        Self {
5364            s_type: Self::STRUCTURE_TYPE,
5365            p_next: ::core::ptr::null(),
5366            flags: SamplerCreateFlags::default(),
5367            mag_filter: Filter::default(),
5368            min_filter: Filter::default(),
5369            mipmap_mode: SamplerMipmapMode::default(),
5370            address_mode_u: SamplerAddressMode::default(),
5371            address_mode_v: SamplerAddressMode::default(),
5372            address_mode_w: SamplerAddressMode::default(),
5373            mip_lod_bias: f32::default(),
5374            anisotropy_enable: Bool32::default(),
5375            max_anisotropy: f32::default(),
5376            compare_enable: Bool32::default(),
5377            compare_op: CompareOp::default(),
5378            min_lod: f32::default(),
5379            max_lod: f32::default(),
5380            border_color: BorderColor::default(),
5381            unnormalized_coordinates: Bool32::default(),
5382            _marker: PhantomData,
5383        }
5384    }
5385}
5386unsafe impl<'a> TaggedStructure for SamplerCreateInfo<'a> {
5387    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_CREATE_INFO;
5388}
5389pub unsafe trait ExtendsSamplerCreateInfo {}
5390impl<'a> SamplerCreateInfo<'a> {
5391    #[inline]
5392    pub fn flags(mut self, flags: SamplerCreateFlags) -> Self {
5393        self.flags = flags;
5394        self
5395    }
5396    #[inline]
5397    pub fn mag_filter(mut self, mag_filter: Filter) -> Self {
5398        self.mag_filter = mag_filter;
5399        self
5400    }
5401    #[inline]
5402    pub fn min_filter(mut self, min_filter: Filter) -> Self {
5403        self.min_filter = min_filter;
5404        self
5405    }
5406    #[inline]
5407    pub fn mipmap_mode(mut self, mipmap_mode: SamplerMipmapMode) -> Self {
5408        self.mipmap_mode = mipmap_mode;
5409        self
5410    }
5411    #[inline]
5412    pub fn address_mode_u(mut self, address_mode_u: SamplerAddressMode) -> Self {
5413        self.address_mode_u = address_mode_u;
5414        self
5415    }
5416    #[inline]
5417    pub fn address_mode_v(mut self, address_mode_v: SamplerAddressMode) -> Self {
5418        self.address_mode_v = address_mode_v;
5419        self
5420    }
5421    #[inline]
5422    pub fn address_mode_w(mut self, address_mode_w: SamplerAddressMode) -> Self {
5423        self.address_mode_w = address_mode_w;
5424        self
5425    }
5426    #[inline]
5427    pub fn mip_lod_bias(mut self, mip_lod_bias: f32) -> Self {
5428        self.mip_lod_bias = mip_lod_bias;
5429        self
5430    }
5431    #[inline]
5432    pub fn anisotropy_enable(mut self, anisotropy_enable: bool) -> Self {
5433        self.anisotropy_enable = anisotropy_enable.into();
5434        self
5435    }
5436    #[inline]
5437    pub fn max_anisotropy(mut self, max_anisotropy: f32) -> Self {
5438        self.max_anisotropy = max_anisotropy;
5439        self
5440    }
5441    #[inline]
5442    pub fn compare_enable(mut self, compare_enable: bool) -> Self {
5443        self.compare_enable = compare_enable.into();
5444        self
5445    }
5446    #[inline]
5447    pub fn compare_op(mut self, compare_op: CompareOp) -> Self {
5448        self.compare_op = compare_op;
5449        self
5450    }
5451    #[inline]
5452    pub fn min_lod(mut self, min_lod: f32) -> Self {
5453        self.min_lod = min_lod;
5454        self
5455    }
5456    #[inline]
5457    pub fn max_lod(mut self, max_lod: f32) -> Self {
5458        self.max_lod = max_lod;
5459        self
5460    }
5461    #[inline]
5462    pub fn border_color(mut self, border_color: BorderColor) -> Self {
5463        self.border_color = border_color;
5464        self
5465    }
5466    #[inline]
5467    pub fn unnormalized_coordinates(mut self, unnormalized_coordinates: bool) -> Self {
5468        self.unnormalized_coordinates = unnormalized_coordinates.into();
5469        self
5470    }
5471    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
5472    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
5473    #[doc = r" valid extension structs can be pushed into the chain."]
5474    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
5475    #[doc = r" chain will look like `A -> D -> B -> C`."]
5476    pub fn push_next<T: ExtendsSamplerCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
5477        unsafe {
5478            let next_ptr = <*const T>::cast(next);
5479            let last_next = ptr_chain_iter(next).last().unwrap();
5480            (*last_next).p_next = self.p_next as _;
5481            self.p_next = next_ptr;
5482        }
5483        self
5484    }
5485}
5486#[repr(C)]
5487#[cfg_attr(feature = "debug", derive(Debug))]
5488#[derive(Copy, Clone)]
5489#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandPoolCreateInfo.html>"]
5490#[must_use]
5491pub struct CommandPoolCreateInfo<'a> {
5492    pub s_type: StructureType,
5493    pub p_next: *const c_void,
5494    pub flags: CommandPoolCreateFlags,
5495    pub queue_family_index: u32,
5496    pub _marker: PhantomData<&'a ()>,
5497}
5498unsafe impl Send for CommandPoolCreateInfo<'_> {}
5499unsafe impl Sync for CommandPoolCreateInfo<'_> {}
5500impl ::core::default::Default for CommandPoolCreateInfo<'_> {
5501    #[inline]
5502    fn default() -> Self {
5503        Self {
5504            s_type: Self::STRUCTURE_TYPE,
5505            p_next: ::core::ptr::null(),
5506            flags: CommandPoolCreateFlags::default(),
5507            queue_family_index: u32::default(),
5508            _marker: PhantomData,
5509        }
5510    }
5511}
5512unsafe impl<'a> TaggedStructure for CommandPoolCreateInfo<'a> {
5513    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_POOL_CREATE_INFO;
5514}
5515impl<'a> CommandPoolCreateInfo<'a> {
5516    #[inline]
5517    pub fn flags(mut self, flags: CommandPoolCreateFlags) -> Self {
5518        self.flags = flags;
5519        self
5520    }
5521    #[inline]
5522    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
5523        self.queue_family_index = queue_family_index;
5524        self
5525    }
5526}
5527#[repr(C)]
5528#[cfg_attr(feature = "debug", derive(Debug))]
5529#[derive(Copy, Clone)]
5530#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferAllocateInfo.html>"]
5531#[must_use]
5532pub struct CommandBufferAllocateInfo<'a> {
5533    pub s_type: StructureType,
5534    pub p_next: *const c_void,
5535    pub command_pool: CommandPool,
5536    pub level: CommandBufferLevel,
5537    pub command_buffer_count: u32,
5538    pub _marker: PhantomData<&'a ()>,
5539}
5540unsafe impl Send for CommandBufferAllocateInfo<'_> {}
5541unsafe impl Sync for CommandBufferAllocateInfo<'_> {}
5542impl ::core::default::Default for CommandBufferAllocateInfo<'_> {
5543    #[inline]
5544    fn default() -> Self {
5545        Self {
5546            s_type: Self::STRUCTURE_TYPE,
5547            p_next: ::core::ptr::null(),
5548            command_pool: CommandPool::default(),
5549            level: CommandBufferLevel::default(),
5550            command_buffer_count: u32::default(),
5551            _marker: PhantomData,
5552        }
5553    }
5554}
5555unsafe impl<'a> TaggedStructure for CommandBufferAllocateInfo<'a> {
5556    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_BUFFER_ALLOCATE_INFO;
5557}
5558impl<'a> CommandBufferAllocateInfo<'a> {
5559    #[inline]
5560    pub fn command_pool(mut self, command_pool: CommandPool) -> Self {
5561        self.command_pool = command_pool;
5562        self
5563    }
5564    #[inline]
5565    pub fn level(mut self, level: CommandBufferLevel) -> Self {
5566        self.level = level;
5567        self
5568    }
5569    #[inline]
5570    pub fn command_buffer_count(mut self, command_buffer_count: u32) -> Self {
5571        self.command_buffer_count = command_buffer_count;
5572        self
5573    }
5574}
5575#[repr(C)]
5576#[cfg_attr(feature = "debug", derive(Debug))]
5577#[derive(Copy, Clone)]
5578#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferInheritanceInfo.html>"]
5579#[must_use]
5580pub struct CommandBufferInheritanceInfo<'a> {
5581    pub s_type: StructureType,
5582    pub p_next: *const c_void,
5583    pub render_pass: RenderPass,
5584    pub subpass: u32,
5585    pub framebuffer: Framebuffer,
5586    pub occlusion_query_enable: Bool32,
5587    pub query_flags: QueryControlFlags,
5588    pub pipeline_statistics: QueryPipelineStatisticFlags,
5589    pub _marker: PhantomData<&'a ()>,
5590}
5591unsafe impl Send for CommandBufferInheritanceInfo<'_> {}
5592unsafe impl Sync for CommandBufferInheritanceInfo<'_> {}
5593impl ::core::default::Default for CommandBufferInheritanceInfo<'_> {
5594    #[inline]
5595    fn default() -> Self {
5596        Self {
5597            s_type: Self::STRUCTURE_TYPE,
5598            p_next: ::core::ptr::null(),
5599            render_pass: RenderPass::default(),
5600            subpass: u32::default(),
5601            framebuffer: Framebuffer::default(),
5602            occlusion_query_enable: Bool32::default(),
5603            query_flags: QueryControlFlags::default(),
5604            pipeline_statistics: QueryPipelineStatisticFlags::default(),
5605            _marker: PhantomData,
5606        }
5607    }
5608}
5609unsafe impl<'a> TaggedStructure for CommandBufferInheritanceInfo<'a> {
5610    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_BUFFER_INHERITANCE_INFO;
5611}
5612pub unsafe trait ExtendsCommandBufferInheritanceInfo {}
5613impl<'a> CommandBufferInheritanceInfo<'a> {
5614    #[inline]
5615    pub fn render_pass(mut self, render_pass: RenderPass) -> Self {
5616        self.render_pass = render_pass;
5617        self
5618    }
5619    #[inline]
5620    pub fn subpass(mut self, subpass: u32) -> Self {
5621        self.subpass = subpass;
5622        self
5623    }
5624    #[inline]
5625    pub fn framebuffer(mut self, framebuffer: Framebuffer) -> Self {
5626        self.framebuffer = framebuffer;
5627        self
5628    }
5629    #[inline]
5630    pub fn occlusion_query_enable(mut self, occlusion_query_enable: bool) -> Self {
5631        self.occlusion_query_enable = occlusion_query_enable.into();
5632        self
5633    }
5634    #[inline]
5635    pub fn query_flags(mut self, query_flags: QueryControlFlags) -> Self {
5636        self.query_flags = query_flags;
5637        self
5638    }
5639    #[inline]
5640    pub fn pipeline_statistics(mut self, pipeline_statistics: QueryPipelineStatisticFlags) -> Self {
5641        self.pipeline_statistics = pipeline_statistics;
5642        self
5643    }
5644    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
5645    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
5646    #[doc = r" valid extension structs can be pushed into the chain."]
5647    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
5648    #[doc = r" chain will look like `A -> D -> B -> C`."]
5649    pub fn push_next<T: ExtendsCommandBufferInheritanceInfo + ?Sized>(
5650        mut self,
5651        next: &'a mut T,
5652    ) -> Self {
5653        unsafe {
5654            let next_ptr = <*const T>::cast(next);
5655            let last_next = ptr_chain_iter(next).last().unwrap();
5656            (*last_next).p_next = self.p_next as _;
5657            self.p_next = next_ptr;
5658        }
5659        self
5660    }
5661}
5662#[repr(C)]
5663#[cfg_attr(feature = "debug", derive(Debug))]
5664#[derive(Copy, Clone)]
5665#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferBeginInfo.html>"]
5666#[must_use]
5667pub struct CommandBufferBeginInfo<'a> {
5668    pub s_type: StructureType,
5669    pub p_next: *const c_void,
5670    pub flags: CommandBufferUsageFlags,
5671    pub p_inheritance_info: *const CommandBufferInheritanceInfo<'a>,
5672    pub _marker: PhantomData<&'a ()>,
5673}
5674unsafe impl Send for CommandBufferBeginInfo<'_> {}
5675unsafe impl Sync for CommandBufferBeginInfo<'_> {}
5676impl ::core::default::Default for CommandBufferBeginInfo<'_> {
5677    #[inline]
5678    fn default() -> Self {
5679        Self {
5680            s_type: Self::STRUCTURE_TYPE,
5681            p_next: ::core::ptr::null(),
5682            flags: CommandBufferUsageFlags::default(),
5683            p_inheritance_info: ::core::ptr::null(),
5684            _marker: PhantomData,
5685        }
5686    }
5687}
5688unsafe impl<'a> TaggedStructure for CommandBufferBeginInfo<'a> {
5689    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_BUFFER_BEGIN_INFO;
5690}
5691pub unsafe trait ExtendsCommandBufferBeginInfo {}
5692impl<'a> CommandBufferBeginInfo<'a> {
5693    #[inline]
5694    pub fn flags(mut self, flags: CommandBufferUsageFlags) -> Self {
5695        self.flags = flags;
5696        self
5697    }
5698    #[inline]
5699    pub fn inheritance_info(
5700        mut self,
5701        inheritance_info: &'a CommandBufferInheritanceInfo<'a>,
5702    ) -> Self {
5703        self.p_inheritance_info = inheritance_info;
5704        self
5705    }
5706    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
5707    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
5708    #[doc = r" valid extension structs can be pushed into the chain."]
5709    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
5710    #[doc = r" chain will look like `A -> D -> B -> C`."]
5711    pub fn push_next<T: ExtendsCommandBufferBeginInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
5712        unsafe {
5713            let next_ptr = <*const T>::cast(next);
5714            let last_next = ptr_chain_iter(next).last().unwrap();
5715            (*last_next).p_next = self.p_next as _;
5716            self.p_next = next_ptr;
5717        }
5718        self
5719    }
5720}
5721#[repr(C)]
5722#[derive(Copy, Clone)]
5723#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassBeginInfo.html>"]
5724#[must_use]
5725pub struct RenderPassBeginInfo<'a> {
5726    pub s_type: StructureType,
5727    pub p_next: *const c_void,
5728    pub render_pass: RenderPass,
5729    pub framebuffer: Framebuffer,
5730    pub render_area: Rect2D,
5731    pub clear_value_count: u32,
5732    pub p_clear_values: *const ClearValue,
5733    pub _marker: PhantomData<&'a ()>,
5734}
5735unsafe impl Send for RenderPassBeginInfo<'_> {}
5736unsafe impl Sync for RenderPassBeginInfo<'_> {}
5737#[cfg(feature = "debug")]
5738impl fmt::Debug for RenderPassBeginInfo<'_> {
5739    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
5740        fmt.debug_struct("RenderPassBeginInfo")
5741            .field("s_type", &self.s_type)
5742            .field("p_next", &self.p_next)
5743            .field("render_pass", &self.render_pass)
5744            .field("framebuffer", &self.framebuffer)
5745            .field("render_area", &self.render_area)
5746            .field("clear_value_count", &self.clear_value_count)
5747            .field("p_clear_values", &"union")
5748            .finish()
5749    }
5750}
5751impl ::core::default::Default for RenderPassBeginInfo<'_> {
5752    #[inline]
5753    fn default() -> Self {
5754        Self {
5755            s_type: Self::STRUCTURE_TYPE,
5756            p_next: ::core::ptr::null(),
5757            render_pass: RenderPass::default(),
5758            framebuffer: Framebuffer::default(),
5759            render_area: Rect2D::default(),
5760            clear_value_count: u32::default(),
5761            p_clear_values: ::core::ptr::null(),
5762            _marker: PhantomData,
5763        }
5764    }
5765}
5766unsafe impl<'a> TaggedStructure for RenderPassBeginInfo<'a> {
5767    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_BEGIN_INFO;
5768}
5769pub unsafe trait ExtendsRenderPassBeginInfo {}
5770impl<'a> RenderPassBeginInfo<'a> {
5771    #[inline]
5772    pub fn render_pass(mut self, render_pass: RenderPass) -> Self {
5773        self.render_pass = render_pass;
5774        self
5775    }
5776    #[inline]
5777    pub fn framebuffer(mut self, framebuffer: Framebuffer) -> Self {
5778        self.framebuffer = framebuffer;
5779        self
5780    }
5781    #[inline]
5782    pub fn render_area(mut self, render_area: Rect2D) -> Self {
5783        self.render_area = render_area;
5784        self
5785    }
5786    #[inline]
5787    pub fn clear_values(mut self, clear_values: &'a [ClearValue]) -> Self {
5788        self.clear_value_count = clear_values.len() as _;
5789        self.p_clear_values = clear_values.as_ptr();
5790        self
5791    }
5792    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
5793    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
5794    #[doc = r" valid extension structs can be pushed into the chain."]
5795    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
5796    #[doc = r" chain will look like `A -> D -> B -> C`."]
5797    pub fn push_next<T: ExtendsRenderPassBeginInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
5798        unsafe {
5799            let next_ptr = <*const T>::cast(next);
5800            let last_next = ptr_chain_iter(next).last().unwrap();
5801            (*last_next).p_next = self.p_next as _;
5802            self.p_next = next_ptr;
5803        }
5804        self
5805    }
5806}
5807#[repr(C)]
5808#[derive(Copy, Clone)]
5809#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkClearColorValue.html>"]
5810pub union ClearColorValue {
5811    pub float32: [f32; 4],
5812    pub int32: [i32; 4],
5813    pub uint32: [u32; 4],
5814}
5815impl ::core::default::Default for ClearColorValue {
5816    #[inline]
5817    fn default() -> Self {
5818        unsafe { ::core::mem::zeroed() }
5819    }
5820}
5821#[repr(C)]
5822#[cfg_attr(feature = "debug", derive(Debug))]
5823#[derive(Copy, Clone, Default)]
5824#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkClearDepthStencilValue.html>"]
5825#[must_use]
5826pub struct ClearDepthStencilValue {
5827    pub depth: f32,
5828    pub stencil: u32,
5829}
5830impl ClearDepthStencilValue {
5831    #[inline]
5832    pub fn depth(mut self, depth: f32) -> Self {
5833        self.depth = depth;
5834        self
5835    }
5836    #[inline]
5837    pub fn stencil(mut self, stencil: u32) -> Self {
5838        self.stencil = stencil;
5839        self
5840    }
5841}
5842#[repr(C)]
5843#[derive(Copy, Clone)]
5844#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkClearValue.html>"]
5845pub union ClearValue {
5846    pub color: ClearColorValue,
5847    pub depth_stencil: ClearDepthStencilValue,
5848}
5849impl ::core::default::Default for ClearValue {
5850    #[inline]
5851    fn default() -> Self {
5852        unsafe { ::core::mem::zeroed() }
5853    }
5854}
5855#[repr(C)]
5856#[derive(Copy, Clone, Default)]
5857#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkClearAttachment.html>"]
5858#[must_use]
5859pub struct ClearAttachment {
5860    pub aspect_mask: ImageAspectFlags,
5861    pub color_attachment: u32,
5862    pub clear_value: ClearValue,
5863}
5864#[cfg(feature = "debug")]
5865impl fmt::Debug for ClearAttachment {
5866    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
5867        fmt.debug_struct("ClearAttachment")
5868            .field("aspect_mask", &self.aspect_mask)
5869            .field("color_attachment", &self.color_attachment)
5870            .field("clear_value", &"union")
5871            .finish()
5872    }
5873}
5874impl ClearAttachment {
5875    #[inline]
5876    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
5877        self.aspect_mask = aspect_mask;
5878        self
5879    }
5880    #[inline]
5881    pub fn color_attachment(mut self, color_attachment: u32) -> Self {
5882        self.color_attachment = color_attachment;
5883        self
5884    }
5885    #[inline]
5886    pub fn clear_value(mut self, clear_value: ClearValue) -> Self {
5887        self.clear_value = clear_value;
5888        self
5889    }
5890}
5891#[repr(C)]
5892#[cfg_attr(feature = "debug", derive(Debug))]
5893#[derive(Copy, Clone, Default)]
5894#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentDescription.html>"]
5895#[must_use]
5896pub struct AttachmentDescription {
5897    pub flags: AttachmentDescriptionFlags,
5898    pub format: Format,
5899    pub samples: SampleCountFlags,
5900    pub load_op: AttachmentLoadOp,
5901    pub store_op: AttachmentStoreOp,
5902    pub stencil_load_op: AttachmentLoadOp,
5903    pub stencil_store_op: AttachmentStoreOp,
5904    pub initial_layout: ImageLayout,
5905    pub final_layout: ImageLayout,
5906}
5907impl AttachmentDescription {
5908    #[inline]
5909    pub fn flags(mut self, flags: AttachmentDescriptionFlags) -> Self {
5910        self.flags = flags;
5911        self
5912    }
5913    #[inline]
5914    pub fn format(mut self, format: Format) -> Self {
5915        self.format = format;
5916        self
5917    }
5918    #[inline]
5919    pub fn samples(mut self, samples: SampleCountFlags) -> Self {
5920        self.samples = samples;
5921        self
5922    }
5923    #[inline]
5924    pub fn load_op(mut self, load_op: AttachmentLoadOp) -> Self {
5925        self.load_op = load_op;
5926        self
5927    }
5928    #[inline]
5929    pub fn store_op(mut self, store_op: AttachmentStoreOp) -> Self {
5930        self.store_op = store_op;
5931        self
5932    }
5933    #[inline]
5934    pub fn stencil_load_op(mut self, stencil_load_op: AttachmentLoadOp) -> Self {
5935        self.stencil_load_op = stencil_load_op;
5936        self
5937    }
5938    #[inline]
5939    pub fn stencil_store_op(mut self, stencil_store_op: AttachmentStoreOp) -> Self {
5940        self.stencil_store_op = stencil_store_op;
5941        self
5942    }
5943    #[inline]
5944    pub fn initial_layout(mut self, initial_layout: ImageLayout) -> Self {
5945        self.initial_layout = initial_layout;
5946        self
5947    }
5948    #[inline]
5949    pub fn final_layout(mut self, final_layout: ImageLayout) -> Self {
5950        self.final_layout = final_layout;
5951        self
5952    }
5953}
5954#[repr(C)]
5955#[cfg_attr(feature = "debug", derive(Debug))]
5956#[derive(Copy, Clone, Default)]
5957#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentReference.html>"]
5958#[must_use]
5959pub struct AttachmentReference {
5960    pub attachment: u32,
5961    pub layout: ImageLayout,
5962}
5963impl AttachmentReference {
5964    #[inline]
5965    pub fn attachment(mut self, attachment: u32) -> Self {
5966        self.attachment = attachment;
5967        self
5968    }
5969    #[inline]
5970    pub fn layout(mut self, layout: ImageLayout) -> Self {
5971        self.layout = layout;
5972        self
5973    }
5974}
5975#[repr(C)]
5976#[cfg_attr(feature = "debug", derive(Debug))]
5977#[derive(Copy, Clone)]
5978#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassDescription.html>"]
5979#[must_use]
5980pub struct SubpassDescription<'a> {
5981    pub flags: SubpassDescriptionFlags,
5982    pub pipeline_bind_point: PipelineBindPoint,
5983    pub input_attachment_count: u32,
5984    pub p_input_attachments: *const AttachmentReference,
5985    pub color_attachment_count: u32,
5986    pub p_color_attachments: *const AttachmentReference,
5987    pub p_resolve_attachments: *const AttachmentReference,
5988    pub p_depth_stencil_attachment: *const AttachmentReference,
5989    pub preserve_attachment_count: u32,
5990    pub p_preserve_attachments: *const u32,
5991    pub _marker: PhantomData<&'a ()>,
5992}
5993unsafe impl Send for SubpassDescription<'_> {}
5994unsafe impl Sync for SubpassDescription<'_> {}
5995impl ::core::default::Default for SubpassDescription<'_> {
5996    #[inline]
5997    fn default() -> Self {
5998        Self {
5999            flags: SubpassDescriptionFlags::default(),
6000            pipeline_bind_point: PipelineBindPoint::default(),
6001            input_attachment_count: u32::default(),
6002            p_input_attachments: ::core::ptr::null(),
6003            color_attachment_count: u32::default(),
6004            p_color_attachments: ::core::ptr::null(),
6005            p_resolve_attachments: ::core::ptr::null(),
6006            p_depth_stencil_attachment: ::core::ptr::null(),
6007            preserve_attachment_count: u32::default(),
6008            p_preserve_attachments: ::core::ptr::null(),
6009            _marker: PhantomData,
6010        }
6011    }
6012}
6013impl<'a> SubpassDescription<'a> {
6014    #[inline]
6015    pub fn flags(mut self, flags: SubpassDescriptionFlags) -> Self {
6016        self.flags = flags;
6017        self
6018    }
6019    #[inline]
6020    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
6021        self.pipeline_bind_point = pipeline_bind_point;
6022        self
6023    }
6024    #[inline]
6025    pub fn input_attachments(mut self, input_attachments: &'a [AttachmentReference]) -> Self {
6026        self.input_attachment_count = input_attachments.len() as _;
6027        self.p_input_attachments = input_attachments.as_ptr();
6028        self
6029    }
6030    #[inline]
6031    pub fn color_attachments(mut self, color_attachments: &'a [AttachmentReference]) -> Self {
6032        self.color_attachment_count = color_attachments.len() as _;
6033        self.p_color_attachments = color_attachments.as_ptr();
6034        self
6035    }
6036    #[inline]
6037    pub fn resolve_attachments(mut self, resolve_attachments: &'a [AttachmentReference]) -> Self {
6038        self.color_attachment_count = resolve_attachments.len() as _;
6039        self.p_resolve_attachments = resolve_attachments.as_ptr();
6040        self
6041    }
6042    #[inline]
6043    pub fn depth_stencil_attachment(
6044        mut self,
6045        depth_stencil_attachment: &'a AttachmentReference,
6046    ) -> Self {
6047        self.p_depth_stencil_attachment = depth_stencil_attachment;
6048        self
6049    }
6050    #[inline]
6051    pub fn preserve_attachments(mut self, preserve_attachments: &'a [u32]) -> Self {
6052        self.preserve_attachment_count = preserve_attachments.len() as _;
6053        self.p_preserve_attachments = preserve_attachments.as_ptr();
6054        self
6055    }
6056}
6057#[repr(C)]
6058#[cfg_attr(feature = "debug", derive(Debug))]
6059#[derive(Copy, Clone, Default)]
6060#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassDependency.html>"]
6061#[must_use]
6062pub struct SubpassDependency {
6063    pub src_subpass: u32,
6064    pub dst_subpass: u32,
6065    pub src_stage_mask: PipelineStageFlags,
6066    pub dst_stage_mask: PipelineStageFlags,
6067    pub src_access_mask: AccessFlags,
6068    pub dst_access_mask: AccessFlags,
6069    pub dependency_flags: DependencyFlags,
6070}
6071impl SubpassDependency {
6072    #[inline]
6073    pub fn src_subpass(mut self, src_subpass: u32) -> Self {
6074        self.src_subpass = src_subpass;
6075        self
6076    }
6077    #[inline]
6078    pub fn dst_subpass(mut self, dst_subpass: u32) -> Self {
6079        self.dst_subpass = dst_subpass;
6080        self
6081    }
6082    #[inline]
6083    pub fn src_stage_mask(mut self, src_stage_mask: PipelineStageFlags) -> Self {
6084        self.src_stage_mask = src_stage_mask;
6085        self
6086    }
6087    #[inline]
6088    pub fn dst_stage_mask(mut self, dst_stage_mask: PipelineStageFlags) -> Self {
6089        self.dst_stage_mask = dst_stage_mask;
6090        self
6091    }
6092    #[inline]
6093    pub fn src_access_mask(mut self, src_access_mask: AccessFlags) -> Self {
6094        self.src_access_mask = src_access_mask;
6095        self
6096    }
6097    #[inline]
6098    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags) -> Self {
6099        self.dst_access_mask = dst_access_mask;
6100        self
6101    }
6102    #[inline]
6103    pub fn dependency_flags(mut self, dependency_flags: DependencyFlags) -> Self {
6104        self.dependency_flags = dependency_flags;
6105        self
6106    }
6107}
6108#[repr(C)]
6109#[cfg_attr(feature = "debug", derive(Debug))]
6110#[derive(Copy, Clone)]
6111#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassCreateInfo.html>"]
6112#[must_use]
6113pub struct RenderPassCreateInfo<'a> {
6114    pub s_type: StructureType,
6115    pub p_next: *const c_void,
6116    pub flags: RenderPassCreateFlags,
6117    pub attachment_count: u32,
6118    pub p_attachments: *const AttachmentDescription,
6119    pub subpass_count: u32,
6120    pub p_subpasses: *const SubpassDescription<'a>,
6121    pub dependency_count: u32,
6122    pub p_dependencies: *const SubpassDependency,
6123    pub _marker: PhantomData<&'a ()>,
6124}
6125unsafe impl Send for RenderPassCreateInfo<'_> {}
6126unsafe impl Sync for RenderPassCreateInfo<'_> {}
6127impl ::core::default::Default for RenderPassCreateInfo<'_> {
6128    #[inline]
6129    fn default() -> Self {
6130        Self {
6131            s_type: Self::STRUCTURE_TYPE,
6132            p_next: ::core::ptr::null(),
6133            flags: RenderPassCreateFlags::default(),
6134            attachment_count: u32::default(),
6135            p_attachments: ::core::ptr::null(),
6136            subpass_count: u32::default(),
6137            p_subpasses: ::core::ptr::null(),
6138            dependency_count: u32::default(),
6139            p_dependencies: ::core::ptr::null(),
6140            _marker: PhantomData,
6141        }
6142    }
6143}
6144unsafe impl<'a> TaggedStructure for RenderPassCreateInfo<'a> {
6145    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_CREATE_INFO;
6146}
6147pub unsafe trait ExtendsRenderPassCreateInfo {}
6148impl<'a> RenderPassCreateInfo<'a> {
6149    #[inline]
6150    pub fn flags(mut self, flags: RenderPassCreateFlags) -> Self {
6151        self.flags = flags;
6152        self
6153    }
6154    #[inline]
6155    pub fn attachments(mut self, attachments: &'a [AttachmentDescription]) -> Self {
6156        self.attachment_count = attachments.len() as _;
6157        self.p_attachments = attachments.as_ptr();
6158        self
6159    }
6160    #[inline]
6161    pub fn subpasses(mut self, subpasses: &'a [SubpassDescription<'a>]) -> Self {
6162        self.subpass_count = subpasses.len() as _;
6163        self.p_subpasses = subpasses.as_ptr();
6164        self
6165    }
6166    #[inline]
6167    pub fn dependencies(mut self, dependencies: &'a [SubpassDependency]) -> Self {
6168        self.dependency_count = dependencies.len() as _;
6169        self.p_dependencies = dependencies.as_ptr();
6170        self
6171    }
6172    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
6173    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
6174    #[doc = r" valid extension structs can be pushed into the chain."]
6175    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
6176    #[doc = r" chain will look like `A -> D -> B -> C`."]
6177    pub fn push_next<T: ExtendsRenderPassCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
6178        unsafe {
6179            let next_ptr = <*const T>::cast(next);
6180            let last_next = ptr_chain_iter(next).last().unwrap();
6181            (*last_next).p_next = self.p_next as _;
6182            self.p_next = next_ptr;
6183        }
6184        self
6185    }
6186}
6187#[repr(C)]
6188#[cfg_attr(feature = "debug", derive(Debug))]
6189#[derive(Copy, Clone)]
6190#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkEventCreateInfo.html>"]
6191#[must_use]
6192pub struct EventCreateInfo<'a> {
6193    pub s_type: StructureType,
6194    pub p_next: *const c_void,
6195    pub flags: EventCreateFlags,
6196    pub _marker: PhantomData<&'a ()>,
6197}
6198unsafe impl Send for EventCreateInfo<'_> {}
6199unsafe impl Sync for EventCreateInfo<'_> {}
6200impl ::core::default::Default for EventCreateInfo<'_> {
6201    #[inline]
6202    fn default() -> Self {
6203        Self {
6204            s_type: Self::STRUCTURE_TYPE,
6205            p_next: ::core::ptr::null(),
6206            flags: EventCreateFlags::default(),
6207            _marker: PhantomData,
6208        }
6209    }
6210}
6211unsafe impl<'a> TaggedStructure for EventCreateInfo<'a> {
6212    const STRUCTURE_TYPE: StructureType = StructureType::EVENT_CREATE_INFO;
6213}
6214pub unsafe trait ExtendsEventCreateInfo {}
6215impl<'a> EventCreateInfo<'a> {
6216    #[inline]
6217    pub fn flags(mut self, flags: EventCreateFlags) -> Self {
6218        self.flags = flags;
6219        self
6220    }
6221    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
6222    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
6223    #[doc = r" valid extension structs can be pushed into the chain."]
6224    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
6225    #[doc = r" chain will look like `A -> D -> B -> C`."]
6226    pub fn push_next<T: ExtendsEventCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
6227        unsafe {
6228            let next_ptr = <*const T>::cast(next);
6229            let last_next = ptr_chain_iter(next).last().unwrap();
6230            (*last_next).p_next = self.p_next as _;
6231            self.p_next = next_ptr;
6232        }
6233        self
6234    }
6235}
6236#[repr(C)]
6237#[cfg_attr(feature = "debug", derive(Debug))]
6238#[derive(Copy, Clone)]
6239#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFenceCreateInfo.html>"]
6240#[must_use]
6241pub struct FenceCreateInfo<'a> {
6242    pub s_type: StructureType,
6243    pub p_next: *const c_void,
6244    pub flags: FenceCreateFlags,
6245    pub _marker: PhantomData<&'a ()>,
6246}
6247unsafe impl Send for FenceCreateInfo<'_> {}
6248unsafe impl Sync for FenceCreateInfo<'_> {}
6249impl ::core::default::Default for FenceCreateInfo<'_> {
6250    #[inline]
6251    fn default() -> Self {
6252        Self {
6253            s_type: Self::STRUCTURE_TYPE,
6254            p_next: ::core::ptr::null(),
6255            flags: FenceCreateFlags::default(),
6256            _marker: PhantomData,
6257        }
6258    }
6259}
6260unsafe impl<'a> TaggedStructure for FenceCreateInfo<'a> {
6261    const STRUCTURE_TYPE: StructureType = StructureType::FENCE_CREATE_INFO;
6262}
6263pub unsafe trait ExtendsFenceCreateInfo {}
6264impl<'a> FenceCreateInfo<'a> {
6265    #[inline]
6266    pub fn flags(mut self, flags: FenceCreateFlags) -> Self {
6267        self.flags = flags;
6268        self
6269    }
6270    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
6271    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
6272    #[doc = r" valid extension structs can be pushed into the chain."]
6273    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
6274    #[doc = r" chain will look like `A -> D -> B -> C`."]
6275    pub fn push_next<T: ExtendsFenceCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
6276        unsafe {
6277            let next_ptr = <*const T>::cast(next);
6278            let last_next = ptr_chain_iter(next).last().unwrap();
6279            (*last_next).p_next = self.p_next as _;
6280            self.p_next = next_ptr;
6281        }
6282        self
6283    }
6284}
6285#[repr(C)]
6286#[cfg_attr(feature = "debug", derive(Debug))]
6287#[derive(Copy, Clone, Default)]
6288#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFeatures.html>"]
6289#[must_use]
6290pub struct PhysicalDeviceFeatures {
6291    pub robust_buffer_access: Bool32,
6292    pub full_draw_index_uint32: Bool32,
6293    pub image_cube_array: Bool32,
6294    pub independent_blend: Bool32,
6295    pub geometry_shader: Bool32,
6296    pub tessellation_shader: Bool32,
6297    pub sample_rate_shading: Bool32,
6298    pub dual_src_blend: Bool32,
6299    pub logic_op: Bool32,
6300    pub multi_draw_indirect: Bool32,
6301    pub draw_indirect_first_instance: Bool32,
6302    pub depth_clamp: Bool32,
6303    pub depth_bias_clamp: Bool32,
6304    pub fill_mode_non_solid: Bool32,
6305    pub depth_bounds: Bool32,
6306    pub wide_lines: Bool32,
6307    pub large_points: Bool32,
6308    pub alpha_to_one: Bool32,
6309    pub multi_viewport: Bool32,
6310    pub sampler_anisotropy: Bool32,
6311    pub texture_compression_etc2: Bool32,
6312    pub texture_compression_astc_ldr: Bool32,
6313    pub texture_compression_bc: Bool32,
6314    pub occlusion_query_precise: Bool32,
6315    pub pipeline_statistics_query: Bool32,
6316    pub vertex_pipeline_stores_and_atomics: Bool32,
6317    pub fragment_stores_and_atomics: Bool32,
6318    pub shader_tessellation_and_geometry_point_size: Bool32,
6319    pub shader_image_gather_extended: Bool32,
6320    pub shader_storage_image_extended_formats: Bool32,
6321    pub shader_storage_image_multisample: Bool32,
6322    pub shader_storage_image_read_without_format: Bool32,
6323    pub shader_storage_image_write_without_format: Bool32,
6324    pub shader_uniform_buffer_array_dynamic_indexing: Bool32,
6325    pub shader_sampled_image_array_dynamic_indexing: Bool32,
6326    pub shader_storage_buffer_array_dynamic_indexing: Bool32,
6327    pub shader_storage_image_array_dynamic_indexing: Bool32,
6328    pub shader_clip_distance: Bool32,
6329    pub shader_cull_distance: Bool32,
6330    pub shader_float64: Bool32,
6331    pub shader_int64: Bool32,
6332    pub shader_int16: Bool32,
6333    pub shader_resource_residency: Bool32,
6334    pub shader_resource_min_lod: Bool32,
6335    pub sparse_binding: Bool32,
6336    pub sparse_residency_buffer: Bool32,
6337    pub sparse_residency_image2_d: Bool32,
6338    pub sparse_residency_image3_d: Bool32,
6339    pub sparse_residency2_samples: Bool32,
6340    pub sparse_residency4_samples: Bool32,
6341    pub sparse_residency8_samples: Bool32,
6342    pub sparse_residency16_samples: Bool32,
6343    pub sparse_residency_aliased: Bool32,
6344    pub variable_multisample_rate: Bool32,
6345    pub inherited_queries: Bool32,
6346}
6347impl PhysicalDeviceFeatures {
6348    #[inline]
6349    pub fn robust_buffer_access(mut self, robust_buffer_access: bool) -> Self {
6350        self.robust_buffer_access = robust_buffer_access.into();
6351        self
6352    }
6353    #[inline]
6354    pub fn full_draw_index_uint32(mut self, full_draw_index_uint32: bool) -> Self {
6355        self.full_draw_index_uint32 = full_draw_index_uint32.into();
6356        self
6357    }
6358    #[inline]
6359    pub fn image_cube_array(mut self, image_cube_array: bool) -> Self {
6360        self.image_cube_array = image_cube_array.into();
6361        self
6362    }
6363    #[inline]
6364    pub fn independent_blend(mut self, independent_blend: bool) -> Self {
6365        self.independent_blend = independent_blend.into();
6366        self
6367    }
6368    #[inline]
6369    pub fn geometry_shader(mut self, geometry_shader: bool) -> Self {
6370        self.geometry_shader = geometry_shader.into();
6371        self
6372    }
6373    #[inline]
6374    pub fn tessellation_shader(mut self, tessellation_shader: bool) -> Self {
6375        self.tessellation_shader = tessellation_shader.into();
6376        self
6377    }
6378    #[inline]
6379    pub fn sample_rate_shading(mut self, sample_rate_shading: bool) -> Self {
6380        self.sample_rate_shading = sample_rate_shading.into();
6381        self
6382    }
6383    #[inline]
6384    pub fn dual_src_blend(mut self, dual_src_blend: bool) -> Self {
6385        self.dual_src_blend = dual_src_blend.into();
6386        self
6387    }
6388    #[inline]
6389    pub fn logic_op(mut self, logic_op: bool) -> Self {
6390        self.logic_op = logic_op.into();
6391        self
6392    }
6393    #[inline]
6394    pub fn multi_draw_indirect(mut self, multi_draw_indirect: bool) -> Self {
6395        self.multi_draw_indirect = multi_draw_indirect.into();
6396        self
6397    }
6398    #[inline]
6399    pub fn draw_indirect_first_instance(mut self, draw_indirect_first_instance: bool) -> Self {
6400        self.draw_indirect_first_instance = draw_indirect_first_instance.into();
6401        self
6402    }
6403    #[inline]
6404    pub fn depth_clamp(mut self, depth_clamp: bool) -> Self {
6405        self.depth_clamp = depth_clamp.into();
6406        self
6407    }
6408    #[inline]
6409    pub fn depth_bias_clamp(mut self, depth_bias_clamp: bool) -> Self {
6410        self.depth_bias_clamp = depth_bias_clamp.into();
6411        self
6412    }
6413    #[inline]
6414    pub fn fill_mode_non_solid(mut self, fill_mode_non_solid: bool) -> Self {
6415        self.fill_mode_non_solid = fill_mode_non_solid.into();
6416        self
6417    }
6418    #[inline]
6419    pub fn depth_bounds(mut self, depth_bounds: bool) -> Self {
6420        self.depth_bounds = depth_bounds.into();
6421        self
6422    }
6423    #[inline]
6424    pub fn wide_lines(mut self, wide_lines: bool) -> Self {
6425        self.wide_lines = wide_lines.into();
6426        self
6427    }
6428    #[inline]
6429    pub fn large_points(mut self, large_points: bool) -> Self {
6430        self.large_points = large_points.into();
6431        self
6432    }
6433    #[inline]
6434    pub fn alpha_to_one(mut self, alpha_to_one: bool) -> Self {
6435        self.alpha_to_one = alpha_to_one.into();
6436        self
6437    }
6438    #[inline]
6439    pub fn multi_viewport(mut self, multi_viewport: bool) -> Self {
6440        self.multi_viewport = multi_viewport.into();
6441        self
6442    }
6443    #[inline]
6444    pub fn sampler_anisotropy(mut self, sampler_anisotropy: bool) -> Self {
6445        self.sampler_anisotropy = sampler_anisotropy.into();
6446        self
6447    }
6448    #[inline]
6449    pub fn texture_compression_etc2(mut self, texture_compression_etc2: bool) -> Self {
6450        self.texture_compression_etc2 = texture_compression_etc2.into();
6451        self
6452    }
6453    #[inline]
6454    pub fn texture_compression_astc_ldr(mut self, texture_compression_astc_ldr: bool) -> Self {
6455        self.texture_compression_astc_ldr = texture_compression_astc_ldr.into();
6456        self
6457    }
6458    #[inline]
6459    pub fn texture_compression_bc(mut self, texture_compression_bc: bool) -> Self {
6460        self.texture_compression_bc = texture_compression_bc.into();
6461        self
6462    }
6463    #[inline]
6464    pub fn occlusion_query_precise(mut self, occlusion_query_precise: bool) -> Self {
6465        self.occlusion_query_precise = occlusion_query_precise.into();
6466        self
6467    }
6468    #[inline]
6469    pub fn pipeline_statistics_query(mut self, pipeline_statistics_query: bool) -> Self {
6470        self.pipeline_statistics_query = pipeline_statistics_query.into();
6471        self
6472    }
6473    #[inline]
6474    pub fn vertex_pipeline_stores_and_atomics(
6475        mut self,
6476        vertex_pipeline_stores_and_atomics: bool,
6477    ) -> Self {
6478        self.vertex_pipeline_stores_and_atomics = vertex_pipeline_stores_and_atomics.into();
6479        self
6480    }
6481    #[inline]
6482    pub fn fragment_stores_and_atomics(mut self, fragment_stores_and_atomics: bool) -> Self {
6483        self.fragment_stores_and_atomics = fragment_stores_and_atomics.into();
6484        self
6485    }
6486    #[inline]
6487    pub fn shader_tessellation_and_geometry_point_size(
6488        mut self,
6489        shader_tessellation_and_geometry_point_size: bool,
6490    ) -> Self {
6491        self.shader_tessellation_and_geometry_point_size =
6492            shader_tessellation_and_geometry_point_size.into();
6493        self
6494    }
6495    #[inline]
6496    pub fn shader_image_gather_extended(mut self, shader_image_gather_extended: bool) -> Self {
6497        self.shader_image_gather_extended = shader_image_gather_extended.into();
6498        self
6499    }
6500    #[inline]
6501    pub fn shader_storage_image_extended_formats(
6502        mut self,
6503        shader_storage_image_extended_formats: bool,
6504    ) -> Self {
6505        self.shader_storage_image_extended_formats = shader_storage_image_extended_formats.into();
6506        self
6507    }
6508    #[inline]
6509    pub fn shader_storage_image_multisample(
6510        mut self,
6511        shader_storage_image_multisample: bool,
6512    ) -> Self {
6513        self.shader_storage_image_multisample = shader_storage_image_multisample.into();
6514        self
6515    }
6516    #[inline]
6517    pub fn shader_storage_image_read_without_format(
6518        mut self,
6519        shader_storage_image_read_without_format: bool,
6520    ) -> Self {
6521        self.shader_storage_image_read_without_format =
6522            shader_storage_image_read_without_format.into();
6523        self
6524    }
6525    #[inline]
6526    pub fn shader_storage_image_write_without_format(
6527        mut self,
6528        shader_storage_image_write_without_format: bool,
6529    ) -> Self {
6530        self.shader_storage_image_write_without_format =
6531            shader_storage_image_write_without_format.into();
6532        self
6533    }
6534    #[inline]
6535    pub fn shader_uniform_buffer_array_dynamic_indexing(
6536        mut self,
6537        shader_uniform_buffer_array_dynamic_indexing: bool,
6538    ) -> Self {
6539        self.shader_uniform_buffer_array_dynamic_indexing =
6540            shader_uniform_buffer_array_dynamic_indexing.into();
6541        self
6542    }
6543    #[inline]
6544    pub fn shader_sampled_image_array_dynamic_indexing(
6545        mut self,
6546        shader_sampled_image_array_dynamic_indexing: bool,
6547    ) -> Self {
6548        self.shader_sampled_image_array_dynamic_indexing =
6549            shader_sampled_image_array_dynamic_indexing.into();
6550        self
6551    }
6552    #[inline]
6553    pub fn shader_storage_buffer_array_dynamic_indexing(
6554        mut self,
6555        shader_storage_buffer_array_dynamic_indexing: bool,
6556    ) -> Self {
6557        self.shader_storage_buffer_array_dynamic_indexing =
6558            shader_storage_buffer_array_dynamic_indexing.into();
6559        self
6560    }
6561    #[inline]
6562    pub fn shader_storage_image_array_dynamic_indexing(
6563        mut self,
6564        shader_storage_image_array_dynamic_indexing: bool,
6565    ) -> Self {
6566        self.shader_storage_image_array_dynamic_indexing =
6567            shader_storage_image_array_dynamic_indexing.into();
6568        self
6569    }
6570    #[inline]
6571    pub fn shader_clip_distance(mut self, shader_clip_distance: bool) -> Self {
6572        self.shader_clip_distance = shader_clip_distance.into();
6573        self
6574    }
6575    #[inline]
6576    pub fn shader_cull_distance(mut self, shader_cull_distance: bool) -> Self {
6577        self.shader_cull_distance = shader_cull_distance.into();
6578        self
6579    }
6580    #[inline]
6581    pub fn shader_float64(mut self, shader_float64: bool) -> Self {
6582        self.shader_float64 = shader_float64.into();
6583        self
6584    }
6585    #[inline]
6586    pub fn shader_int64(mut self, shader_int64: bool) -> Self {
6587        self.shader_int64 = shader_int64.into();
6588        self
6589    }
6590    #[inline]
6591    pub fn shader_int16(mut self, shader_int16: bool) -> Self {
6592        self.shader_int16 = shader_int16.into();
6593        self
6594    }
6595    #[inline]
6596    pub fn shader_resource_residency(mut self, shader_resource_residency: bool) -> Self {
6597        self.shader_resource_residency = shader_resource_residency.into();
6598        self
6599    }
6600    #[inline]
6601    pub fn shader_resource_min_lod(mut self, shader_resource_min_lod: bool) -> Self {
6602        self.shader_resource_min_lod = shader_resource_min_lod.into();
6603        self
6604    }
6605    #[inline]
6606    pub fn sparse_binding(mut self, sparse_binding: bool) -> Self {
6607        self.sparse_binding = sparse_binding.into();
6608        self
6609    }
6610    #[inline]
6611    pub fn sparse_residency_buffer(mut self, sparse_residency_buffer: bool) -> Self {
6612        self.sparse_residency_buffer = sparse_residency_buffer.into();
6613        self
6614    }
6615    #[inline]
6616    pub fn sparse_residency_image2_d(mut self, sparse_residency_image2_d: bool) -> Self {
6617        self.sparse_residency_image2_d = sparse_residency_image2_d.into();
6618        self
6619    }
6620    #[inline]
6621    pub fn sparse_residency_image3_d(mut self, sparse_residency_image3_d: bool) -> Self {
6622        self.sparse_residency_image3_d = sparse_residency_image3_d.into();
6623        self
6624    }
6625    #[inline]
6626    pub fn sparse_residency2_samples(mut self, sparse_residency2_samples: bool) -> Self {
6627        self.sparse_residency2_samples = sparse_residency2_samples.into();
6628        self
6629    }
6630    #[inline]
6631    pub fn sparse_residency4_samples(mut self, sparse_residency4_samples: bool) -> Self {
6632        self.sparse_residency4_samples = sparse_residency4_samples.into();
6633        self
6634    }
6635    #[inline]
6636    pub fn sparse_residency8_samples(mut self, sparse_residency8_samples: bool) -> Self {
6637        self.sparse_residency8_samples = sparse_residency8_samples.into();
6638        self
6639    }
6640    #[inline]
6641    pub fn sparse_residency16_samples(mut self, sparse_residency16_samples: bool) -> Self {
6642        self.sparse_residency16_samples = sparse_residency16_samples.into();
6643        self
6644    }
6645    #[inline]
6646    pub fn sparse_residency_aliased(mut self, sparse_residency_aliased: bool) -> Self {
6647        self.sparse_residency_aliased = sparse_residency_aliased.into();
6648        self
6649    }
6650    #[inline]
6651    pub fn variable_multisample_rate(mut self, variable_multisample_rate: bool) -> Self {
6652        self.variable_multisample_rate = variable_multisample_rate.into();
6653        self
6654    }
6655    #[inline]
6656    pub fn inherited_queries(mut self, inherited_queries: bool) -> Self {
6657        self.inherited_queries = inherited_queries.into();
6658        self
6659    }
6660}
6661#[repr(C)]
6662#[cfg_attr(feature = "debug", derive(Debug))]
6663#[derive(Copy, Clone, Default)]
6664#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSparseProperties.html>"]
6665#[must_use]
6666pub struct PhysicalDeviceSparseProperties {
6667    pub residency_standard2_d_block_shape: Bool32,
6668    pub residency_standard2_d_multisample_block_shape: Bool32,
6669    pub residency_standard3_d_block_shape: Bool32,
6670    pub residency_aligned_mip_size: Bool32,
6671    pub residency_non_resident_strict: Bool32,
6672}
6673impl PhysicalDeviceSparseProperties {
6674    #[inline]
6675    pub fn residency_standard2_d_block_shape(
6676        mut self,
6677        residency_standard2_d_block_shape: bool,
6678    ) -> Self {
6679        self.residency_standard2_d_block_shape = residency_standard2_d_block_shape.into();
6680        self
6681    }
6682    #[inline]
6683    pub fn residency_standard2_d_multisample_block_shape(
6684        mut self,
6685        residency_standard2_d_multisample_block_shape: bool,
6686    ) -> Self {
6687        self.residency_standard2_d_multisample_block_shape =
6688            residency_standard2_d_multisample_block_shape.into();
6689        self
6690    }
6691    #[inline]
6692    pub fn residency_standard3_d_block_shape(
6693        mut self,
6694        residency_standard3_d_block_shape: bool,
6695    ) -> Self {
6696        self.residency_standard3_d_block_shape = residency_standard3_d_block_shape.into();
6697        self
6698    }
6699    #[inline]
6700    pub fn residency_aligned_mip_size(mut self, residency_aligned_mip_size: bool) -> Self {
6701        self.residency_aligned_mip_size = residency_aligned_mip_size.into();
6702        self
6703    }
6704    #[inline]
6705    pub fn residency_non_resident_strict(mut self, residency_non_resident_strict: bool) -> Self {
6706        self.residency_non_resident_strict = residency_non_resident_strict.into();
6707        self
6708    }
6709}
6710#[repr(C)]
6711#[cfg_attr(feature = "debug", derive(Debug))]
6712#[derive(Copy, Clone)]
6713#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLimits.html>"]
6714#[must_use]
6715pub struct PhysicalDeviceLimits {
6716    pub max_image_dimension1_d: u32,
6717    pub max_image_dimension2_d: u32,
6718    pub max_image_dimension3_d: u32,
6719    pub max_image_dimension_cube: u32,
6720    pub max_image_array_layers: u32,
6721    pub max_texel_buffer_elements: u32,
6722    pub max_uniform_buffer_range: u32,
6723    pub max_storage_buffer_range: u32,
6724    pub max_push_constants_size: u32,
6725    pub max_memory_allocation_count: u32,
6726    pub max_sampler_allocation_count: u32,
6727    pub buffer_image_granularity: DeviceSize,
6728    pub sparse_address_space_size: DeviceSize,
6729    pub max_bound_descriptor_sets: u32,
6730    pub max_per_stage_descriptor_samplers: u32,
6731    pub max_per_stage_descriptor_uniform_buffers: u32,
6732    pub max_per_stage_descriptor_storage_buffers: u32,
6733    pub max_per_stage_descriptor_sampled_images: u32,
6734    pub max_per_stage_descriptor_storage_images: u32,
6735    pub max_per_stage_descriptor_input_attachments: u32,
6736    pub max_per_stage_resources: u32,
6737    pub max_descriptor_set_samplers: u32,
6738    pub max_descriptor_set_uniform_buffers: u32,
6739    pub max_descriptor_set_uniform_buffers_dynamic: u32,
6740    pub max_descriptor_set_storage_buffers: u32,
6741    pub max_descriptor_set_storage_buffers_dynamic: u32,
6742    pub max_descriptor_set_sampled_images: u32,
6743    pub max_descriptor_set_storage_images: u32,
6744    pub max_descriptor_set_input_attachments: u32,
6745    pub max_vertex_input_attributes: u32,
6746    pub max_vertex_input_bindings: u32,
6747    pub max_vertex_input_attribute_offset: u32,
6748    pub max_vertex_input_binding_stride: u32,
6749    pub max_vertex_output_components: u32,
6750    pub max_tessellation_generation_level: u32,
6751    pub max_tessellation_patch_size: u32,
6752    pub max_tessellation_control_per_vertex_input_components: u32,
6753    pub max_tessellation_control_per_vertex_output_components: u32,
6754    pub max_tessellation_control_per_patch_output_components: u32,
6755    pub max_tessellation_control_total_output_components: u32,
6756    pub max_tessellation_evaluation_input_components: u32,
6757    pub max_tessellation_evaluation_output_components: u32,
6758    pub max_geometry_shader_invocations: u32,
6759    pub max_geometry_input_components: u32,
6760    pub max_geometry_output_components: u32,
6761    pub max_geometry_output_vertices: u32,
6762    pub max_geometry_total_output_components: u32,
6763    pub max_fragment_input_components: u32,
6764    pub max_fragment_output_attachments: u32,
6765    pub max_fragment_dual_src_attachments: u32,
6766    pub max_fragment_combined_output_resources: u32,
6767    pub max_compute_shared_memory_size: u32,
6768    pub max_compute_work_group_count: [u32; 3],
6769    pub max_compute_work_group_invocations: u32,
6770    pub max_compute_work_group_size: [u32; 3],
6771    pub sub_pixel_precision_bits: u32,
6772    pub sub_texel_precision_bits: u32,
6773    pub mipmap_precision_bits: u32,
6774    pub max_draw_indexed_index_value: u32,
6775    pub max_draw_indirect_count: u32,
6776    pub max_sampler_lod_bias: f32,
6777    pub max_sampler_anisotropy: f32,
6778    pub max_viewports: u32,
6779    pub max_viewport_dimensions: [u32; 2],
6780    pub viewport_bounds_range: [f32; 2],
6781    pub viewport_sub_pixel_bits: u32,
6782    pub min_memory_map_alignment: usize,
6783    pub min_texel_buffer_offset_alignment: DeviceSize,
6784    pub min_uniform_buffer_offset_alignment: DeviceSize,
6785    pub min_storage_buffer_offset_alignment: DeviceSize,
6786    pub min_texel_offset: i32,
6787    pub max_texel_offset: u32,
6788    pub min_texel_gather_offset: i32,
6789    pub max_texel_gather_offset: u32,
6790    pub min_interpolation_offset: f32,
6791    pub max_interpolation_offset: f32,
6792    pub sub_pixel_interpolation_offset_bits: u32,
6793    pub max_framebuffer_width: u32,
6794    pub max_framebuffer_height: u32,
6795    pub max_framebuffer_layers: u32,
6796    pub framebuffer_color_sample_counts: SampleCountFlags,
6797    pub framebuffer_depth_sample_counts: SampleCountFlags,
6798    pub framebuffer_stencil_sample_counts: SampleCountFlags,
6799    pub framebuffer_no_attachments_sample_counts: SampleCountFlags,
6800    pub max_color_attachments: u32,
6801    pub sampled_image_color_sample_counts: SampleCountFlags,
6802    pub sampled_image_integer_sample_counts: SampleCountFlags,
6803    pub sampled_image_depth_sample_counts: SampleCountFlags,
6804    pub sampled_image_stencil_sample_counts: SampleCountFlags,
6805    pub storage_image_sample_counts: SampleCountFlags,
6806    pub max_sample_mask_words: u32,
6807    pub timestamp_compute_and_graphics: Bool32,
6808    pub timestamp_period: f32,
6809    pub max_clip_distances: u32,
6810    pub max_cull_distances: u32,
6811    pub max_combined_clip_and_cull_distances: u32,
6812    pub discrete_queue_priorities: u32,
6813    pub point_size_range: [f32; 2],
6814    pub line_width_range: [f32; 2],
6815    pub point_size_granularity: f32,
6816    pub line_width_granularity: f32,
6817    pub strict_lines: Bool32,
6818    pub standard_sample_locations: Bool32,
6819    pub optimal_buffer_copy_offset_alignment: DeviceSize,
6820    pub optimal_buffer_copy_row_pitch_alignment: DeviceSize,
6821    pub non_coherent_atom_size: DeviceSize,
6822}
6823impl ::core::default::Default for PhysicalDeviceLimits {
6824    #[inline]
6825    fn default() -> Self {
6826        Self {
6827            max_image_dimension1_d: u32::default(),
6828            max_image_dimension2_d: u32::default(),
6829            max_image_dimension3_d: u32::default(),
6830            max_image_dimension_cube: u32::default(),
6831            max_image_array_layers: u32::default(),
6832            max_texel_buffer_elements: u32::default(),
6833            max_uniform_buffer_range: u32::default(),
6834            max_storage_buffer_range: u32::default(),
6835            max_push_constants_size: u32::default(),
6836            max_memory_allocation_count: u32::default(),
6837            max_sampler_allocation_count: u32::default(),
6838            buffer_image_granularity: DeviceSize::default(),
6839            sparse_address_space_size: DeviceSize::default(),
6840            max_bound_descriptor_sets: u32::default(),
6841            max_per_stage_descriptor_samplers: u32::default(),
6842            max_per_stage_descriptor_uniform_buffers: u32::default(),
6843            max_per_stage_descriptor_storage_buffers: u32::default(),
6844            max_per_stage_descriptor_sampled_images: u32::default(),
6845            max_per_stage_descriptor_storage_images: u32::default(),
6846            max_per_stage_descriptor_input_attachments: u32::default(),
6847            max_per_stage_resources: u32::default(),
6848            max_descriptor_set_samplers: u32::default(),
6849            max_descriptor_set_uniform_buffers: u32::default(),
6850            max_descriptor_set_uniform_buffers_dynamic: u32::default(),
6851            max_descriptor_set_storage_buffers: u32::default(),
6852            max_descriptor_set_storage_buffers_dynamic: u32::default(),
6853            max_descriptor_set_sampled_images: u32::default(),
6854            max_descriptor_set_storage_images: u32::default(),
6855            max_descriptor_set_input_attachments: u32::default(),
6856            max_vertex_input_attributes: u32::default(),
6857            max_vertex_input_bindings: u32::default(),
6858            max_vertex_input_attribute_offset: u32::default(),
6859            max_vertex_input_binding_stride: u32::default(),
6860            max_vertex_output_components: u32::default(),
6861            max_tessellation_generation_level: u32::default(),
6862            max_tessellation_patch_size: u32::default(),
6863            max_tessellation_control_per_vertex_input_components: u32::default(),
6864            max_tessellation_control_per_vertex_output_components: u32::default(),
6865            max_tessellation_control_per_patch_output_components: u32::default(),
6866            max_tessellation_control_total_output_components: u32::default(),
6867            max_tessellation_evaluation_input_components: u32::default(),
6868            max_tessellation_evaluation_output_components: u32::default(),
6869            max_geometry_shader_invocations: u32::default(),
6870            max_geometry_input_components: u32::default(),
6871            max_geometry_output_components: u32::default(),
6872            max_geometry_output_vertices: u32::default(),
6873            max_geometry_total_output_components: u32::default(),
6874            max_fragment_input_components: u32::default(),
6875            max_fragment_output_attachments: u32::default(),
6876            max_fragment_dual_src_attachments: u32::default(),
6877            max_fragment_combined_output_resources: u32::default(),
6878            max_compute_shared_memory_size: u32::default(),
6879            max_compute_work_group_count: unsafe { ::core::mem::zeroed() },
6880            max_compute_work_group_invocations: u32::default(),
6881            max_compute_work_group_size: unsafe { ::core::mem::zeroed() },
6882            sub_pixel_precision_bits: u32::default(),
6883            sub_texel_precision_bits: u32::default(),
6884            mipmap_precision_bits: u32::default(),
6885            max_draw_indexed_index_value: u32::default(),
6886            max_draw_indirect_count: u32::default(),
6887            max_sampler_lod_bias: f32::default(),
6888            max_sampler_anisotropy: f32::default(),
6889            max_viewports: u32::default(),
6890            max_viewport_dimensions: unsafe { ::core::mem::zeroed() },
6891            viewport_bounds_range: unsafe { ::core::mem::zeroed() },
6892            viewport_sub_pixel_bits: u32::default(),
6893            min_memory_map_alignment: usize::default(),
6894            min_texel_buffer_offset_alignment: DeviceSize::default(),
6895            min_uniform_buffer_offset_alignment: DeviceSize::default(),
6896            min_storage_buffer_offset_alignment: DeviceSize::default(),
6897            min_texel_offset: i32::default(),
6898            max_texel_offset: u32::default(),
6899            min_texel_gather_offset: i32::default(),
6900            max_texel_gather_offset: u32::default(),
6901            min_interpolation_offset: f32::default(),
6902            max_interpolation_offset: f32::default(),
6903            sub_pixel_interpolation_offset_bits: u32::default(),
6904            max_framebuffer_width: u32::default(),
6905            max_framebuffer_height: u32::default(),
6906            max_framebuffer_layers: u32::default(),
6907            framebuffer_color_sample_counts: SampleCountFlags::default(),
6908            framebuffer_depth_sample_counts: SampleCountFlags::default(),
6909            framebuffer_stencil_sample_counts: SampleCountFlags::default(),
6910            framebuffer_no_attachments_sample_counts: SampleCountFlags::default(),
6911            max_color_attachments: u32::default(),
6912            sampled_image_color_sample_counts: SampleCountFlags::default(),
6913            sampled_image_integer_sample_counts: SampleCountFlags::default(),
6914            sampled_image_depth_sample_counts: SampleCountFlags::default(),
6915            sampled_image_stencil_sample_counts: SampleCountFlags::default(),
6916            storage_image_sample_counts: SampleCountFlags::default(),
6917            max_sample_mask_words: u32::default(),
6918            timestamp_compute_and_graphics: Bool32::default(),
6919            timestamp_period: f32::default(),
6920            max_clip_distances: u32::default(),
6921            max_cull_distances: u32::default(),
6922            max_combined_clip_and_cull_distances: u32::default(),
6923            discrete_queue_priorities: u32::default(),
6924            point_size_range: unsafe { ::core::mem::zeroed() },
6925            line_width_range: unsafe { ::core::mem::zeroed() },
6926            point_size_granularity: f32::default(),
6927            line_width_granularity: f32::default(),
6928            strict_lines: Bool32::default(),
6929            standard_sample_locations: Bool32::default(),
6930            optimal_buffer_copy_offset_alignment: DeviceSize::default(),
6931            optimal_buffer_copy_row_pitch_alignment: DeviceSize::default(),
6932            non_coherent_atom_size: DeviceSize::default(),
6933        }
6934    }
6935}
6936impl PhysicalDeviceLimits {
6937    #[inline]
6938    pub fn max_image_dimension1_d(mut self, max_image_dimension1_d: u32) -> Self {
6939        self.max_image_dimension1_d = max_image_dimension1_d;
6940        self
6941    }
6942    #[inline]
6943    pub fn max_image_dimension2_d(mut self, max_image_dimension2_d: u32) -> Self {
6944        self.max_image_dimension2_d = max_image_dimension2_d;
6945        self
6946    }
6947    #[inline]
6948    pub fn max_image_dimension3_d(mut self, max_image_dimension3_d: u32) -> Self {
6949        self.max_image_dimension3_d = max_image_dimension3_d;
6950        self
6951    }
6952    #[inline]
6953    pub fn max_image_dimension_cube(mut self, max_image_dimension_cube: u32) -> Self {
6954        self.max_image_dimension_cube = max_image_dimension_cube;
6955        self
6956    }
6957    #[inline]
6958    pub fn max_image_array_layers(mut self, max_image_array_layers: u32) -> Self {
6959        self.max_image_array_layers = max_image_array_layers;
6960        self
6961    }
6962    #[inline]
6963    pub fn max_texel_buffer_elements(mut self, max_texel_buffer_elements: u32) -> Self {
6964        self.max_texel_buffer_elements = max_texel_buffer_elements;
6965        self
6966    }
6967    #[inline]
6968    pub fn max_uniform_buffer_range(mut self, max_uniform_buffer_range: u32) -> Self {
6969        self.max_uniform_buffer_range = max_uniform_buffer_range;
6970        self
6971    }
6972    #[inline]
6973    pub fn max_storage_buffer_range(mut self, max_storage_buffer_range: u32) -> Self {
6974        self.max_storage_buffer_range = max_storage_buffer_range;
6975        self
6976    }
6977    #[inline]
6978    pub fn max_push_constants_size(mut self, max_push_constants_size: u32) -> Self {
6979        self.max_push_constants_size = max_push_constants_size;
6980        self
6981    }
6982    #[inline]
6983    pub fn max_memory_allocation_count(mut self, max_memory_allocation_count: u32) -> Self {
6984        self.max_memory_allocation_count = max_memory_allocation_count;
6985        self
6986    }
6987    #[inline]
6988    pub fn max_sampler_allocation_count(mut self, max_sampler_allocation_count: u32) -> Self {
6989        self.max_sampler_allocation_count = max_sampler_allocation_count;
6990        self
6991    }
6992    #[inline]
6993    pub fn buffer_image_granularity(mut self, buffer_image_granularity: DeviceSize) -> Self {
6994        self.buffer_image_granularity = buffer_image_granularity;
6995        self
6996    }
6997    #[inline]
6998    pub fn sparse_address_space_size(mut self, sparse_address_space_size: DeviceSize) -> Self {
6999        self.sparse_address_space_size = sparse_address_space_size;
7000        self
7001    }
7002    #[inline]
7003    pub fn max_bound_descriptor_sets(mut self, max_bound_descriptor_sets: u32) -> Self {
7004        self.max_bound_descriptor_sets = max_bound_descriptor_sets;
7005        self
7006    }
7007    #[inline]
7008    pub fn max_per_stage_descriptor_samplers(
7009        mut self,
7010        max_per_stage_descriptor_samplers: u32,
7011    ) -> Self {
7012        self.max_per_stage_descriptor_samplers = max_per_stage_descriptor_samplers;
7013        self
7014    }
7015    #[inline]
7016    pub fn max_per_stage_descriptor_uniform_buffers(
7017        mut self,
7018        max_per_stage_descriptor_uniform_buffers: u32,
7019    ) -> Self {
7020        self.max_per_stage_descriptor_uniform_buffers = max_per_stage_descriptor_uniform_buffers;
7021        self
7022    }
7023    #[inline]
7024    pub fn max_per_stage_descriptor_storage_buffers(
7025        mut self,
7026        max_per_stage_descriptor_storage_buffers: u32,
7027    ) -> Self {
7028        self.max_per_stage_descriptor_storage_buffers = max_per_stage_descriptor_storage_buffers;
7029        self
7030    }
7031    #[inline]
7032    pub fn max_per_stage_descriptor_sampled_images(
7033        mut self,
7034        max_per_stage_descriptor_sampled_images: u32,
7035    ) -> Self {
7036        self.max_per_stage_descriptor_sampled_images = max_per_stage_descriptor_sampled_images;
7037        self
7038    }
7039    #[inline]
7040    pub fn max_per_stage_descriptor_storage_images(
7041        mut self,
7042        max_per_stage_descriptor_storage_images: u32,
7043    ) -> Self {
7044        self.max_per_stage_descriptor_storage_images = max_per_stage_descriptor_storage_images;
7045        self
7046    }
7047    #[inline]
7048    pub fn max_per_stage_descriptor_input_attachments(
7049        mut self,
7050        max_per_stage_descriptor_input_attachments: u32,
7051    ) -> Self {
7052        self.max_per_stage_descriptor_input_attachments =
7053            max_per_stage_descriptor_input_attachments;
7054        self
7055    }
7056    #[inline]
7057    pub fn max_per_stage_resources(mut self, max_per_stage_resources: u32) -> Self {
7058        self.max_per_stage_resources = max_per_stage_resources;
7059        self
7060    }
7061    #[inline]
7062    pub fn max_descriptor_set_samplers(mut self, max_descriptor_set_samplers: u32) -> Self {
7063        self.max_descriptor_set_samplers = max_descriptor_set_samplers;
7064        self
7065    }
7066    #[inline]
7067    pub fn max_descriptor_set_uniform_buffers(
7068        mut self,
7069        max_descriptor_set_uniform_buffers: u32,
7070    ) -> Self {
7071        self.max_descriptor_set_uniform_buffers = max_descriptor_set_uniform_buffers;
7072        self
7073    }
7074    #[inline]
7075    pub fn max_descriptor_set_uniform_buffers_dynamic(
7076        mut self,
7077        max_descriptor_set_uniform_buffers_dynamic: u32,
7078    ) -> Self {
7079        self.max_descriptor_set_uniform_buffers_dynamic =
7080            max_descriptor_set_uniform_buffers_dynamic;
7081        self
7082    }
7083    #[inline]
7084    pub fn max_descriptor_set_storage_buffers(
7085        mut self,
7086        max_descriptor_set_storage_buffers: u32,
7087    ) -> Self {
7088        self.max_descriptor_set_storage_buffers = max_descriptor_set_storage_buffers;
7089        self
7090    }
7091    #[inline]
7092    pub fn max_descriptor_set_storage_buffers_dynamic(
7093        mut self,
7094        max_descriptor_set_storage_buffers_dynamic: u32,
7095    ) -> Self {
7096        self.max_descriptor_set_storage_buffers_dynamic =
7097            max_descriptor_set_storage_buffers_dynamic;
7098        self
7099    }
7100    #[inline]
7101    pub fn max_descriptor_set_sampled_images(
7102        mut self,
7103        max_descriptor_set_sampled_images: u32,
7104    ) -> Self {
7105        self.max_descriptor_set_sampled_images = max_descriptor_set_sampled_images;
7106        self
7107    }
7108    #[inline]
7109    pub fn max_descriptor_set_storage_images(
7110        mut self,
7111        max_descriptor_set_storage_images: u32,
7112    ) -> Self {
7113        self.max_descriptor_set_storage_images = max_descriptor_set_storage_images;
7114        self
7115    }
7116    #[inline]
7117    pub fn max_descriptor_set_input_attachments(
7118        mut self,
7119        max_descriptor_set_input_attachments: u32,
7120    ) -> Self {
7121        self.max_descriptor_set_input_attachments = max_descriptor_set_input_attachments;
7122        self
7123    }
7124    #[inline]
7125    pub fn max_vertex_input_attributes(mut self, max_vertex_input_attributes: u32) -> Self {
7126        self.max_vertex_input_attributes = max_vertex_input_attributes;
7127        self
7128    }
7129    #[inline]
7130    pub fn max_vertex_input_bindings(mut self, max_vertex_input_bindings: u32) -> Self {
7131        self.max_vertex_input_bindings = max_vertex_input_bindings;
7132        self
7133    }
7134    #[inline]
7135    pub fn max_vertex_input_attribute_offset(
7136        mut self,
7137        max_vertex_input_attribute_offset: u32,
7138    ) -> Self {
7139        self.max_vertex_input_attribute_offset = max_vertex_input_attribute_offset;
7140        self
7141    }
7142    #[inline]
7143    pub fn max_vertex_input_binding_stride(mut self, max_vertex_input_binding_stride: u32) -> Self {
7144        self.max_vertex_input_binding_stride = max_vertex_input_binding_stride;
7145        self
7146    }
7147    #[inline]
7148    pub fn max_vertex_output_components(mut self, max_vertex_output_components: u32) -> Self {
7149        self.max_vertex_output_components = max_vertex_output_components;
7150        self
7151    }
7152    #[inline]
7153    pub fn max_tessellation_generation_level(
7154        mut self,
7155        max_tessellation_generation_level: u32,
7156    ) -> Self {
7157        self.max_tessellation_generation_level = max_tessellation_generation_level;
7158        self
7159    }
7160    #[inline]
7161    pub fn max_tessellation_patch_size(mut self, max_tessellation_patch_size: u32) -> Self {
7162        self.max_tessellation_patch_size = max_tessellation_patch_size;
7163        self
7164    }
7165    #[inline]
7166    pub fn max_tessellation_control_per_vertex_input_components(
7167        mut self,
7168        max_tessellation_control_per_vertex_input_components: u32,
7169    ) -> Self {
7170        self.max_tessellation_control_per_vertex_input_components =
7171            max_tessellation_control_per_vertex_input_components;
7172        self
7173    }
7174    #[inline]
7175    pub fn max_tessellation_control_per_vertex_output_components(
7176        mut self,
7177        max_tessellation_control_per_vertex_output_components: u32,
7178    ) -> Self {
7179        self.max_tessellation_control_per_vertex_output_components =
7180            max_tessellation_control_per_vertex_output_components;
7181        self
7182    }
7183    #[inline]
7184    pub fn max_tessellation_control_per_patch_output_components(
7185        mut self,
7186        max_tessellation_control_per_patch_output_components: u32,
7187    ) -> Self {
7188        self.max_tessellation_control_per_patch_output_components =
7189            max_tessellation_control_per_patch_output_components;
7190        self
7191    }
7192    #[inline]
7193    pub fn max_tessellation_control_total_output_components(
7194        mut self,
7195        max_tessellation_control_total_output_components: u32,
7196    ) -> Self {
7197        self.max_tessellation_control_total_output_components =
7198            max_tessellation_control_total_output_components;
7199        self
7200    }
7201    #[inline]
7202    pub fn max_tessellation_evaluation_input_components(
7203        mut self,
7204        max_tessellation_evaluation_input_components: u32,
7205    ) -> Self {
7206        self.max_tessellation_evaluation_input_components =
7207            max_tessellation_evaluation_input_components;
7208        self
7209    }
7210    #[inline]
7211    pub fn max_tessellation_evaluation_output_components(
7212        mut self,
7213        max_tessellation_evaluation_output_components: u32,
7214    ) -> Self {
7215        self.max_tessellation_evaluation_output_components =
7216            max_tessellation_evaluation_output_components;
7217        self
7218    }
7219    #[inline]
7220    pub fn max_geometry_shader_invocations(mut self, max_geometry_shader_invocations: u32) -> Self {
7221        self.max_geometry_shader_invocations = max_geometry_shader_invocations;
7222        self
7223    }
7224    #[inline]
7225    pub fn max_geometry_input_components(mut self, max_geometry_input_components: u32) -> Self {
7226        self.max_geometry_input_components = max_geometry_input_components;
7227        self
7228    }
7229    #[inline]
7230    pub fn max_geometry_output_components(mut self, max_geometry_output_components: u32) -> Self {
7231        self.max_geometry_output_components = max_geometry_output_components;
7232        self
7233    }
7234    #[inline]
7235    pub fn max_geometry_output_vertices(mut self, max_geometry_output_vertices: u32) -> Self {
7236        self.max_geometry_output_vertices = max_geometry_output_vertices;
7237        self
7238    }
7239    #[inline]
7240    pub fn max_geometry_total_output_components(
7241        mut self,
7242        max_geometry_total_output_components: u32,
7243    ) -> Self {
7244        self.max_geometry_total_output_components = max_geometry_total_output_components;
7245        self
7246    }
7247    #[inline]
7248    pub fn max_fragment_input_components(mut self, max_fragment_input_components: u32) -> Self {
7249        self.max_fragment_input_components = max_fragment_input_components;
7250        self
7251    }
7252    #[inline]
7253    pub fn max_fragment_output_attachments(mut self, max_fragment_output_attachments: u32) -> Self {
7254        self.max_fragment_output_attachments = max_fragment_output_attachments;
7255        self
7256    }
7257    #[inline]
7258    pub fn max_fragment_dual_src_attachments(
7259        mut self,
7260        max_fragment_dual_src_attachments: u32,
7261    ) -> Self {
7262        self.max_fragment_dual_src_attachments = max_fragment_dual_src_attachments;
7263        self
7264    }
7265    #[inline]
7266    pub fn max_fragment_combined_output_resources(
7267        mut self,
7268        max_fragment_combined_output_resources: u32,
7269    ) -> Self {
7270        self.max_fragment_combined_output_resources = max_fragment_combined_output_resources;
7271        self
7272    }
7273    #[inline]
7274    pub fn max_compute_shared_memory_size(mut self, max_compute_shared_memory_size: u32) -> Self {
7275        self.max_compute_shared_memory_size = max_compute_shared_memory_size;
7276        self
7277    }
7278    #[inline]
7279    pub fn max_compute_work_group_count(mut self, max_compute_work_group_count: [u32; 3]) -> Self {
7280        self.max_compute_work_group_count = max_compute_work_group_count;
7281        self
7282    }
7283    #[inline]
7284    pub fn max_compute_work_group_invocations(
7285        mut self,
7286        max_compute_work_group_invocations: u32,
7287    ) -> Self {
7288        self.max_compute_work_group_invocations = max_compute_work_group_invocations;
7289        self
7290    }
7291    #[inline]
7292    pub fn max_compute_work_group_size(mut self, max_compute_work_group_size: [u32; 3]) -> Self {
7293        self.max_compute_work_group_size = max_compute_work_group_size;
7294        self
7295    }
7296    #[inline]
7297    pub fn sub_pixel_precision_bits(mut self, sub_pixel_precision_bits: u32) -> Self {
7298        self.sub_pixel_precision_bits = sub_pixel_precision_bits;
7299        self
7300    }
7301    #[inline]
7302    pub fn sub_texel_precision_bits(mut self, sub_texel_precision_bits: u32) -> Self {
7303        self.sub_texel_precision_bits = sub_texel_precision_bits;
7304        self
7305    }
7306    #[inline]
7307    pub fn mipmap_precision_bits(mut self, mipmap_precision_bits: u32) -> Self {
7308        self.mipmap_precision_bits = mipmap_precision_bits;
7309        self
7310    }
7311    #[inline]
7312    pub fn max_draw_indexed_index_value(mut self, max_draw_indexed_index_value: u32) -> Self {
7313        self.max_draw_indexed_index_value = max_draw_indexed_index_value;
7314        self
7315    }
7316    #[inline]
7317    pub fn max_draw_indirect_count(mut self, max_draw_indirect_count: u32) -> Self {
7318        self.max_draw_indirect_count = max_draw_indirect_count;
7319        self
7320    }
7321    #[inline]
7322    pub fn max_sampler_lod_bias(mut self, max_sampler_lod_bias: f32) -> Self {
7323        self.max_sampler_lod_bias = max_sampler_lod_bias;
7324        self
7325    }
7326    #[inline]
7327    pub fn max_sampler_anisotropy(mut self, max_sampler_anisotropy: f32) -> Self {
7328        self.max_sampler_anisotropy = max_sampler_anisotropy;
7329        self
7330    }
7331    #[inline]
7332    pub fn max_viewports(mut self, max_viewports: u32) -> Self {
7333        self.max_viewports = max_viewports;
7334        self
7335    }
7336    #[inline]
7337    pub fn max_viewport_dimensions(mut self, max_viewport_dimensions: [u32; 2]) -> Self {
7338        self.max_viewport_dimensions = max_viewport_dimensions;
7339        self
7340    }
7341    #[inline]
7342    pub fn viewport_bounds_range(mut self, viewport_bounds_range: [f32; 2]) -> Self {
7343        self.viewport_bounds_range = viewport_bounds_range;
7344        self
7345    }
7346    #[inline]
7347    pub fn viewport_sub_pixel_bits(mut self, viewport_sub_pixel_bits: u32) -> Self {
7348        self.viewport_sub_pixel_bits = viewport_sub_pixel_bits;
7349        self
7350    }
7351    #[inline]
7352    pub fn min_memory_map_alignment(mut self, min_memory_map_alignment: usize) -> Self {
7353        self.min_memory_map_alignment = min_memory_map_alignment;
7354        self
7355    }
7356    #[inline]
7357    pub fn min_texel_buffer_offset_alignment(
7358        mut self,
7359        min_texel_buffer_offset_alignment: DeviceSize,
7360    ) -> Self {
7361        self.min_texel_buffer_offset_alignment = min_texel_buffer_offset_alignment;
7362        self
7363    }
7364    #[inline]
7365    pub fn min_uniform_buffer_offset_alignment(
7366        mut self,
7367        min_uniform_buffer_offset_alignment: DeviceSize,
7368    ) -> Self {
7369        self.min_uniform_buffer_offset_alignment = min_uniform_buffer_offset_alignment;
7370        self
7371    }
7372    #[inline]
7373    pub fn min_storage_buffer_offset_alignment(
7374        mut self,
7375        min_storage_buffer_offset_alignment: DeviceSize,
7376    ) -> Self {
7377        self.min_storage_buffer_offset_alignment = min_storage_buffer_offset_alignment;
7378        self
7379    }
7380    #[inline]
7381    pub fn min_texel_offset(mut self, min_texel_offset: i32) -> Self {
7382        self.min_texel_offset = min_texel_offset;
7383        self
7384    }
7385    #[inline]
7386    pub fn max_texel_offset(mut self, max_texel_offset: u32) -> Self {
7387        self.max_texel_offset = max_texel_offset;
7388        self
7389    }
7390    #[inline]
7391    pub fn min_texel_gather_offset(mut self, min_texel_gather_offset: i32) -> Self {
7392        self.min_texel_gather_offset = min_texel_gather_offset;
7393        self
7394    }
7395    #[inline]
7396    pub fn max_texel_gather_offset(mut self, max_texel_gather_offset: u32) -> Self {
7397        self.max_texel_gather_offset = max_texel_gather_offset;
7398        self
7399    }
7400    #[inline]
7401    pub fn min_interpolation_offset(mut self, min_interpolation_offset: f32) -> Self {
7402        self.min_interpolation_offset = min_interpolation_offset;
7403        self
7404    }
7405    #[inline]
7406    pub fn max_interpolation_offset(mut self, max_interpolation_offset: f32) -> Self {
7407        self.max_interpolation_offset = max_interpolation_offset;
7408        self
7409    }
7410    #[inline]
7411    pub fn sub_pixel_interpolation_offset_bits(
7412        mut self,
7413        sub_pixel_interpolation_offset_bits: u32,
7414    ) -> Self {
7415        self.sub_pixel_interpolation_offset_bits = sub_pixel_interpolation_offset_bits;
7416        self
7417    }
7418    #[inline]
7419    pub fn max_framebuffer_width(mut self, max_framebuffer_width: u32) -> Self {
7420        self.max_framebuffer_width = max_framebuffer_width;
7421        self
7422    }
7423    #[inline]
7424    pub fn max_framebuffer_height(mut self, max_framebuffer_height: u32) -> Self {
7425        self.max_framebuffer_height = max_framebuffer_height;
7426        self
7427    }
7428    #[inline]
7429    pub fn max_framebuffer_layers(mut self, max_framebuffer_layers: u32) -> Self {
7430        self.max_framebuffer_layers = max_framebuffer_layers;
7431        self
7432    }
7433    #[inline]
7434    pub fn framebuffer_color_sample_counts(
7435        mut self,
7436        framebuffer_color_sample_counts: SampleCountFlags,
7437    ) -> Self {
7438        self.framebuffer_color_sample_counts = framebuffer_color_sample_counts;
7439        self
7440    }
7441    #[inline]
7442    pub fn framebuffer_depth_sample_counts(
7443        mut self,
7444        framebuffer_depth_sample_counts: SampleCountFlags,
7445    ) -> Self {
7446        self.framebuffer_depth_sample_counts = framebuffer_depth_sample_counts;
7447        self
7448    }
7449    #[inline]
7450    pub fn framebuffer_stencil_sample_counts(
7451        mut self,
7452        framebuffer_stencil_sample_counts: SampleCountFlags,
7453    ) -> Self {
7454        self.framebuffer_stencil_sample_counts = framebuffer_stencil_sample_counts;
7455        self
7456    }
7457    #[inline]
7458    pub fn framebuffer_no_attachments_sample_counts(
7459        mut self,
7460        framebuffer_no_attachments_sample_counts: SampleCountFlags,
7461    ) -> Self {
7462        self.framebuffer_no_attachments_sample_counts = framebuffer_no_attachments_sample_counts;
7463        self
7464    }
7465    #[inline]
7466    pub fn max_color_attachments(mut self, max_color_attachments: u32) -> Self {
7467        self.max_color_attachments = max_color_attachments;
7468        self
7469    }
7470    #[inline]
7471    pub fn sampled_image_color_sample_counts(
7472        mut self,
7473        sampled_image_color_sample_counts: SampleCountFlags,
7474    ) -> Self {
7475        self.sampled_image_color_sample_counts = sampled_image_color_sample_counts;
7476        self
7477    }
7478    #[inline]
7479    pub fn sampled_image_integer_sample_counts(
7480        mut self,
7481        sampled_image_integer_sample_counts: SampleCountFlags,
7482    ) -> Self {
7483        self.sampled_image_integer_sample_counts = sampled_image_integer_sample_counts;
7484        self
7485    }
7486    #[inline]
7487    pub fn sampled_image_depth_sample_counts(
7488        mut self,
7489        sampled_image_depth_sample_counts: SampleCountFlags,
7490    ) -> Self {
7491        self.sampled_image_depth_sample_counts = sampled_image_depth_sample_counts;
7492        self
7493    }
7494    #[inline]
7495    pub fn sampled_image_stencil_sample_counts(
7496        mut self,
7497        sampled_image_stencil_sample_counts: SampleCountFlags,
7498    ) -> Self {
7499        self.sampled_image_stencil_sample_counts = sampled_image_stencil_sample_counts;
7500        self
7501    }
7502    #[inline]
7503    pub fn storage_image_sample_counts(
7504        mut self,
7505        storage_image_sample_counts: SampleCountFlags,
7506    ) -> Self {
7507        self.storage_image_sample_counts = storage_image_sample_counts;
7508        self
7509    }
7510    #[inline]
7511    pub fn max_sample_mask_words(mut self, max_sample_mask_words: u32) -> Self {
7512        self.max_sample_mask_words = max_sample_mask_words;
7513        self
7514    }
7515    #[inline]
7516    pub fn timestamp_compute_and_graphics(mut self, timestamp_compute_and_graphics: bool) -> Self {
7517        self.timestamp_compute_and_graphics = timestamp_compute_and_graphics.into();
7518        self
7519    }
7520    #[inline]
7521    pub fn timestamp_period(mut self, timestamp_period: f32) -> Self {
7522        self.timestamp_period = timestamp_period;
7523        self
7524    }
7525    #[inline]
7526    pub fn max_clip_distances(mut self, max_clip_distances: u32) -> Self {
7527        self.max_clip_distances = max_clip_distances;
7528        self
7529    }
7530    #[inline]
7531    pub fn max_cull_distances(mut self, max_cull_distances: u32) -> Self {
7532        self.max_cull_distances = max_cull_distances;
7533        self
7534    }
7535    #[inline]
7536    pub fn max_combined_clip_and_cull_distances(
7537        mut self,
7538        max_combined_clip_and_cull_distances: u32,
7539    ) -> Self {
7540        self.max_combined_clip_and_cull_distances = max_combined_clip_and_cull_distances;
7541        self
7542    }
7543    #[inline]
7544    pub fn discrete_queue_priorities(mut self, discrete_queue_priorities: u32) -> Self {
7545        self.discrete_queue_priorities = discrete_queue_priorities;
7546        self
7547    }
7548    #[inline]
7549    pub fn point_size_range(mut self, point_size_range: [f32; 2]) -> Self {
7550        self.point_size_range = point_size_range;
7551        self
7552    }
7553    #[inline]
7554    pub fn line_width_range(mut self, line_width_range: [f32; 2]) -> Self {
7555        self.line_width_range = line_width_range;
7556        self
7557    }
7558    #[inline]
7559    pub fn point_size_granularity(mut self, point_size_granularity: f32) -> Self {
7560        self.point_size_granularity = point_size_granularity;
7561        self
7562    }
7563    #[inline]
7564    pub fn line_width_granularity(mut self, line_width_granularity: f32) -> Self {
7565        self.line_width_granularity = line_width_granularity;
7566        self
7567    }
7568    #[inline]
7569    pub fn strict_lines(mut self, strict_lines: bool) -> Self {
7570        self.strict_lines = strict_lines.into();
7571        self
7572    }
7573    #[inline]
7574    pub fn standard_sample_locations(mut self, standard_sample_locations: bool) -> Self {
7575        self.standard_sample_locations = standard_sample_locations.into();
7576        self
7577    }
7578    #[inline]
7579    pub fn optimal_buffer_copy_offset_alignment(
7580        mut self,
7581        optimal_buffer_copy_offset_alignment: DeviceSize,
7582    ) -> Self {
7583        self.optimal_buffer_copy_offset_alignment = optimal_buffer_copy_offset_alignment;
7584        self
7585    }
7586    #[inline]
7587    pub fn optimal_buffer_copy_row_pitch_alignment(
7588        mut self,
7589        optimal_buffer_copy_row_pitch_alignment: DeviceSize,
7590    ) -> Self {
7591        self.optimal_buffer_copy_row_pitch_alignment = optimal_buffer_copy_row_pitch_alignment;
7592        self
7593    }
7594    #[inline]
7595    pub fn non_coherent_atom_size(mut self, non_coherent_atom_size: DeviceSize) -> Self {
7596        self.non_coherent_atom_size = non_coherent_atom_size;
7597        self
7598    }
7599}
7600#[repr(C)]
7601#[cfg_attr(feature = "debug", derive(Debug))]
7602#[derive(Copy, Clone)]
7603#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreCreateInfo.html>"]
7604#[must_use]
7605pub struct SemaphoreCreateInfo<'a> {
7606    pub s_type: StructureType,
7607    pub p_next: *const c_void,
7608    pub flags: SemaphoreCreateFlags,
7609    pub _marker: PhantomData<&'a ()>,
7610}
7611unsafe impl Send for SemaphoreCreateInfo<'_> {}
7612unsafe impl Sync for SemaphoreCreateInfo<'_> {}
7613impl ::core::default::Default for SemaphoreCreateInfo<'_> {
7614    #[inline]
7615    fn default() -> Self {
7616        Self {
7617            s_type: Self::STRUCTURE_TYPE,
7618            p_next: ::core::ptr::null(),
7619            flags: SemaphoreCreateFlags::default(),
7620            _marker: PhantomData,
7621        }
7622    }
7623}
7624unsafe impl<'a> TaggedStructure for SemaphoreCreateInfo<'a> {
7625    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_CREATE_INFO;
7626}
7627pub unsafe trait ExtendsSemaphoreCreateInfo {}
7628impl<'a> SemaphoreCreateInfo<'a> {
7629    #[inline]
7630    pub fn flags(mut self, flags: SemaphoreCreateFlags) -> Self {
7631        self.flags = flags;
7632        self
7633    }
7634    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
7635    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
7636    #[doc = r" valid extension structs can be pushed into the chain."]
7637    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
7638    #[doc = r" chain will look like `A -> D -> B -> C`."]
7639    pub fn push_next<T: ExtendsSemaphoreCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
7640        unsafe {
7641            let next_ptr = <*const T>::cast(next);
7642            let last_next = ptr_chain_iter(next).last().unwrap();
7643            (*last_next).p_next = self.p_next as _;
7644            self.p_next = next_ptr;
7645        }
7646        self
7647    }
7648}
7649#[repr(C)]
7650#[cfg_attr(feature = "debug", derive(Debug))]
7651#[derive(Copy, Clone)]
7652#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPoolCreateInfo.html>"]
7653#[must_use]
7654pub struct QueryPoolCreateInfo<'a> {
7655    pub s_type: StructureType,
7656    pub p_next: *const c_void,
7657    pub flags: QueryPoolCreateFlags,
7658    pub query_type: QueryType,
7659    pub query_count: u32,
7660    pub pipeline_statistics: QueryPipelineStatisticFlags,
7661    pub _marker: PhantomData<&'a ()>,
7662}
7663unsafe impl Send for QueryPoolCreateInfo<'_> {}
7664unsafe impl Sync for QueryPoolCreateInfo<'_> {}
7665impl ::core::default::Default for QueryPoolCreateInfo<'_> {
7666    #[inline]
7667    fn default() -> Self {
7668        Self {
7669            s_type: Self::STRUCTURE_TYPE,
7670            p_next: ::core::ptr::null(),
7671            flags: QueryPoolCreateFlags::default(),
7672            query_type: QueryType::default(),
7673            query_count: u32::default(),
7674            pipeline_statistics: QueryPipelineStatisticFlags::default(),
7675            _marker: PhantomData,
7676        }
7677    }
7678}
7679unsafe impl<'a> TaggedStructure for QueryPoolCreateInfo<'a> {
7680    const STRUCTURE_TYPE: StructureType = StructureType::QUERY_POOL_CREATE_INFO;
7681}
7682pub unsafe trait ExtendsQueryPoolCreateInfo {}
7683impl<'a> QueryPoolCreateInfo<'a> {
7684    #[inline]
7685    pub fn flags(mut self, flags: QueryPoolCreateFlags) -> Self {
7686        self.flags = flags;
7687        self
7688    }
7689    #[inline]
7690    pub fn query_type(mut self, query_type: QueryType) -> Self {
7691        self.query_type = query_type;
7692        self
7693    }
7694    #[inline]
7695    pub fn query_count(mut self, query_count: u32) -> Self {
7696        self.query_count = query_count;
7697        self
7698    }
7699    #[inline]
7700    pub fn pipeline_statistics(mut self, pipeline_statistics: QueryPipelineStatisticFlags) -> Self {
7701        self.pipeline_statistics = pipeline_statistics;
7702        self
7703    }
7704    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
7705    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
7706    #[doc = r" valid extension structs can be pushed into the chain."]
7707    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
7708    #[doc = r" chain will look like `A -> D -> B -> C`."]
7709    pub fn push_next<T: ExtendsQueryPoolCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
7710        unsafe {
7711            let next_ptr = <*const T>::cast(next);
7712            let last_next = ptr_chain_iter(next).last().unwrap();
7713            (*last_next).p_next = self.p_next as _;
7714            self.p_next = next_ptr;
7715        }
7716        self
7717    }
7718}
7719#[repr(C)]
7720#[cfg_attr(feature = "debug", derive(Debug))]
7721#[derive(Copy, Clone)]
7722#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFramebufferCreateInfo.html>"]
7723#[must_use]
7724pub struct FramebufferCreateInfo<'a> {
7725    pub s_type: StructureType,
7726    pub p_next: *const c_void,
7727    pub flags: FramebufferCreateFlags,
7728    pub render_pass: RenderPass,
7729    pub attachment_count: u32,
7730    pub p_attachments: *const ImageView,
7731    pub width: u32,
7732    pub height: u32,
7733    pub layers: u32,
7734    pub _marker: PhantomData<&'a ()>,
7735}
7736unsafe impl Send for FramebufferCreateInfo<'_> {}
7737unsafe impl Sync for FramebufferCreateInfo<'_> {}
7738impl ::core::default::Default for FramebufferCreateInfo<'_> {
7739    #[inline]
7740    fn default() -> Self {
7741        Self {
7742            s_type: Self::STRUCTURE_TYPE,
7743            p_next: ::core::ptr::null(),
7744            flags: FramebufferCreateFlags::default(),
7745            render_pass: RenderPass::default(),
7746            attachment_count: u32::default(),
7747            p_attachments: ::core::ptr::null(),
7748            width: u32::default(),
7749            height: u32::default(),
7750            layers: u32::default(),
7751            _marker: PhantomData,
7752        }
7753    }
7754}
7755unsafe impl<'a> TaggedStructure for FramebufferCreateInfo<'a> {
7756    const STRUCTURE_TYPE: StructureType = StructureType::FRAMEBUFFER_CREATE_INFO;
7757}
7758pub unsafe trait ExtendsFramebufferCreateInfo {}
7759impl<'a> FramebufferCreateInfo<'a> {
7760    #[inline]
7761    pub fn flags(mut self, flags: FramebufferCreateFlags) -> Self {
7762        self.flags = flags;
7763        self
7764    }
7765    #[inline]
7766    pub fn render_pass(mut self, render_pass: RenderPass) -> Self {
7767        self.render_pass = render_pass;
7768        self
7769    }
7770    #[inline]
7771    pub fn attachment_count(mut self, attachment_count: u32) -> Self {
7772        self.attachment_count = attachment_count;
7773        self
7774    }
7775    #[inline]
7776    pub fn attachments(mut self, attachments: &'a [ImageView]) -> Self {
7777        self.attachment_count = attachments.len() as _;
7778        self.p_attachments = attachments.as_ptr();
7779        self
7780    }
7781    #[inline]
7782    pub fn width(mut self, width: u32) -> Self {
7783        self.width = width;
7784        self
7785    }
7786    #[inline]
7787    pub fn height(mut self, height: u32) -> Self {
7788        self.height = height;
7789        self
7790    }
7791    #[inline]
7792    pub fn layers(mut self, layers: u32) -> Self {
7793        self.layers = layers;
7794        self
7795    }
7796    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
7797    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
7798    #[doc = r" valid extension structs can be pushed into the chain."]
7799    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
7800    #[doc = r" chain will look like `A -> D -> B -> C`."]
7801    pub fn push_next<T: ExtendsFramebufferCreateInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
7802        unsafe {
7803            let next_ptr = <*const T>::cast(next);
7804            let last_next = ptr_chain_iter(next).last().unwrap();
7805            (*last_next).p_next = self.p_next as _;
7806            self.p_next = next_ptr;
7807        }
7808        self
7809    }
7810}
7811#[repr(C)]
7812#[cfg_attr(feature = "debug", derive(Debug))]
7813#[derive(Copy, Clone, Default)]
7814#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawIndirectCommand.html>"]
7815#[must_use]
7816pub struct DrawIndirectCommand {
7817    pub vertex_count: u32,
7818    pub instance_count: u32,
7819    pub first_vertex: u32,
7820    pub first_instance: u32,
7821}
7822impl DrawIndirectCommand {
7823    #[inline]
7824    pub fn vertex_count(mut self, vertex_count: u32) -> Self {
7825        self.vertex_count = vertex_count;
7826        self
7827    }
7828    #[inline]
7829    pub fn instance_count(mut self, instance_count: u32) -> Self {
7830        self.instance_count = instance_count;
7831        self
7832    }
7833    #[inline]
7834    pub fn first_vertex(mut self, first_vertex: u32) -> Self {
7835        self.first_vertex = first_vertex;
7836        self
7837    }
7838    #[inline]
7839    pub fn first_instance(mut self, first_instance: u32) -> Self {
7840        self.first_instance = first_instance;
7841        self
7842    }
7843}
7844#[repr(C)]
7845#[cfg_attr(feature = "debug", derive(Debug))]
7846#[derive(Copy, Clone, Default)]
7847#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawIndexedIndirectCommand.html>"]
7848#[must_use]
7849pub struct DrawIndexedIndirectCommand {
7850    pub index_count: u32,
7851    pub instance_count: u32,
7852    pub first_index: u32,
7853    pub vertex_offset: i32,
7854    pub first_instance: u32,
7855}
7856impl DrawIndexedIndirectCommand {
7857    #[inline]
7858    pub fn index_count(mut self, index_count: u32) -> Self {
7859        self.index_count = index_count;
7860        self
7861    }
7862    #[inline]
7863    pub fn instance_count(mut self, instance_count: u32) -> Self {
7864        self.instance_count = instance_count;
7865        self
7866    }
7867    #[inline]
7868    pub fn first_index(mut self, first_index: u32) -> Self {
7869        self.first_index = first_index;
7870        self
7871    }
7872    #[inline]
7873    pub fn vertex_offset(mut self, vertex_offset: i32) -> Self {
7874        self.vertex_offset = vertex_offset;
7875        self
7876    }
7877    #[inline]
7878    pub fn first_instance(mut self, first_instance: u32) -> Self {
7879        self.first_instance = first_instance;
7880        self
7881    }
7882}
7883#[repr(C)]
7884#[cfg_attr(feature = "debug", derive(Debug))]
7885#[derive(Copy, Clone, Default)]
7886#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDispatchIndirectCommand.html>"]
7887#[must_use]
7888pub struct DispatchIndirectCommand {
7889    pub x: u32,
7890    pub y: u32,
7891    pub z: u32,
7892}
7893impl DispatchIndirectCommand {
7894    #[inline]
7895    pub fn x(mut self, x: u32) -> Self {
7896        self.x = x;
7897        self
7898    }
7899    #[inline]
7900    pub fn y(mut self, y: u32) -> Self {
7901        self.y = y;
7902        self
7903    }
7904    #[inline]
7905    pub fn z(mut self, z: u32) -> Self {
7906        self.z = z;
7907        self
7908    }
7909}
7910#[repr(C)]
7911#[cfg_attr(feature = "debug", derive(Debug))]
7912#[derive(Copy, Clone, Default)]
7913#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultiDrawInfoEXT.html>"]
7914#[must_use]
7915pub struct MultiDrawInfoEXT {
7916    pub first_vertex: u32,
7917    pub vertex_count: u32,
7918}
7919impl MultiDrawInfoEXT {
7920    #[inline]
7921    pub fn first_vertex(mut self, first_vertex: u32) -> Self {
7922        self.first_vertex = first_vertex;
7923        self
7924    }
7925    #[inline]
7926    pub fn vertex_count(mut self, vertex_count: u32) -> Self {
7927        self.vertex_count = vertex_count;
7928        self
7929    }
7930}
7931#[repr(C)]
7932#[cfg_attr(feature = "debug", derive(Debug))]
7933#[derive(Copy, Clone, Default)]
7934#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultiDrawIndexedInfoEXT.html>"]
7935#[must_use]
7936pub struct MultiDrawIndexedInfoEXT {
7937    pub first_index: u32,
7938    pub index_count: u32,
7939    pub vertex_offset: i32,
7940}
7941impl MultiDrawIndexedInfoEXT {
7942    #[inline]
7943    pub fn first_index(mut self, first_index: u32) -> Self {
7944        self.first_index = first_index;
7945        self
7946    }
7947    #[inline]
7948    pub fn index_count(mut self, index_count: u32) -> Self {
7949        self.index_count = index_count;
7950        self
7951    }
7952    #[inline]
7953    pub fn vertex_offset(mut self, vertex_offset: i32) -> Self {
7954        self.vertex_offset = vertex_offset;
7955        self
7956    }
7957}
7958#[repr(C)]
7959#[cfg_attr(feature = "debug", derive(Debug))]
7960#[derive(Copy, Clone)]
7961#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubmitInfo.html>"]
7962#[must_use]
7963pub struct SubmitInfo<'a> {
7964    pub s_type: StructureType,
7965    pub p_next: *const c_void,
7966    pub wait_semaphore_count: u32,
7967    pub p_wait_semaphores: *const Semaphore,
7968    pub p_wait_dst_stage_mask: *const PipelineStageFlags,
7969    pub command_buffer_count: u32,
7970    pub p_command_buffers: *const CommandBuffer,
7971    pub signal_semaphore_count: u32,
7972    pub p_signal_semaphores: *const Semaphore,
7973    pub _marker: PhantomData<&'a ()>,
7974}
7975unsafe impl Send for SubmitInfo<'_> {}
7976unsafe impl Sync for SubmitInfo<'_> {}
7977impl ::core::default::Default for SubmitInfo<'_> {
7978    #[inline]
7979    fn default() -> Self {
7980        Self {
7981            s_type: Self::STRUCTURE_TYPE,
7982            p_next: ::core::ptr::null(),
7983            wait_semaphore_count: u32::default(),
7984            p_wait_semaphores: ::core::ptr::null(),
7985            p_wait_dst_stage_mask: ::core::ptr::null(),
7986            command_buffer_count: u32::default(),
7987            p_command_buffers: ::core::ptr::null(),
7988            signal_semaphore_count: u32::default(),
7989            p_signal_semaphores: ::core::ptr::null(),
7990            _marker: PhantomData,
7991        }
7992    }
7993}
7994unsafe impl<'a> TaggedStructure for SubmitInfo<'a> {
7995    const STRUCTURE_TYPE: StructureType = StructureType::SUBMIT_INFO;
7996}
7997pub unsafe trait ExtendsSubmitInfo {}
7998impl<'a> SubmitInfo<'a> {
7999    #[inline]
8000    pub fn wait_semaphores(mut self, wait_semaphores: &'a [Semaphore]) -> Self {
8001        self.wait_semaphore_count = wait_semaphores.len() as _;
8002        self.p_wait_semaphores = wait_semaphores.as_ptr();
8003        self
8004    }
8005    #[inline]
8006    pub fn wait_dst_stage_mask(mut self, wait_dst_stage_mask: &'a [PipelineStageFlags]) -> Self {
8007        self.wait_semaphore_count = wait_dst_stage_mask.len() as _;
8008        self.p_wait_dst_stage_mask = wait_dst_stage_mask.as_ptr();
8009        self
8010    }
8011    #[inline]
8012    pub fn command_buffers(mut self, command_buffers: &'a [CommandBuffer]) -> Self {
8013        self.command_buffer_count = command_buffers.len() as _;
8014        self.p_command_buffers = command_buffers.as_ptr();
8015        self
8016    }
8017    #[inline]
8018    pub fn signal_semaphores(mut self, signal_semaphores: &'a [Semaphore]) -> Self {
8019        self.signal_semaphore_count = signal_semaphores.len() as _;
8020        self.p_signal_semaphores = signal_semaphores.as_ptr();
8021        self
8022    }
8023    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
8024    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
8025    #[doc = r" valid extension structs can be pushed into the chain."]
8026    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
8027    #[doc = r" chain will look like `A -> D -> B -> C`."]
8028    pub fn push_next<T: ExtendsSubmitInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
8029        unsafe {
8030            let next_ptr = <*const T>::cast(next);
8031            let last_next = ptr_chain_iter(next).last().unwrap();
8032            (*last_next).p_next = self.p_next as _;
8033            self.p_next = next_ptr;
8034        }
8035        self
8036    }
8037}
8038#[repr(C)]
8039#[cfg_attr(feature = "debug", derive(Debug))]
8040#[derive(Copy, Clone)]
8041#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPropertiesKHR.html>"]
8042#[must_use]
8043pub struct DisplayPropertiesKHR<'a> {
8044    pub display: DisplayKHR,
8045    pub display_name: *const c_char,
8046    pub physical_dimensions: Extent2D,
8047    pub physical_resolution: Extent2D,
8048    pub supported_transforms: SurfaceTransformFlagsKHR,
8049    pub plane_reorder_possible: Bool32,
8050    pub persistent_content: Bool32,
8051    pub _marker: PhantomData<&'a ()>,
8052}
8053unsafe impl Send for DisplayPropertiesKHR<'_> {}
8054unsafe impl Sync for DisplayPropertiesKHR<'_> {}
8055impl ::core::default::Default for DisplayPropertiesKHR<'_> {
8056    #[inline]
8057    fn default() -> Self {
8058        Self {
8059            display: DisplayKHR::default(),
8060            display_name: ::core::ptr::null(),
8061            physical_dimensions: Extent2D::default(),
8062            physical_resolution: Extent2D::default(),
8063            supported_transforms: SurfaceTransformFlagsKHR::default(),
8064            plane_reorder_possible: Bool32::default(),
8065            persistent_content: Bool32::default(),
8066            _marker: PhantomData,
8067        }
8068    }
8069}
8070impl<'a> DisplayPropertiesKHR<'a> {
8071    #[inline]
8072    pub fn display(mut self, display: DisplayKHR) -> Self {
8073        self.display = display;
8074        self
8075    }
8076    #[inline]
8077    pub fn display_name(mut self, display_name: &'a CStr) -> Self {
8078        self.display_name = display_name.as_ptr();
8079        self
8080    }
8081    #[inline]
8082    pub unsafe fn display_name_as_c_str(&self) -> Option<&CStr> {
8083        if self.display_name.is_null() {
8084            None
8085        } else {
8086            Some(CStr::from_ptr(self.display_name))
8087        }
8088    }
8089    #[inline]
8090    pub fn physical_dimensions(mut self, physical_dimensions: Extent2D) -> Self {
8091        self.physical_dimensions = physical_dimensions;
8092        self
8093    }
8094    #[inline]
8095    pub fn physical_resolution(mut self, physical_resolution: Extent2D) -> Self {
8096        self.physical_resolution = physical_resolution;
8097        self
8098    }
8099    #[inline]
8100    pub fn supported_transforms(mut self, supported_transforms: SurfaceTransformFlagsKHR) -> Self {
8101        self.supported_transforms = supported_transforms;
8102        self
8103    }
8104    #[inline]
8105    pub fn plane_reorder_possible(mut self, plane_reorder_possible: bool) -> Self {
8106        self.plane_reorder_possible = plane_reorder_possible.into();
8107        self
8108    }
8109    #[inline]
8110    pub fn persistent_content(mut self, persistent_content: bool) -> Self {
8111        self.persistent_content = persistent_content.into();
8112        self
8113    }
8114}
8115#[repr(C)]
8116#[cfg_attr(feature = "debug", derive(Debug))]
8117#[derive(Copy, Clone, Default)]
8118#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPlanePropertiesKHR.html>"]
8119#[must_use]
8120pub struct DisplayPlanePropertiesKHR {
8121    pub current_display: DisplayKHR,
8122    pub current_stack_index: u32,
8123}
8124impl DisplayPlanePropertiesKHR {
8125    #[inline]
8126    pub fn current_display(mut self, current_display: DisplayKHR) -> Self {
8127        self.current_display = current_display;
8128        self
8129    }
8130    #[inline]
8131    pub fn current_stack_index(mut self, current_stack_index: u32) -> Self {
8132        self.current_stack_index = current_stack_index;
8133        self
8134    }
8135}
8136#[repr(C)]
8137#[cfg_attr(feature = "debug", derive(Debug))]
8138#[derive(Copy, Clone, Default)]
8139#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModeParametersKHR.html>"]
8140#[must_use]
8141pub struct DisplayModeParametersKHR {
8142    pub visible_region: Extent2D,
8143    pub refresh_rate: u32,
8144}
8145impl DisplayModeParametersKHR {
8146    #[inline]
8147    pub fn visible_region(mut self, visible_region: Extent2D) -> Self {
8148        self.visible_region = visible_region;
8149        self
8150    }
8151    #[inline]
8152    pub fn refresh_rate(mut self, refresh_rate: u32) -> Self {
8153        self.refresh_rate = refresh_rate;
8154        self
8155    }
8156}
8157#[repr(C)]
8158#[cfg_attr(feature = "debug", derive(Debug))]
8159#[derive(Copy, Clone, Default)]
8160#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModePropertiesKHR.html>"]
8161#[must_use]
8162pub struct DisplayModePropertiesKHR {
8163    pub display_mode: DisplayModeKHR,
8164    pub parameters: DisplayModeParametersKHR,
8165}
8166impl DisplayModePropertiesKHR {
8167    #[inline]
8168    pub fn display_mode(mut self, display_mode: DisplayModeKHR) -> Self {
8169        self.display_mode = display_mode;
8170        self
8171    }
8172    #[inline]
8173    pub fn parameters(mut self, parameters: DisplayModeParametersKHR) -> Self {
8174        self.parameters = parameters;
8175        self
8176    }
8177}
8178#[repr(C)]
8179#[cfg_attr(feature = "debug", derive(Debug))]
8180#[derive(Copy, Clone)]
8181#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModeCreateInfoKHR.html>"]
8182#[must_use]
8183pub struct DisplayModeCreateInfoKHR<'a> {
8184    pub s_type: StructureType,
8185    pub p_next: *const c_void,
8186    pub flags: DisplayModeCreateFlagsKHR,
8187    pub parameters: DisplayModeParametersKHR,
8188    pub _marker: PhantomData<&'a ()>,
8189}
8190unsafe impl Send for DisplayModeCreateInfoKHR<'_> {}
8191unsafe impl Sync for DisplayModeCreateInfoKHR<'_> {}
8192impl ::core::default::Default for DisplayModeCreateInfoKHR<'_> {
8193    #[inline]
8194    fn default() -> Self {
8195        Self {
8196            s_type: Self::STRUCTURE_TYPE,
8197            p_next: ::core::ptr::null(),
8198            flags: DisplayModeCreateFlagsKHR::default(),
8199            parameters: DisplayModeParametersKHR::default(),
8200            _marker: PhantomData,
8201        }
8202    }
8203}
8204unsafe impl<'a> TaggedStructure for DisplayModeCreateInfoKHR<'a> {
8205    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_MODE_CREATE_INFO_KHR;
8206}
8207impl<'a> DisplayModeCreateInfoKHR<'a> {
8208    #[inline]
8209    pub fn flags(mut self, flags: DisplayModeCreateFlagsKHR) -> Self {
8210        self.flags = flags;
8211        self
8212    }
8213    #[inline]
8214    pub fn parameters(mut self, parameters: DisplayModeParametersKHR) -> Self {
8215        self.parameters = parameters;
8216        self
8217    }
8218}
8219#[repr(C)]
8220#[cfg_attr(feature = "debug", derive(Debug))]
8221#[derive(Copy, Clone, Default)]
8222#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPlaneCapabilitiesKHR.html>"]
8223#[must_use]
8224pub struct DisplayPlaneCapabilitiesKHR {
8225    pub supported_alpha: DisplayPlaneAlphaFlagsKHR,
8226    pub min_src_position: Offset2D,
8227    pub max_src_position: Offset2D,
8228    pub min_src_extent: Extent2D,
8229    pub max_src_extent: Extent2D,
8230    pub min_dst_position: Offset2D,
8231    pub max_dst_position: Offset2D,
8232    pub min_dst_extent: Extent2D,
8233    pub max_dst_extent: Extent2D,
8234}
8235impl DisplayPlaneCapabilitiesKHR {
8236    #[inline]
8237    pub fn supported_alpha(mut self, supported_alpha: DisplayPlaneAlphaFlagsKHR) -> Self {
8238        self.supported_alpha = supported_alpha;
8239        self
8240    }
8241    #[inline]
8242    pub fn min_src_position(mut self, min_src_position: Offset2D) -> Self {
8243        self.min_src_position = min_src_position;
8244        self
8245    }
8246    #[inline]
8247    pub fn max_src_position(mut self, max_src_position: Offset2D) -> Self {
8248        self.max_src_position = max_src_position;
8249        self
8250    }
8251    #[inline]
8252    pub fn min_src_extent(mut self, min_src_extent: Extent2D) -> Self {
8253        self.min_src_extent = min_src_extent;
8254        self
8255    }
8256    #[inline]
8257    pub fn max_src_extent(mut self, max_src_extent: Extent2D) -> Self {
8258        self.max_src_extent = max_src_extent;
8259        self
8260    }
8261    #[inline]
8262    pub fn min_dst_position(mut self, min_dst_position: Offset2D) -> Self {
8263        self.min_dst_position = min_dst_position;
8264        self
8265    }
8266    #[inline]
8267    pub fn max_dst_position(mut self, max_dst_position: Offset2D) -> Self {
8268        self.max_dst_position = max_dst_position;
8269        self
8270    }
8271    #[inline]
8272    pub fn min_dst_extent(mut self, min_dst_extent: Extent2D) -> Self {
8273        self.min_dst_extent = min_dst_extent;
8274        self
8275    }
8276    #[inline]
8277    pub fn max_dst_extent(mut self, max_dst_extent: Extent2D) -> Self {
8278        self.max_dst_extent = max_dst_extent;
8279        self
8280    }
8281}
8282#[repr(C)]
8283#[cfg_attr(feature = "debug", derive(Debug))]
8284#[derive(Copy, Clone)]
8285#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplaySurfaceCreateInfoKHR.html>"]
8286#[must_use]
8287pub struct DisplaySurfaceCreateInfoKHR<'a> {
8288    pub s_type: StructureType,
8289    pub p_next: *const c_void,
8290    pub flags: DisplaySurfaceCreateFlagsKHR,
8291    pub display_mode: DisplayModeKHR,
8292    pub plane_index: u32,
8293    pub plane_stack_index: u32,
8294    pub transform: SurfaceTransformFlagsKHR,
8295    pub global_alpha: f32,
8296    pub alpha_mode: DisplayPlaneAlphaFlagsKHR,
8297    pub image_extent: Extent2D,
8298    pub _marker: PhantomData<&'a ()>,
8299}
8300unsafe impl Send for DisplaySurfaceCreateInfoKHR<'_> {}
8301unsafe impl Sync for DisplaySurfaceCreateInfoKHR<'_> {}
8302impl ::core::default::Default for DisplaySurfaceCreateInfoKHR<'_> {
8303    #[inline]
8304    fn default() -> Self {
8305        Self {
8306            s_type: Self::STRUCTURE_TYPE,
8307            p_next: ::core::ptr::null(),
8308            flags: DisplaySurfaceCreateFlagsKHR::default(),
8309            display_mode: DisplayModeKHR::default(),
8310            plane_index: u32::default(),
8311            plane_stack_index: u32::default(),
8312            transform: SurfaceTransformFlagsKHR::default(),
8313            global_alpha: f32::default(),
8314            alpha_mode: DisplayPlaneAlphaFlagsKHR::default(),
8315            image_extent: Extent2D::default(),
8316            _marker: PhantomData,
8317        }
8318    }
8319}
8320unsafe impl<'a> TaggedStructure for DisplaySurfaceCreateInfoKHR<'a> {
8321    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_SURFACE_CREATE_INFO_KHR;
8322}
8323impl<'a> DisplaySurfaceCreateInfoKHR<'a> {
8324    #[inline]
8325    pub fn flags(mut self, flags: DisplaySurfaceCreateFlagsKHR) -> Self {
8326        self.flags = flags;
8327        self
8328    }
8329    #[inline]
8330    pub fn display_mode(mut self, display_mode: DisplayModeKHR) -> Self {
8331        self.display_mode = display_mode;
8332        self
8333    }
8334    #[inline]
8335    pub fn plane_index(mut self, plane_index: u32) -> Self {
8336        self.plane_index = plane_index;
8337        self
8338    }
8339    #[inline]
8340    pub fn plane_stack_index(mut self, plane_stack_index: u32) -> Self {
8341        self.plane_stack_index = plane_stack_index;
8342        self
8343    }
8344    #[inline]
8345    pub fn transform(mut self, transform: SurfaceTransformFlagsKHR) -> Self {
8346        self.transform = transform;
8347        self
8348    }
8349    #[inline]
8350    pub fn global_alpha(mut self, global_alpha: f32) -> Self {
8351        self.global_alpha = global_alpha;
8352        self
8353    }
8354    #[inline]
8355    pub fn alpha_mode(mut self, alpha_mode: DisplayPlaneAlphaFlagsKHR) -> Self {
8356        self.alpha_mode = alpha_mode;
8357        self
8358    }
8359    #[inline]
8360    pub fn image_extent(mut self, image_extent: Extent2D) -> Self {
8361        self.image_extent = image_extent;
8362        self
8363    }
8364}
8365#[repr(C)]
8366#[cfg_attr(feature = "debug", derive(Debug))]
8367#[derive(Copy, Clone)]
8368#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPresentInfoKHR.html>"]
8369#[must_use]
8370pub struct DisplayPresentInfoKHR<'a> {
8371    pub s_type: StructureType,
8372    pub p_next: *const c_void,
8373    pub src_rect: Rect2D,
8374    pub dst_rect: Rect2D,
8375    pub persistent: Bool32,
8376    pub _marker: PhantomData<&'a ()>,
8377}
8378unsafe impl Send for DisplayPresentInfoKHR<'_> {}
8379unsafe impl Sync for DisplayPresentInfoKHR<'_> {}
8380impl ::core::default::Default for DisplayPresentInfoKHR<'_> {
8381    #[inline]
8382    fn default() -> Self {
8383        Self {
8384            s_type: Self::STRUCTURE_TYPE,
8385            p_next: ::core::ptr::null(),
8386            src_rect: Rect2D::default(),
8387            dst_rect: Rect2D::default(),
8388            persistent: Bool32::default(),
8389            _marker: PhantomData,
8390        }
8391    }
8392}
8393unsafe impl<'a> TaggedStructure for DisplayPresentInfoKHR<'a> {
8394    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_PRESENT_INFO_KHR;
8395}
8396unsafe impl ExtendsPresentInfoKHR for DisplayPresentInfoKHR<'_> {}
8397impl<'a> DisplayPresentInfoKHR<'a> {
8398    #[inline]
8399    pub fn src_rect(mut self, src_rect: Rect2D) -> Self {
8400        self.src_rect = src_rect;
8401        self
8402    }
8403    #[inline]
8404    pub fn dst_rect(mut self, dst_rect: Rect2D) -> Self {
8405        self.dst_rect = dst_rect;
8406        self
8407    }
8408    #[inline]
8409    pub fn persistent(mut self, persistent: bool) -> Self {
8410        self.persistent = persistent.into();
8411        self
8412    }
8413}
8414#[repr(C)]
8415#[cfg_attr(feature = "debug", derive(Debug))]
8416#[derive(Copy, Clone, Default)]
8417#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceCapabilitiesKHR.html>"]
8418#[must_use]
8419pub struct SurfaceCapabilitiesKHR {
8420    pub min_image_count: u32,
8421    pub max_image_count: u32,
8422    pub current_extent: Extent2D,
8423    pub min_image_extent: Extent2D,
8424    pub max_image_extent: Extent2D,
8425    pub max_image_array_layers: u32,
8426    pub supported_transforms: SurfaceTransformFlagsKHR,
8427    pub current_transform: SurfaceTransformFlagsKHR,
8428    pub supported_composite_alpha: CompositeAlphaFlagsKHR,
8429    pub supported_usage_flags: ImageUsageFlags,
8430}
8431impl SurfaceCapabilitiesKHR {
8432    #[inline]
8433    pub fn min_image_count(mut self, min_image_count: u32) -> Self {
8434        self.min_image_count = min_image_count;
8435        self
8436    }
8437    #[inline]
8438    pub fn max_image_count(mut self, max_image_count: u32) -> Self {
8439        self.max_image_count = max_image_count;
8440        self
8441    }
8442    #[inline]
8443    pub fn current_extent(mut self, current_extent: Extent2D) -> Self {
8444        self.current_extent = current_extent;
8445        self
8446    }
8447    #[inline]
8448    pub fn min_image_extent(mut self, min_image_extent: Extent2D) -> Self {
8449        self.min_image_extent = min_image_extent;
8450        self
8451    }
8452    #[inline]
8453    pub fn max_image_extent(mut self, max_image_extent: Extent2D) -> Self {
8454        self.max_image_extent = max_image_extent;
8455        self
8456    }
8457    #[inline]
8458    pub fn max_image_array_layers(mut self, max_image_array_layers: u32) -> Self {
8459        self.max_image_array_layers = max_image_array_layers;
8460        self
8461    }
8462    #[inline]
8463    pub fn supported_transforms(mut self, supported_transforms: SurfaceTransformFlagsKHR) -> Self {
8464        self.supported_transforms = supported_transforms;
8465        self
8466    }
8467    #[inline]
8468    pub fn current_transform(mut self, current_transform: SurfaceTransformFlagsKHR) -> Self {
8469        self.current_transform = current_transform;
8470        self
8471    }
8472    #[inline]
8473    pub fn supported_composite_alpha(
8474        mut self,
8475        supported_composite_alpha: CompositeAlphaFlagsKHR,
8476    ) -> Self {
8477        self.supported_composite_alpha = supported_composite_alpha;
8478        self
8479    }
8480    #[inline]
8481    pub fn supported_usage_flags(mut self, supported_usage_flags: ImageUsageFlags) -> Self {
8482        self.supported_usage_flags = supported_usage_flags;
8483        self
8484    }
8485}
8486#[repr(C)]
8487#[cfg_attr(feature = "debug", derive(Debug))]
8488#[derive(Copy, Clone)]
8489#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidSurfaceCreateInfoKHR.html>"]
8490#[must_use]
8491pub struct AndroidSurfaceCreateInfoKHR<'a> {
8492    pub s_type: StructureType,
8493    pub p_next: *const c_void,
8494    pub flags: AndroidSurfaceCreateFlagsKHR,
8495    pub window: *mut ANativeWindow,
8496    pub _marker: PhantomData<&'a ()>,
8497}
8498unsafe impl Send for AndroidSurfaceCreateInfoKHR<'_> {}
8499unsafe impl Sync for AndroidSurfaceCreateInfoKHR<'_> {}
8500impl ::core::default::Default for AndroidSurfaceCreateInfoKHR<'_> {
8501    #[inline]
8502    fn default() -> Self {
8503        Self {
8504            s_type: Self::STRUCTURE_TYPE,
8505            p_next: ::core::ptr::null(),
8506            flags: AndroidSurfaceCreateFlagsKHR::default(),
8507            window: ::core::ptr::null_mut(),
8508            _marker: PhantomData,
8509        }
8510    }
8511}
8512unsafe impl<'a> TaggedStructure for AndroidSurfaceCreateInfoKHR<'a> {
8513    const STRUCTURE_TYPE: StructureType = StructureType::ANDROID_SURFACE_CREATE_INFO_KHR;
8514}
8515impl<'a> AndroidSurfaceCreateInfoKHR<'a> {
8516    #[inline]
8517    pub fn flags(mut self, flags: AndroidSurfaceCreateFlagsKHR) -> Self {
8518        self.flags = flags;
8519        self
8520    }
8521    #[inline]
8522    pub fn window(mut self, window: *mut ANativeWindow) -> Self {
8523        self.window = window;
8524        self
8525    }
8526}
8527#[repr(C)]
8528#[cfg_attr(feature = "debug", derive(Debug))]
8529#[derive(Copy, Clone)]
8530#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkViSurfaceCreateInfoNN.html>"]
8531#[must_use]
8532pub struct ViSurfaceCreateInfoNN<'a> {
8533    pub s_type: StructureType,
8534    pub p_next: *const c_void,
8535    pub flags: ViSurfaceCreateFlagsNN,
8536    pub window: *mut c_void,
8537    pub _marker: PhantomData<&'a ()>,
8538}
8539unsafe impl Send for ViSurfaceCreateInfoNN<'_> {}
8540unsafe impl Sync for ViSurfaceCreateInfoNN<'_> {}
8541impl ::core::default::Default for ViSurfaceCreateInfoNN<'_> {
8542    #[inline]
8543    fn default() -> Self {
8544        Self {
8545            s_type: Self::STRUCTURE_TYPE,
8546            p_next: ::core::ptr::null(),
8547            flags: ViSurfaceCreateFlagsNN::default(),
8548            window: ::core::ptr::null_mut(),
8549            _marker: PhantomData,
8550        }
8551    }
8552}
8553unsafe impl<'a> TaggedStructure for ViSurfaceCreateInfoNN<'a> {
8554    const STRUCTURE_TYPE: StructureType = StructureType::VI_SURFACE_CREATE_INFO_NN;
8555}
8556impl<'a> ViSurfaceCreateInfoNN<'a> {
8557    #[inline]
8558    pub fn flags(mut self, flags: ViSurfaceCreateFlagsNN) -> Self {
8559        self.flags = flags;
8560        self
8561    }
8562    #[inline]
8563    pub fn window(mut self, window: *mut c_void) -> Self {
8564        self.window = window;
8565        self
8566    }
8567}
8568#[repr(C)]
8569#[cfg_attr(feature = "debug", derive(Debug))]
8570#[derive(Copy, Clone)]
8571#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWaylandSurfaceCreateInfoKHR.html>"]
8572#[must_use]
8573pub struct WaylandSurfaceCreateInfoKHR<'a> {
8574    pub s_type: StructureType,
8575    pub p_next: *const c_void,
8576    pub flags: WaylandSurfaceCreateFlagsKHR,
8577    pub display: *mut wl_display,
8578    pub surface: *mut wl_surface,
8579    pub _marker: PhantomData<&'a ()>,
8580}
8581unsafe impl Send for WaylandSurfaceCreateInfoKHR<'_> {}
8582unsafe impl Sync for WaylandSurfaceCreateInfoKHR<'_> {}
8583impl ::core::default::Default for WaylandSurfaceCreateInfoKHR<'_> {
8584    #[inline]
8585    fn default() -> Self {
8586        Self {
8587            s_type: Self::STRUCTURE_TYPE,
8588            p_next: ::core::ptr::null(),
8589            flags: WaylandSurfaceCreateFlagsKHR::default(),
8590            display: ::core::ptr::null_mut(),
8591            surface: ::core::ptr::null_mut(),
8592            _marker: PhantomData,
8593        }
8594    }
8595}
8596unsafe impl<'a> TaggedStructure for WaylandSurfaceCreateInfoKHR<'a> {
8597    const STRUCTURE_TYPE: StructureType = StructureType::WAYLAND_SURFACE_CREATE_INFO_KHR;
8598}
8599impl<'a> WaylandSurfaceCreateInfoKHR<'a> {
8600    #[inline]
8601    pub fn flags(mut self, flags: WaylandSurfaceCreateFlagsKHR) -> Self {
8602        self.flags = flags;
8603        self
8604    }
8605    #[inline]
8606    pub fn display(mut self, display: *mut wl_display) -> Self {
8607        self.display = display;
8608        self
8609    }
8610    #[inline]
8611    pub fn surface(mut self, surface: *mut wl_surface) -> Self {
8612        self.surface = surface;
8613        self
8614    }
8615}
8616#[repr(C)]
8617#[cfg_attr(feature = "debug", derive(Debug))]
8618#[derive(Copy, Clone)]
8619#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWin32SurfaceCreateInfoKHR.html>"]
8620#[must_use]
8621pub struct Win32SurfaceCreateInfoKHR<'a> {
8622    pub s_type: StructureType,
8623    pub p_next: *const c_void,
8624    pub flags: Win32SurfaceCreateFlagsKHR,
8625    pub hinstance: HINSTANCE,
8626    pub hwnd: HWND,
8627    pub _marker: PhantomData<&'a ()>,
8628}
8629unsafe impl Send for Win32SurfaceCreateInfoKHR<'_> {}
8630unsafe impl Sync for Win32SurfaceCreateInfoKHR<'_> {}
8631impl ::core::default::Default for Win32SurfaceCreateInfoKHR<'_> {
8632    #[inline]
8633    fn default() -> Self {
8634        Self {
8635            s_type: Self::STRUCTURE_TYPE,
8636            p_next: ::core::ptr::null(),
8637            flags: Win32SurfaceCreateFlagsKHR::default(),
8638            hinstance: unsafe { ::core::mem::zeroed() },
8639            hwnd: unsafe { ::core::mem::zeroed() },
8640            _marker: PhantomData,
8641        }
8642    }
8643}
8644unsafe impl<'a> TaggedStructure for Win32SurfaceCreateInfoKHR<'a> {
8645    const STRUCTURE_TYPE: StructureType = StructureType::WIN32_SURFACE_CREATE_INFO_KHR;
8646}
8647impl<'a> Win32SurfaceCreateInfoKHR<'a> {
8648    #[inline]
8649    pub fn flags(mut self, flags: Win32SurfaceCreateFlagsKHR) -> Self {
8650        self.flags = flags;
8651        self
8652    }
8653    #[inline]
8654    pub fn hinstance(mut self, hinstance: HINSTANCE) -> Self {
8655        self.hinstance = hinstance;
8656        self
8657    }
8658    #[inline]
8659    pub fn hwnd(mut self, hwnd: HWND) -> Self {
8660        self.hwnd = hwnd;
8661        self
8662    }
8663}
8664#[repr(C)]
8665#[cfg_attr(feature = "debug", derive(Debug))]
8666#[derive(Copy, Clone)]
8667#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkXlibSurfaceCreateInfoKHR.html>"]
8668#[must_use]
8669pub struct XlibSurfaceCreateInfoKHR<'a> {
8670    pub s_type: StructureType,
8671    pub p_next: *const c_void,
8672    pub flags: XlibSurfaceCreateFlagsKHR,
8673    pub dpy: *mut Display,
8674    pub window: Window,
8675    pub _marker: PhantomData<&'a ()>,
8676}
8677unsafe impl Send for XlibSurfaceCreateInfoKHR<'_> {}
8678unsafe impl Sync for XlibSurfaceCreateInfoKHR<'_> {}
8679impl ::core::default::Default for XlibSurfaceCreateInfoKHR<'_> {
8680    #[inline]
8681    fn default() -> Self {
8682        Self {
8683            s_type: Self::STRUCTURE_TYPE,
8684            p_next: ::core::ptr::null(),
8685            flags: XlibSurfaceCreateFlagsKHR::default(),
8686            dpy: ::core::ptr::null_mut(),
8687            window: Window::default(),
8688            _marker: PhantomData,
8689        }
8690    }
8691}
8692unsafe impl<'a> TaggedStructure for XlibSurfaceCreateInfoKHR<'a> {
8693    const STRUCTURE_TYPE: StructureType = StructureType::XLIB_SURFACE_CREATE_INFO_KHR;
8694}
8695impl<'a> XlibSurfaceCreateInfoKHR<'a> {
8696    #[inline]
8697    pub fn flags(mut self, flags: XlibSurfaceCreateFlagsKHR) -> Self {
8698        self.flags = flags;
8699        self
8700    }
8701    #[inline]
8702    pub fn dpy(mut self, dpy: *mut Display) -> Self {
8703        self.dpy = dpy;
8704        self
8705    }
8706    #[inline]
8707    pub fn window(mut self, window: Window) -> Self {
8708        self.window = window;
8709        self
8710    }
8711}
8712#[repr(C)]
8713#[cfg_attr(feature = "debug", derive(Debug))]
8714#[derive(Copy, Clone)]
8715#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkXcbSurfaceCreateInfoKHR.html>"]
8716#[must_use]
8717pub struct XcbSurfaceCreateInfoKHR<'a> {
8718    pub s_type: StructureType,
8719    pub p_next: *const c_void,
8720    pub flags: XcbSurfaceCreateFlagsKHR,
8721    pub connection: *mut xcb_connection_t,
8722    pub window: xcb_window_t,
8723    pub _marker: PhantomData<&'a ()>,
8724}
8725unsafe impl Send for XcbSurfaceCreateInfoKHR<'_> {}
8726unsafe impl Sync for XcbSurfaceCreateInfoKHR<'_> {}
8727impl ::core::default::Default for XcbSurfaceCreateInfoKHR<'_> {
8728    #[inline]
8729    fn default() -> Self {
8730        Self {
8731            s_type: Self::STRUCTURE_TYPE,
8732            p_next: ::core::ptr::null(),
8733            flags: XcbSurfaceCreateFlagsKHR::default(),
8734            connection: ::core::ptr::null_mut(),
8735            window: xcb_window_t::default(),
8736            _marker: PhantomData,
8737        }
8738    }
8739}
8740unsafe impl<'a> TaggedStructure for XcbSurfaceCreateInfoKHR<'a> {
8741    const STRUCTURE_TYPE: StructureType = StructureType::XCB_SURFACE_CREATE_INFO_KHR;
8742}
8743impl<'a> XcbSurfaceCreateInfoKHR<'a> {
8744    #[inline]
8745    pub fn flags(mut self, flags: XcbSurfaceCreateFlagsKHR) -> Self {
8746        self.flags = flags;
8747        self
8748    }
8749    #[inline]
8750    pub fn connection(mut self, connection: *mut xcb_connection_t) -> Self {
8751        self.connection = connection;
8752        self
8753    }
8754    #[inline]
8755    pub fn window(mut self, window: xcb_window_t) -> Self {
8756        self.window = window;
8757        self
8758    }
8759}
8760#[repr(C)]
8761#[cfg_attr(feature = "debug", derive(Debug))]
8762#[derive(Copy, Clone)]
8763#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDirectFBSurfaceCreateInfoEXT.html>"]
8764#[must_use]
8765pub struct DirectFBSurfaceCreateInfoEXT<'a> {
8766    pub s_type: StructureType,
8767    pub p_next: *const c_void,
8768    pub flags: DirectFBSurfaceCreateFlagsEXT,
8769    pub dfb: *mut IDirectFB,
8770    pub surface: *mut IDirectFBSurface,
8771    pub _marker: PhantomData<&'a ()>,
8772}
8773unsafe impl Send for DirectFBSurfaceCreateInfoEXT<'_> {}
8774unsafe impl Sync for DirectFBSurfaceCreateInfoEXT<'_> {}
8775impl ::core::default::Default for DirectFBSurfaceCreateInfoEXT<'_> {
8776    #[inline]
8777    fn default() -> Self {
8778        Self {
8779            s_type: Self::STRUCTURE_TYPE,
8780            p_next: ::core::ptr::null(),
8781            flags: DirectFBSurfaceCreateFlagsEXT::default(),
8782            dfb: ::core::ptr::null_mut(),
8783            surface: ::core::ptr::null_mut(),
8784            _marker: PhantomData,
8785        }
8786    }
8787}
8788unsafe impl<'a> TaggedStructure for DirectFBSurfaceCreateInfoEXT<'a> {
8789    const STRUCTURE_TYPE: StructureType = StructureType::DIRECTFB_SURFACE_CREATE_INFO_EXT;
8790}
8791impl<'a> DirectFBSurfaceCreateInfoEXT<'a> {
8792    #[inline]
8793    pub fn flags(mut self, flags: DirectFBSurfaceCreateFlagsEXT) -> Self {
8794        self.flags = flags;
8795        self
8796    }
8797    #[inline]
8798    pub fn dfb(mut self, dfb: *mut IDirectFB) -> Self {
8799        self.dfb = dfb;
8800        self
8801    }
8802    #[inline]
8803    pub fn surface(mut self, surface: *mut IDirectFBSurface) -> Self {
8804        self.surface = surface;
8805        self
8806    }
8807}
8808#[repr(C)]
8809#[cfg_attr(feature = "debug", derive(Debug))]
8810#[derive(Copy, Clone)]
8811#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImagePipeSurfaceCreateInfoFUCHSIA.html>"]
8812#[must_use]
8813pub struct ImagePipeSurfaceCreateInfoFUCHSIA<'a> {
8814    pub s_type: StructureType,
8815    pub p_next: *const c_void,
8816    pub flags: ImagePipeSurfaceCreateFlagsFUCHSIA,
8817    pub image_pipe_handle: zx_handle_t,
8818    pub _marker: PhantomData<&'a ()>,
8819}
8820unsafe impl Send for ImagePipeSurfaceCreateInfoFUCHSIA<'_> {}
8821unsafe impl Sync for ImagePipeSurfaceCreateInfoFUCHSIA<'_> {}
8822impl ::core::default::Default for ImagePipeSurfaceCreateInfoFUCHSIA<'_> {
8823    #[inline]
8824    fn default() -> Self {
8825        Self {
8826            s_type: Self::STRUCTURE_TYPE,
8827            p_next: ::core::ptr::null(),
8828            flags: ImagePipeSurfaceCreateFlagsFUCHSIA::default(),
8829            image_pipe_handle: zx_handle_t::default(),
8830            _marker: PhantomData,
8831        }
8832    }
8833}
8834unsafe impl<'a> TaggedStructure for ImagePipeSurfaceCreateInfoFUCHSIA<'a> {
8835    const STRUCTURE_TYPE: StructureType = StructureType::IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA;
8836}
8837impl<'a> ImagePipeSurfaceCreateInfoFUCHSIA<'a> {
8838    #[inline]
8839    pub fn flags(mut self, flags: ImagePipeSurfaceCreateFlagsFUCHSIA) -> Self {
8840        self.flags = flags;
8841        self
8842    }
8843    #[inline]
8844    pub fn image_pipe_handle(mut self, image_pipe_handle: zx_handle_t) -> Self {
8845        self.image_pipe_handle = image_pipe_handle;
8846        self
8847    }
8848}
8849#[repr(C)]
8850#[cfg_attr(feature = "debug", derive(Debug))]
8851#[derive(Copy, Clone)]
8852#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkStreamDescriptorSurfaceCreateInfoGGP.html>"]
8853#[must_use]
8854pub struct StreamDescriptorSurfaceCreateInfoGGP<'a> {
8855    pub s_type: StructureType,
8856    pub p_next: *const c_void,
8857    pub flags: StreamDescriptorSurfaceCreateFlagsGGP,
8858    pub stream_descriptor: GgpStreamDescriptor,
8859    pub _marker: PhantomData<&'a ()>,
8860}
8861unsafe impl Send for StreamDescriptorSurfaceCreateInfoGGP<'_> {}
8862unsafe impl Sync for StreamDescriptorSurfaceCreateInfoGGP<'_> {}
8863impl ::core::default::Default for StreamDescriptorSurfaceCreateInfoGGP<'_> {
8864    #[inline]
8865    fn default() -> Self {
8866        Self {
8867            s_type: Self::STRUCTURE_TYPE,
8868            p_next: ::core::ptr::null(),
8869            flags: StreamDescriptorSurfaceCreateFlagsGGP::default(),
8870            stream_descriptor: GgpStreamDescriptor::default(),
8871            _marker: PhantomData,
8872        }
8873    }
8874}
8875unsafe impl<'a> TaggedStructure for StreamDescriptorSurfaceCreateInfoGGP<'a> {
8876    const STRUCTURE_TYPE: StructureType = StructureType::STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP;
8877}
8878impl<'a> StreamDescriptorSurfaceCreateInfoGGP<'a> {
8879    #[inline]
8880    pub fn flags(mut self, flags: StreamDescriptorSurfaceCreateFlagsGGP) -> Self {
8881        self.flags = flags;
8882        self
8883    }
8884    #[inline]
8885    pub fn stream_descriptor(mut self, stream_descriptor: GgpStreamDescriptor) -> Self {
8886        self.stream_descriptor = stream_descriptor;
8887        self
8888    }
8889}
8890#[repr(C)]
8891#[cfg_attr(feature = "debug", derive(Debug))]
8892#[derive(Copy, Clone)]
8893#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkScreenSurfaceCreateInfoQNX.html>"]
8894#[must_use]
8895pub struct ScreenSurfaceCreateInfoQNX<'a> {
8896    pub s_type: StructureType,
8897    pub p_next: *const c_void,
8898    pub flags: ScreenSurfaceCreateFlagsQNX,
8899    pub context: *mut _screen_context,
8900    pub window: *mut _screen_window,
8901    pub _marker: PhantomData<&'a ()>,
8902}
8903unsafe impl Send for ScreenSurfaceCreateInfoQNX<'_> {}
8904unsafe impl Sync for ScreenSurfaceCreateInfoQNX<'_> {}
8905impl ::core::default::Default for ScreenSurfaceCreateInfoQNX<'_> {
8906    #[inline]
8907    fn default() -> Self {
8908        Self {
8909            s_type: Self::STRUCTURE_TYPE,
8910            p_next: ::core::ptr::null(),
8911            flags: ScreenSurfaceCreateFlagsQNX::default(),
8912            context: ::core::ptr::null_mut(),
8913            window: ::core::ptr::null_mut(),
8914            _marker: PhantomData,
8915        }
8916    }
8917}
8918unsafe impl<'a> TaggedStructure for ScreenSurfaceCreateInfoQNX<'a> {
8919    const STRUCTURE_TYPE: StructureType = StructureType::SCREEN_SURFACE_CREATE_INFO_QNX;
8920}
8921impl<'a> ScreenSurfaceCreateInfoQNX<'a> {
8922    #[inline]
8923    pub fn flags(mut self, flags: ScreenSurfaceCreateFlagsQNX) -> Self {
8924        self.flags = flags;
8925        self
8926    }
8927    #[inline]
8928    pub fn context(mut self, context: &'a mut _screen_context) -> Self {
8929        self.context = context;
8930        self
8931    }
8932    #[inline]
8933    pub fn window(mut self, window: &'a mut _screen_window) -> Self {
8934        self.window = window;
8935        self
8936    }
8937}
8938#[repr(C)]
8939#[cfg_attr(feature = "debug", derive(Debug))]
8940#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
8941#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceFormatKHR.html>"]
8942#[must_use]
8943pub struct SurfaceFormatKHR {
8944    pub format: Format,
8945    pub color_space: ColorSpaceKHR,
8946}
8947impl SurfaceFormatKHR {
8948    #[inline]
8949    pub fn format(mut self, format: Format) -> Self {
8950        self.format = format;
8951        self
8952    }
8953    #[inline]
8954    pub fn color_space(mut self, color_space: ColorSpaceKHR) -> Self {
8955        self.color_space = color_space;
8956        self
8957    }
8958}
8959#[repr(C)]
8960#[cfg_attr(feature = "debug", derive(Debug))]
8961#[derive(Copy, Clone)]
8962#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainCreateInfoKHR.html>"]
8963#[must_use]
8964pub struct SwapchainCreateInfoKHR<'a> {
8965    pub s_type: StructureType,
8966    pub p_next: *const c_void,
8967    pub flags: SwapchainCreateFlagsKHR,
8968    pub surface: SurfaceKHR,
8969    pub min_image_count: u32,
8970    pub image_format: Format,
8971    pub image_color_space: ColorSpaceKHR,
8972    pub image_extent: Extent2D,
8973    pub image_array_layers: u32,
8974    pub image_usage: ImageUsageFlags,
8975    pub image_sharing_mode: SharingMode,
8976    pub queue_family_index_count: u32,
8977    pub p_queue_family_indices: *const u32,
8978    pub pre_transform: SurfaceTransformFlagsKHR,
8979    pub composite_alpha: CompositeAlphaFlagsKHR,
8980    pub present_mode: PresentModeKHR,
8981    pub clipped: Bool32,
8982    pub old_swapchain: SwapchainKHR,
8983    pub _marker: PhantomData<&'a ()>,
8984}
8985unsafe impl Send for SwapchainCreateInfoKHR<'_> {}
8986unsafe impl Sync for SwapchainCreateInfoKHR<'_> {}
8987impl ::core::default::Default for SwapchainCreateInfoKHR<'_> {
8988    #[inline]
8989    fn default() -> Self {
8990        Self {
8991            s_type: Self::STRUCTURE_TYPE,
8992            p_next: ::core::ptr::null(),
8993            flags: SwapchainCreateFlagsKHR::default(),
8994            surface: SurfaceKHR::default(),
8995            min_image_count: u32::default(),
8996            image_format: Format::default(),
8997            image_color_space: ColorSpaceKHR::default(),
8998            image_extent: Extent2D::default(),
8999            image_array_layers: u32::default(),
9000            image_usage: ImageUsageFlags::default(),
9001            image_sharing_mode: SharingMode::default(),
9002            queue_family_index_count: u32::default(),
9003            p_queue_family_indices: ::core::ptr::null(),
9004            pre_transform: SurfaceTransformFlagsKHR::default(),
9005            composite_alpha: CompositeAlphaFlagsKHR::default(),
9006            present_mode: PresentModeKHR::default(),
9007            clipped: Bool32::default(),
9008            old_swapchain: SwapchainKHR::default(),
9009            _marker: PhantomData,
9010        }
9011    }
9012}
9013unsafe impl<'a> TaggedStructure for SwapchainCreateInfoKHR<'a> {
9014    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_CREATE_INFO_KHR;
9015}
9016pub unsafe trait ExtendsSwapchainCreateInfoKHR {}
9017impl<'a> SwapchainCreateInfoKHR<'a> {
9018    #[inline]
9019    pub fn flags(mut self, flags: SwapchainCreateFlagsKHR) -> Self {
9020        self.flags = flags;
9021        self
9022    }
9023    #[inline]
9024    pub fn surface(mut self, surface: SurfaceKHR) -> Self {
9025        self.surface = surface;
9026        self
9027    }
9028    #[inline]
9029    pub fn min_image_count(mut self, min_image_count: u32) -> Self {
9030        self.min_image_count = min_image_count;
9031        self
9032    }
9033    #[inline]
9034    pub fn image_format(mut self, image_format: Format) -> Self {
9035        self.image_format = image_format;
9036        self
9037    }
9038    #[inline]
9039    pub fn image_color_space(mut self, image_color_space: ColorSpaceKHR) -> Self {
9040        self.image_color_space = image_color_space;
9041        self
9042    }
9043    #[inline]
9044    pub fn image_extent(mut self, image_extent: Extent2D) -> Self {
9045        self.image_extent = image_extent;
9046        self
9047    }
9048    #[inline]
9049    pub fn image_array_layers(mut self, image_array_layers: u32) -> Self {
9050        self.image_array_layers = image_array_layers;
9051        self
9052    }
9053    #[inline]
9054    pub fn image_usage(mut self, image_usage: ImageUsageFlags) -> Self {
9055        self.image_usage = image_usage;
9056        self
9057    }
9058    #[inline]
9059    pub fn image_sharing_mode(mut self, image_sharing_mode: SharingMode) -> Self {
9060        self.image_sharing_mode = image_sharing_mode;
9061        self
9062    }
9063    #[inline]
9064    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
9065        self.queue_family_index_count = queue_family_indices.len() as _;
9066        self.p_queue_family_indices = queue_family_indices.as_ptr();
9067        self
9068    }
9069    #[inline]
9070    pub fn pre_transform(mut self, pre_transform: SurfaceTransformFlagsKHR) -> Self {
9071        self.pre_transform = pre_transform;
9072        self
9073    }
9074    #[inline]
9075    pub fn composite_alpha(mut self, composite_alpha: CompositeAlphaFlagsKHR) -> Self {
9076        self.composite_alpha = composite_alpha;
9077        self
9078    }
9079    #[inline]
9080    pub fn present_mode(mut self, present_mode: PresentModeKHR) -> Self {
9081        self.present_mode = present_mode;
9082        self
9083    }
9084    #[inline]
9085    pub fn clipped(mut self, clipped: bool) -> Self {
9086        self.clipped = clipped.into();
9087        self
9088    }
9089    #[inline]
9090    pub fn old_swapchain(mut self, old_swapchain: SwapchainKHR) -> Self {
9091        self.old_swapchain = old_swapchain;
9092        self
9093    }
9094    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
9095    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
9096    #[doc = r" valid extension structs can be pushed into the chain."]
9097    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
9098    #[doc = r" chain will look like `A -> D -> B -> C`."]
9099    pub fn push_next<T: ExtendsSwapchainCreateInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
9100        unsafe {
9101            let next_ptr = <*const T>::cast(next);
9102            let last_next = ptr_chain_iter(next).last().unwrap();
9103            (*last_next).p_next = self.p_next as _;
9104            self.p_next = next_ptr;
9105        }
9106        self
9107    }
9108}
9109#[repr(C)]
9110#[cfg_attr(feature = "debug", derive(Debug))]
9111#[derive(Copy, Clone)]
9112#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentInfoKHR.html>"]
9113#[must_use]
9114pub struct PresentInfoKHR<'a> {
9115    pub s_type: StructureType,
9116    pub p_next: *const c_void,
9117    pub wait_semaphore_count: u32,
9118    pub p_wait_semaphores: *const Semaphore,
9119    pub swapchain_count: u32,
9120    pub p_swapchains: *const SwapchainKHR,
9121    pub p_image_indices: *const u32,
9122    pub p_results: *mut Result,
9123    pub _marker: PhantomData<&'a ()>,
9124}
9125unsafe impl Send for PresentInfoKHR<'_> {}
9126unsafe impl Sync for PresentInfoKHR<'_> {}
9127impl ::core::default::Default for PresentInfoKHR<'_> {
9128    #[inline]
9129    fn default() -> Self {
9130        Self {
9131            s_type: Self::STRUCTURE_TYPE,
9132            p_next: ::core::ptr::null(),
9133            wait_semaphore_count: u32::default(),
9134            p_wait_semaphores: ::core::ptr::null(),
9135            swapchain_count: u32::default(),
9136            p_swapchains: ::core::ptr::null(),
9137            p_image_indices: ::core::ptr::null(),
9138            p_results: ::core::ptr::null_mut(),
9139            _marker: PhantomData,
9140        }
9141    }
9142}
9143unsafe impl<'a> TaggedStructure for PresentInfoKHR<'a> {
9144    const STRUCTURE_TYPE: StructureType = StructureType::PRESENT_INFO_KHR;
9145}
9146pub unsafe trait ExtendsPresentInfoKHR {}
9147impl<'a> PresentInfoKHR<'a> {
9148    #[inline]
9149    pub fn wait_semaphores(mut self, wait_semaphores: &'a [Semaphore]) -> Self {
9150        self.wait_semaphore_count = wait_semaphores.len() as _;
9151        self.p_wait_semaphores = wait_semaphores.as_ptr();
9152        self
9153    }
9154    #[inline]
9155    pub fn swapchains(mut self, swapchains: &'a [SwapchainKHR]) -> Self {
9156        self.swapchain_count = swapchains.len() as _;
9157        self.p_swapchains = swapchains.as_ptr();
9158        self
9159    }
9160    #[inline]
9161    pub fn image_indices(mut self, image_indices: &'a [u32]) -> Self {
9162        self.swapchain_count = image_indices.len() as _;
9163        self.p_image_indices = image_indices.as_ptr();
9164        self
9165    }
9166    #[inline]
9167    pub fn results(mut self, results: &'a mut [Result]) -> Self {
9168        self.swapchain_count = results.len() as _;
9169        self.p_results = results.as_mut_ptr();
9170        self
9171    }
9172    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
9173    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
9174    #[doc = r" valid extension structs can be pushed into the chain."]
9175    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
9176    #[doc = r" chain will look like `A -> D -> B -> C`."]
9177    pub fn push_next<T: ExtendsPresentInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
9178        unsafe {
9179            let next_ptr = <*const T>::cast(next);
9180            let last_next = ptr_chain_iter(next).last().unwrap();
9181            (*last_next).p_next = self.p_next as _;
9182            self.p_next = next_ptr;
9183        }
9184        self
9185    }
9186}
9187#[repr(C)]
9188#[derive(Copy, Clone)]
9189#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugReportCallbackCreateInfoEXT.html>"]
9190#[must_use]
9191pub struct DebugReportCallbackCreateInfoEXT<'a> {
9192    pub s_type: StructureType,
9193    pub p_next: *const c_void,
9194    pub flags: DebugReportFlagsEXT,
9195    pub pfn_callback: PFN_vkDebugReportCallbackEXT,
9196    pub p_user_data: *mut c_void,
9197    pub _marker: PhantomData<&'a ()>,
9198}
9199unsafe impl Send for DebugReportCallbackCreateInfoEXT<'_> {}
9200unsafe impl Sync for DebugReportCallbackCreateInfoEXT<'_> {}
9201#[cfg(feature = "debug")]
9202impl fmt::Debug for DebugReportCallbackCreateInfoEXT<'_> {
9203    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
9204        fmt.debug_struct("DebugReportCallbackCreateInfoEXT")
9205            .field("s_type", &self.s_type)
9206            .field("p_next", &self.p_next)
9207            .field("flags", &self.flags)
9208            .field("pfn_callback", &(self.pfn_callback.map(|x| x as *const ())))
9209            .field("p_user_data", &self.p_user_data)
9210            .finish()
9211    }
9212}
9213impl ::core::default::Default for DebugReportCallbackCreateInfoEXT<'_> {
9214    #[inline]
9215    fn default() -> Self {
9216        Self {
9217            s_type: Self::STRUCTURE_TYPE,
9218            p_next: ::core::ptr::null(),
9219            flags: DebugReportFlagsEXT::default(),
9220            pfn_callback: PFN_vkDebugReportCallbackEXT::default(),
9221            p_user_data: ::core::ptr::null_mut(),
9222            _marker: PhantomData,
9223        }
9224    }
9225}
9226unsafe impl<'a> TaggedStructure for DebugReportCallbackCreateInfoEXT<'a> {
9227    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
9228}
9229unsafe impl ExtendsInstanceCreateInfo for DebugReportCallbackCreateInfoEXT<'_> {}
9230impl<'a> DebugReportCallbackCreateInfoEXT<'a> {
9231    #[inline]
9232    pub fn flags(mut self, flags: DebugReportFlagsEXT) -> Self {
9233        self.flags = flags;
9234        self
9235    }
9236    #[inline]
9237    pub fn pfn_callback(mut self, pfn_callback: PFN_vkDebugReportCallbackEXT) -> Self {
9238        self.pfn_callback = pfn_callback;
9239        self
9240    }
9241    #[inline]
9242    pub fn user_data(mut self, user_data: *mut c_void) -> Self {
9243        self.p_user_data = user_data;
9244        self
9245    }
9246}
9247#[repr(C)]
9248#[cfg_attr(feature = "debug", derive(Debug))]
9249#[derive(Copy, Clone)]
9250#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkValidationFlagsEXT.html>"]
9251#[must_use]
9252pub struct ValidationFlagsEXT<'a> {
9253    pub s_type: StructureType,
9254    pub p_next: *const c_void,
9255    pub disabled_validation_check_count: u32,
9256    pub p_disabled_validation_checks: *const ValidationCheckEXT,
9257    pub _marker: PhantomData<&'a ()>,
9258}
9259unsafe impl Send for ValidationFlagsEXT<'_> {}
9260unsafe impl Sync for ValidationFlagsEXT<'_> {}
9261impl ::core::default::Default for ValidationFlagsEXT<'_> {
9262    #[inline]
9263    fn default() -> Self {
9264        Self {
9265            s_type: Self::STRUCTURE_TYPE,
9266            p_next: ::core::ptr::null(),
9267            disabled_validation_check_count: u32::default(),
9268            p_disabled_validation_checks: ::core::ptr::null(),
9269            _marker: PhantomData,
9270        }
9271    }
9272}
9273unsafe impl<'a> TaggedStructure for ValidationFlagsEXT<'a> {
9274    const STRUCTURE_TYPE: StructureType = StructureType::VALIDATION_FLAGS_EXT;
9275}
9276unsafe impl ExtendsInstanceCreateInfo for ValidationFlagsEXT<'_> {}
9277impl<'a> ValidationFlagsEXT<'a> {
9278    #[inline]
9279    pub fn disabled_validation_checks(
9280        mut self,
9281        disabled_validation_checks: &'a [ValidationCheckEXT],
9282    ) -> Self {
9283        self.disabled_validation_check_count = disabled_validation_checks.len() as _;
9284        self.p_disabled_validation_checks = disabled_validation_checks.as_ptr();
9285        self
9286    }
9287}
9288#[repr(C)]
9289#[cfg_attr(feature = "debug", derive(Debug))]
9290#[derive(Copy, Clone)]
9291#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkValidationFeaturesEXT.html>"]
9292#[must_use]
9293pub struct ValidationFeaturesEXT<'a> {
9294    pub s_type: StructureType,
9295    pub p_next: *const c_void,
9296    pub enabled_validation_feature_count: u32,
9297    pub p_enabled_validation_features: *const ValidationFeatureEnableEXT,
9298    pub disabled_validation_feature_count: u32,
9299    pub p_disabled_validation_features: *const ValidationFeatureDisableEXT,
9300    pub _marker: PhantomData<&'a ()>,
9301}
9302unsafe impl Send for ValidationFeaturesEXT<'_> {}
9303unsafe impl Sync for ValidationFeaturesEXT<'_> {}
9304impl ::core::default::Default for ValidationFeaturesEXT<'_> {
9305    #[inline]
9306    fn default() -> Self {
9307        Self {
9308            s_type: Self::STRUCTURE_TYPE,
9309            p_next: ::core::ptr::null(),
9310            enabled_validation_feature_count: u32::default(),
9311            p_enabled_validation_features: ::core::ptr::null(),
9312            disabled_validation_feature_count: u32::default(),
9313            p_disabled_validation_features: ::core::ptr::null(),
9314            _marker: PhantomData,
9315        }
9316    }
9317}
9318unsafe impl<'a> TaggedStructure for ValidationFeaturesEXT<'a> {
9319    const STRUCTURE_TYPE: StructureType = StructureType::VALIDATION_FEATURES_EXT;
9320}
9321unsafe impl ExtendsInstanceCreateInfo for ValidationFeaturesEXT<'_> {}
9322impl<'a> ValidationFeaturesEXT<'a> {
9323    #[inline]
9324    pub fn enabled_validation_features(
9325        mut self,
9326        enabled_validation_features: &'a [ValidationFeatureEnableEXT],
9327    ) -> Self {
9328        self.enabled_validation_feature_count = enabled_validation_features.len() as _;
9329        self.p_enabled_validation_features = enabled_validation_features.as_ptr();
9330        self
9331    }
9332    #[inline]
9333    pub fn disabled_validation_features(
9334        mut self,
9335        disabled_validation_features: &'a [ValidationFeatureDisableEXT],
9336    ) -> Self {
9337        self.disabled_validation_feature_count = disabled_validation_features.len() as _;
9338        self.p_disabled_validation_features = disabled_validation_features.as_ptr();
9339        self
9340    }
9341}
9342#[repr(C)]
9343#[cfg_attr(feature = "debug", derive(Debug))]
9344#[derive(Copy, Clone)]
9345#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLayerSettingsCreateInfoEXT.html>"]
9346#[must_use]
9347pub struct LayerSettingsCreateInfoEXT<'a> {
9348    pub s_type: StructureType,
9349    pub p_next: *const c_void,
9350    pub setting_count: u32,
9351    pub p_settings: *const LayerSettingEXT<'a>,
9352    pub _marker: PhantomData<&'a ()>,
9353}
9354unsafe impl Send for LayerSettingsCreateInfoEXT<'_> {}
9355unsafe impl Sync for LayerSettingsCreateInfoEXT<'_> {}
9356impl ::core::default::Default for LayerSettingsCreateInfoEXT<'_> {
9357    #[inline]
9358    fn default() -> Self {
9359        Self {
9360            s_type: Self::STRUCTURE_TYPE,
9361            p_next: ::core::ptr::null(),
9362            setting_count: u32::default(),
9363            p_settings: ::core::ptr::null(),
9364            _marker: PhantomData,
9365        }
9366    }
9367}
9368unsafe impl<'a> TaggedStructure for LayerSettingsCreateInfoEXT<'a> {
9369    const STRUCTURE_TYPE: StructureType = StructureType::LAYER_SETTINGS_CREATE_INFO_EXT;
9370}
9371unsafe impl ExtendsInstanceCreateInfo for LayerSettingsCreateInfoEXT<'_> {}
9372impl<'a> LayerSettingsCreateInfoEXT<'a> {
9373    #[inline]
9374    pub fn settings(mut self, settings: &'a [LayerSettingEXT<'a>]) -> Self {
9375        self.setting_count = settings.len() as _;
9376        self.p_settings = settings.as_ptr();
9377        self
9378    }
9379}
9380#[repr(C)]
9381#[cfg_attr(feature = "debug", derive(Debug))]
9382#[derive(Copy, Clone)]
9383#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLayerSettingEXT.html>"]
9384#[must_use]
9385pub struct LayerSettingEXT<'a> {
9386    pub p_layer_name: *const c_char,
9387    pub p_setting_name: *const c_char,
9388    pub ty: LayerSettingTypeEXT,
9389    pub value_count: u32,
9390    pub p_values: *const c_void,
9391    pub _marker: PhantomData<&'a ()>,
9392}
9393unsafe impl Send for LayerSettingEXT<'_> {}
9394unsafe impl Sync for LayerSettingEXT<'_> {}
9395impl ::core::default::Default for LayerSettingEXT<'_> {
9396    #[inline]
9397    fn default() -> Self {
9398        Self {
9399            p_layer_name: ::core::ptr::null(),
9400            p_setting_name: ::core::ptr::null(),
9401            ty: LayerSettingTypeEXT::default(),
9402            value_count: u32::default(),
9403            p_values: ::core::ptr::null(),
9404            _marker: PhantomData,
9405        }
9406    }
9407}
9408impl<'a> LayerSettingEXT<'a> {
9409    #[inline]
9410    pub fn layer_name(mut self, layer_name: &'a CStr) -> Self {
9411        self.p_layer_name = layer_name.as_ptr();
9412        self
9413    }
9414    #[inline]
9415    pub unsafe fn layer_name_as_c_str(&self) -> Option<&CStr> {
9416        if self.p_layer_name.is_null() {
9417            None
9418        } else {
9419            Some(CStr::from_ptr(self.p_layer_name))
9420        }
9421    }
9422    #[inline]
9423    pub fn setting_name(mut self, setting_name: &'a CStr) -> Self {
9424        self.p_setting_name = setting_name.as_ptr();
9425        self
9426    }
9427    #[inline]
9428    pub unsafe fn setting_name_as_c_str(&self) -> Option<&CStr> {
9429        if self.p_setting_name.is_null() {
9430            None
9431        } else {
9432            Some(CStr::from_ptr(self.p_setting_name))
9433        }
9434    }
9435    #[inline]
9436    pub fn ty(mut self, ty: LayerSettingTypeEXT) -> Self {
9437        self.ty = ty;
9438        self
9439    }
9440    #[inline]
9441    pub fn values(mut self, values: &'a [u8]) -> Self {
9442        self.value_count = values.len() as _;
9443        self.p_values = values.as_ptr().cast();
9444        self
9445    }
9446}
9447#[repr(C)]
9448#[cfg_attr(feature = "debug", derive(Debug))]
9449#[derive(Copy, Clone)]
9450#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationStateRasterizationOrderAMD.html>"]
9451#[must_use]
9452pub struct PipelineRasterizationStateRasterizationOrderAMD<'a> {
9453    pub s_type: StructureType,
9454    pub p_next: *const c_void,
9455    pub rasterization_order: RasterizationOrderAMD,
9456    pub _marker: PhantomData<&'a ()>,
9457}
9458unsafe impl Send for PipelineRasterizationStateRasterizationOrderAMD<'_> {}
9459unsafe impl Sync for PipelineRasterizationStateRasterizationOrderAMD<'_> {}
9460impl ::core::default::Default for PipelineRasterizationStateRasterizationOrderAMD<'_> {
9461    #[inline]
9462    fn default() -> Self {
9463        Self {
9464            s_type: Self::STRUCTURE_TYPE,
9465            p_next: ::core::ptr::null(),
9466            rasterization_order: RasterizationOrderAMD::default(),
9467            _marker: PhantomData,
9468        }
9469    }
9470}
9471unsafe impl<'a> TaggedStructure for PipelineRasterizationStateRasterizationOrderAMD<'a> {
9472    const STRUCTURE_TYPE: StructureType =
9473        StructureType::PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD;
9474}
9475unsafe impl ExtendsPipelineRasterizationStateCreateInfo
9476    for PipelineRasterizationStateRasterizationOrderAMD<'_>
9477{
9478}
9479impl<'a> PipelineRasterizationStateRasterizationOrderAMD<'a> {
9480    #[inline]
9481    pub fn rasterization_order(mut self, rasterization_order: RasterizationOrderAMD) -> Self {
9482        self.rasterization_order = rasterization_order;
9483        self
9484    }
9485}
9486#[repr(C)]
9487#[cfg_attr(feature = "debug", derive(Debug))]
9488#[derive(Copy, Clone)]
9489#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugMarkerObjectNameInfoEXT.html>"]
9490#[must_use]
9491pub struct DebugMarkerObjectNameInfoEXT<'a> {
9492    pub s_type: StructureType,
9493    pub p_next: *const c_void,
9494    pub object_type: DebugReportObjectTypeEXT,
9495    pub object: u64,
9496    pub p_object_name: *const c_char,
9497    pub _marker: PhantomData<&'a ()>,
9498}
9499unsafe impl Send for DebugMarkerObjectNameInfoEXT<'_> {}
9500unsafe impl Sync for DebugMarkerObjectNameInfoEXT<'_> {}
9501impl ::core::default::Default for DebugMarkerObjectNameInfoEXT<'_> {
9502    #[inline]
9503    fn default() -> Self {
9504        Self {
9505            s_type: Self::STRUCTURE_TYPE,
9506            p_next: ::core::ptr::null(),
9507            object_type: DebugReportObjectTypeEXT::default(),
9508            object: u64::default(),
9509            p_object_name: ::core::ptr::null(),
9510            _marker: PhantomData,
9511        }
9512    }
9513}
9514unsafe impl<'a> TaggedStructure for DebugMarkerObjectNameInfoEXT<'a> {
9515    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_MARKER_OBJECT_NAME_INFO_EXT;
9516}
9517impl<'a> DebugMarkerObjectNameInfoEXT<'a> {
9518    #[inline]
9519    pub fn object_type(mut self, object_type: DebugReportObjectTypeEXT) -> Self {
9520        self.object_type = object_type;
9521        self
9522    }
9523    #[inline]
9524    pub fn object(mut self, object: u64) -> Self {
9525        self.object = object;
9526        self
9527    }
9528    #[inline]
9529    pub fn object_name(mut self, object_name: &'a CStr) -> Self {
9530        self.p_object_name = object_name.as_ptr();
9531        self
9532    }
9533    #[inline]
9534    pub unsafe fn object_name_as_c_str(&self) -> Option<&CStr> {
9535        if self.p_object_name.is_null() {
9536            None
9537        } else {
9538            Some(CStr::from_ptr(self.p_object_name))
9539        }
9540    }
9541}
9542#[repr(C)]
9543#[cfg_attr(feature = "debug", derive(Debug))]
9544#[derive(Copy, Clone)]
9545#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugMarkerObjectTagInfoEXT.html>"]
9546#[must_use]
9547pub struct DebugMarkerObjectTagInfoEXT<'a> {
9548    pub s_type: StructureType,
9549    pub p_next: *const c_void,
9550    pub object_type: DebugReportObjectTypeEXT,
9551    pub object: u64,
9552    pub tag_name: u64,
9553    pub tag_size: usize,
9554    pub p_tag: *const c_void,
9555    pub _marker: PhantomData<&'a ()>,
9556}
9557unsafe impl Send for DebugMarkerObjectTagInfoEXT<'_> {}
9558unsafe impl Sync for DebugMarkerObjectTagInfoEXT<'_> {}
9559impl ::core::default::Default for DebugMarkerObjectTagInfoEXT<'_> {
9560    #[inline]
9561    fn default() -> Self {
9562        Self {
9563            s_type: Self::STRUCTURE_TYPE,
9564            p_next: ::core::ptr::null(),
9565            object_type: DebugReportObjectTypeEXT::default(),
9566            object: u64::default(),
9567            tag_name: u64::default(),
9568            tag_size: usize::default(),
9569            p_tag: ::core::ptr::null(),
9570            _marker: PhantomData,
9571        }
9572    }
9573}
9574unsafe impl<'a> TaggedStructure for DebugMarkerObjectTagInfoEXT<'a> {
9575    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_MARKER_OBJECT_TAG_INFO_EXT;
9576}
9577impl<'a> DebugMarkerObjectTagInfoEXT<'a> {
9578    #[inline]
9579    pub fn object_type(mut self, object_type: DebugReportObjectTypeEXT) -> Self {
9580        self.object_type = object_type;
9581        self
9582    }
9583    #[inline]
9584    pub fn object(mut self, object: u64) -> Self {
9585        self.object = object;
9586        self
9587    }
9588    #[inline]
9589    pub fn tag_name(mut self, tag_name: u64) -> Self {
9590        self.tag_name = tag_name;
9591        self
9592    }
9593    #[inline]
9594    pub fn tag(mut self, tag: &'a [u8]) -> Self {
9595        self.tag_size = tag.len();
9596        self.p_tag = tag.as_ptr().cast();
9597        self
9598    }
9599}
9600#[repr(C)]
9601#[cfg_attr(feature = "debug", derive(Debug))]
9602#[derive(Copy, Clone)]
9603#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugMarkerMarkerInfoEXT.html>"]
9604#[must_use]
9605pub struct DebugMarkerMarkerInfoEXT<'a> {
9606    pub s_type: StructureType,
9607    pub p_next: *const c_void,
9608    pub p_marker_name: *const c_char,
9609    pub color: [f32; 4],
9610    pub _marker: PhantomData<&'a ()>,
9611}
9612unsafe impl Send for DebugMarkerMarkerInfoEXT<'_> {}
9613unsafe impl Sync for DebugMarkerMarkerInfoEXT<'_> {}
9614impl ::core::default::Default for DebugMarkerMarkerInfoEXT<'_> {
9615    #[inline]
9616    fn default() -> Self {
9617        Self {
9618            s_type: Self::STRUCTURE_TYPE,
9619            p_next: ::core::ptr::null(),
9620            p_marker_name: ::core::ptr::null(),
9621            color: unsafe { ::core::mem::zeroed() },
9622            _marker: PhantomData,
9623        }
9624    }
9625}
9626unsafe impl<'a> TaggedStructure for DebugMarkerMarkerInfoEXT<'a> {
9627    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_MARKER_MARKER_INFO_EXT;
9628}
9629impl<'a> DebugMarkerMarkerInfoEXT<'a> {
9630    #[inline]
9631    pub fn marker_name(mut self, marker_name: &'a CStr) -> Self {
9632        self.p_marker_name = marker_name.as_ptr();
9633        self
9634    }
9635    #[inline]
9636    pub unsafe fn marker_name_as_c_str(&self) -> Option<&CStr> {
9637        if self.p_marker_name.is_null() {
9638            None
9639        } else {
9640            Some(CStr::from_ptr(self.p_marker_name))
9641        }
9642    }
9643    #[inline]
9644    pub fn color(mut self, color: [f32; 4]) -> Self {
9645        self.color = color;
9646        self
9647    }
9648}
9649#[repr(C)]
9650#[cfg_attr(feature = "debug", derive(Debug))]
9651#[derive(Copy, Clone)]
9652#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDedicatedAllocationImageCreateInfoNV.html>"]
9653#[must_use]
9654pub struct DedicatedAllocationImageCreateInfoNV<'a> {
9655    pub s_type: StructureType,
9656    pub p_next: *const c_void,
9657    pub dedicated_allocation: Bool32,
9658    pub _marker: PhantomData<&'a ()>,
9659}
9660unsafe impl Send for DedicatedAllocationImageCreateInfoNV<'_> {}
9661unsafe impl Sync for DedicatedAllocationImageCreateInfoNV<'_> {}
9662impl ::core::default::Default for DedicatedAllocationImageCreateInfoNV<'_> {
9663    #[inline]
9664    fn default() -> Self {
9665        Self {
9666            s_type: Self::STRUCTURE_TYPE,
9667            p_next: ::core::ptr::null(),
9668            dedicated_allocation: Bool32::default(),
9669            _marker: PhantomData,
9670        }
9671    }
9672}
9673unsafe impl<'a> TaggedStructure for DedicatedAllocationImageCreateInfoNV<'a> {
9674    const STRUCTURE_TYPE: StructureType = StructureType::DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV;
9675}
9676unsafe impl ExtendsImageCreateInfo for DedicatedAllocationImageCreateInfoNV<'_> {}
9677impl<'a> DedicatedAllocationImageCreateInfoNV<'a> {
9678    #[inline]
9679    pub fn dedicated_allocation(mut self, dedicated_allocation: bool) -> Self {
9680        self.dedicated_allocation = dedicated_allocation.into();
9681        self
9682    }
9683}
9684#[repr(C)]
9685#[cfg_attr(feature = "debug", derive(Debug))]
9686#[derive(Copy, Clone)]
9687#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDedicatedAllocationBufferCreateInfoNV.html>"]
9688#[must_use]
9689pub struct DedicatedAllocationBufferCreateInfoNV<'a> {
9690    pub s_type: StructureType,
9691    pub p_next: *const c_void,
9692    pub dedicated_allocation: Bool32,
9693    pub _marker: PhantomData<&'a ()>,
9694}
9695unsafe impl Send for DedicatedAllocationBufferCreateInfoNV<'_> {}
9696unsafe impl Sync for DedicatedAllocationBufferCreateInfoNV<'_> {}
9697impl ::core::default::Default for DedicatedAllocationBufferCreateInfoNV<'_> {
9698    #[inline]
9699    fn default() -> Self {
9700        Self {
9701            s_type: Self::STRUCTURE_TYPE,
9702            p_next: ::core::ptr::null(),
9703            dedicated_allocation: Bool32::default(),
9704            _marker: PhantomData,
9705        }
9706    }
9707}
9708unsafe impl<'a> TaggedStructure for DedicatedAllocationBufferCreateInfoNV<'a> {
9709    const STRUCTURE_TYPE: StructureType = StructureType::DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV;
9710}
9711unsafe impl ExtendsBufferCreateInfo for DedicatedAllocationBufferCreateInfoNV<'_> {}
9712impl<'a> DedicatedAllocationBufferCreateInfoNV<'a> {
9713    #[inline]
9714    pub fn dedicated_allocation(mut self, dedicated_allocation: bool) -> Self {
9715        self.dedicated_allocation = dedicated_allocation.into();
9716        self
9717    }
9718}
9719#[repr(C)]
9720#[cfg_attr(feature = "debug", derive(Debug))]
9721#[derive(Copy, Clone)]
9722#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDedicatedAllocationMemoryAllocateInfoNV.html>"]
9723#[must_use]
9724pub struct DedicatedAllocationMemoryAllocateInfoNV<'a> {
9725    pub s_type: StructureType,
9726    pub p_next: *const c_void,
9727    pub image: Image,
9728    pub buffer: Buffer,
9729    pub _marker: PhantomData<&'a ()>,
9730}
9731unsafe impl Send for DedicatedAllocationMemoryAllocateInfoNV<'_> {}
9732unsafe impl Sync for DedicatedAllocationMemoryAllocateInfoNV<'_> {}
9733impl ::core::default::Default for DedicatedAllocationMemoryAllocateInfoNV<'_> {
9734    #[inline]
9735    fn default() -> Self {
9736        Self {
9737            s_type: Self::STRUCTURE_TYPE,
9738            p_next: ::core::ptr::null(),
9739            image: Image::default(),
9740            buffer: Buffer::default(),
9741            _marker: PhantomData,
9742        }
9743    }
9744}
9745unsafe impl<'a> TaggedStructure for DedicatedAllocationMemoryAllocateInfoNV<'a> {
9746    const STRUCTURE_TYPE: StructureType =
9747        StructureType::DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV;
9748}
9749unsafe impl ExtendsMemoryAllocateInfo for DedicatedAllocationMemoryAllocateInfoNV<'_> {}
9750impl<'a> DedicatedAllocationMemoryAllocateInfoNV<'a> {
9751    #[inline]
9752    pub fn image(mut self, image: Image) -> Self {
9753        self.image = image;
9754        self
9755    }
9756    #[inline]
9757    pub fn buffer(mut self, buffer: Buffer) -> Self {
9758        self.buffer = buffer;
9759        self
9760    }
9761}
9762#[repr(C)]
9763#[cfg_attr(feature = "debug", derive(Debug))]
9764#[derive(Copy, Clone, Default)]
9765#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalImageFormatPropertiesNV.html>"]
9766#[must_use]
9767pub struct ExternalImageFormatPropertiesNV {
9768    pub image_format_properties: ImageFormatProperties,
9769    pub external_memory_features: ExternalMemoryFeatureFlagsNV,
9770    pub export_from_imported_handle_types: ExternalMemoryHandleTypeFlagsNV,
9771    pub compatible_handle_types: ExternalMemoryHandleTypeFlagsNV,
9772}
9773impl ExternalImageFormatPropertiesNV {
9774    #[inline]
9775    pub fn image_format_properties(
9776        mut self,
9777        image_format_properties: ImageFormatProperties,
9778    ) -> Self {
9779        self.image_format_properties = image_format_properties;
9780        self
9781    }
9782    #[inline]
9783    pub fn external_memory_features(
9784        mut self,
9785        external_memory_features: ExternalMemoryFeatureFlagsNV,
9786    ) -> Self {
9787        self.external_memory_features = external_memory_features;
9788        self
9789    }
9790    #[inline]
9791    pub fn export_from_imported_handle_types(
9792        mut self,
9793        export_from_imported_handle_types: ExternalMemoryHandleTypeFlagsNV,
9794    ) -> Self {
9795        self.export_from_imported_handle_types = export_from_imported_handle_types;
9796        self
9797    }
9798    #[inline]
9799    pub fn compatible_handle_types(
9800        mut self,
9801        compatible_handle_types: ExternalMemoryHandleTypeFlagsNV,
9802    ) -> Self {
9803        self.compatible_handle_types = compatible_handle_types;
9804        self
9805    }
9806}
9807#[repr(C)]
9808#[cfg_attr(feature = "debug", derive(Debug))]
9809#[derive(Copy, Clone)]
9810#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalMemoryImageCreateInfoNV.html>"]
9811#[must_use]
9812pub struct ExternalMemoryImageCreateInfoNV<'a> {
9813    pub s_type: StructureType,
9814    pub p_next: *const c_void,
9815    pub handle_types: ExternalMemoryHandleTypeFlagsNV,
9816    pub _marker: PhantomData<&'a ()>,
9817}
9818unsafe impl Send for ExternalMemoryImageCreateInfoNV<'_> {}
9819unsafe impl Sync for ExternalMemoryImageCreateInfoNV<'_> {}
9820impl ::core::default::Default for ExternalMemoryImageCreateInfoNV<'_> {
9821    #[inline]
9822    fn default() -> Self {
9823        Self {
9824            s_type: Self::STRUCTURE_TYPE,
9825            p_next: ::core::ptr::null(),
9826            handle_types: ExternalMemoryHandleTypeFlagsNV::default(),
9827            _marker: PhantomData,
9828        }
9829    }
9830}
9831unsafe impl<'a> TaggedStructure for ExternalMemoryImageCreateInfoNV<'a> {
9832    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV;
9833}
9834unsafe impl ExtendsImageCreateInfo for ExternalMemoryImageCreateInfoNV<'_> {}
9835impl<'a> ExternalMemoryImageCreateInfoNV<'a> {
9836    #[inline]
9837    pub fn handle_types(mut self, handle_types: ExternalMemoryHandleTypeFlagsNV) -> Self {
9838        self.handle_types = handle_types;
9839        self
9840    }
9841}
9842#[repr(C)]
9843#[cfg_attr(feature = "debug", derive(Debug))]
9844#[derive(Copy, Clone)]
9845#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMemoryAllocateInfoNV.html>"]
9846#[must_use]
9847pub struct ExportMemoryAllocateInfoNV<'a> {
9848    pub s_type: StructureType,
9849    pub p_next: *const c_void,
9850    pub handle_types: ExternalMemoryHandleTypeFlagsNV,
9851    pub _marker: PhantomData<&'a ()>,
9852}
9853unsafe impl Send for ExportMemoryAllocateInfoNV<'_> {}
9854unsafe impl Sync for ExportMemoryAllocateInfoNV<'_> {}
9855impl ::core::default::Default for ExportMemoryAllocateInfoNV<'_> {
9856    #[inline]
9857    fn default() -> Self {
9858        Self {
9859            s_type: Self::STRUCTURE_TYPE,
9860            p_next: ::core::ptr::null(),
9861            handle_types: ExternalMemoryHandleTypeFlagsNV::default(),
9862            _marker: PhantomData,
9863        }
9864    }
9865}
9866unsafe impl<'a> TaggedStructure for ExportMemoryAllocateInfoNV<'a> {
9867    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_MEMORY_ALLOCATE_INFO_NV;
9868}
9869unsafe impl ExtendsMemoryAllocateInfo for ExportMemoryAllocateInfoNV<'_> {}
9870impl<'a> ExportMemoryAllocateInfoNV<'a> {
9871    #[inline]
9872    pub fn handle_types(mut self, handle_types: ExternalMemoryHandleTypeFlagsNV) -> Self {
9873        self.handle_types = handle_types;
9874        self
9875    }
9876}
9877#[repr(C)]
9878#[cfg_attr(feature = "debug", derive(Debug))]
9879#[derive(Copy, Clone)]
9880#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryWin32HandleInfoNV.html>"]
9881#[must_use]
9882pub struct ImportMemoryWin32HandleInfoNV<'a> {
9883    pub s_type: StructureType,
9884    pub p_next: *const c_void,
9885    pub handle_type: ExternalMemoryHandleTypeFlagsNV,
9886    pub handle: HANDLE,
9887    pub _marker: PhantomData<&'a ()>,
9888}
9889unsafe impl Send for ImportMemoryWin32HandleInfoNV<'_> {}
9890unsafe impl Sync for ImportMemoryWin32HandleInfoNV<'_> {}
9891impl ::core::default::Default for ImportMemoryWin32HandleInfoNV<'_> {
9892    #[inline]
9893    fn default() -> Self {
9894        Self {
9895            s_type: Self::STRUCTURE_TYPE,
9896            p_next: ::core::ptr::null(),
9897            handle_type: ExternalMemoryHandleTypeFlagsNV::default(),
9898            handle: unsafe { ::core::mem::zeroed() },
9899            _marker: PhantomData,
9900        }
9901    }
9902}
9903unsafe impl<'a> TaggedStructure for ImportMemoryWin32HandleInfoNV<'a> {
9904    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_WIN32_HANDLE_INFO_NV;
9905}
9906unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryWin32HandleInfoNV<'_> {}
9907impl<'a> ImportMemoryWin32HandleInfoNV<'a> {
9908    #[inline]
9909    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlagsNV) -> Self {
9910        self.handle_type = handle_type;
9911        self
9912    }
9913    #[inline]
9914    pub fn handle(mut self, handle: HANDLE) -> Self {
9915        self.handle = handle;
9916        self
9917    }
9918}
9919#[repr(C)]
9920#[cfg_attr(feature = "debug", derive(Debug))]
9921#[derive(Copy, Clone)]
9922#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMemoryWin32HandleInfoNV.html>"]
9923#[must_use]
9924pub struct ExportMemoryWin32HandleInfoNV<'a> {
9925    pub s_type: StructureType,
9926    pub p_next: *const c_void,
9927    pub p_attributes: *const SECURITY_ATTRIBUTES,
9928    pub dw_access: DWORD,
9929    pub _marker: PhantomData<&'a ()>,
9930}
9931unsafe impl Send for ExportMemoryWin32HandleInfoNV<'_> {}
9932unsafe impl Sync for ExportMemoryWin32HandleInfoNV<'_> {}
9933impl ::core::default::Default for ExportMemoryWin32HandleInfoNV<'_> {
9934    #[inline]
9935    fn default() -> Self {
9936        Self {
9937            s_type: Self::STRUCTURE_TYPE,
9938            p_next: ::core::ptr::null(),
9939            p_attributes: ::core::ptr::null(),
9940            dw_access: DWORD::default(),
9941            _marker: PhantomData,
9942        }
9943    }
9944}
9945unsafe impl<'a> TaggedStructure for ExportMemoryWin32HandleInfoNV<'a> {
9946    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_MEMORY_WIN32_HANDLE_INFO_NV;
9947}
9948unsafe impl ExtendsMemoryAllocateInfo for ExportMemoryWin32HandleInfoNV<'_> {}
9949impl<'a> ExportMemoryWin32HandleInfoNV<'a> {
9950    #[inline]
9951    pub fn attributes(mut self, attributes: &'a SECURITY_ATTRIBUTES) -> Self {
9952        self.p_attributes = attributes;
9953        self
9954    }
9955    #[inline]
9956    pub fn dw_access(mut self, dw_access: DWORD) -> Self {
9957        self.dw_access = dw_access;
9958        self
9959    }
9960}
9961#[repr(C)]
9962#[cfg_attr(feature = "debug", derive(Debug))]
9963#[derive(Copy, Clone)]
9964#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWin32KeyedMutexAcquireReleaseInfoNV.html>"]
9965#[must_use]
9966pub struct Win32KeyedMutexAcquireReleaseInfoNV<'a> {
9967    pub s_type: StructureType,
9968    pub p_next: *const c_void,
9969    pub acquire_count: u32,
9970    pub p_acquire_syncs: *const DeviceMemory,
9971    pub p_acquire_keys: *const u64,
9972    pub p_acquire_timeout_milliseconds: *const u32,
9973    pub release_count: u32,
9974    pub p_release_syncs: *const DeviceMemory,
9975    pub p_release_keys: *const u64,
9976    pub _marker: PhantomData<&'a ()>,
9977}
9978unsafe impl Send for Win32KeyedMutexAcquireReleaseInfoNV<'_> {}
9979unsafe impl Sync for Win32KeyedMutexAcquireReleaseInfoNV<'_> {}
9980impl ::core::default::Default for Win32KeyedMutexAcquireReleaseInfoNV<'_> {
9981    #[inline]
9982    fn default() -> Self {
9983        Self {
9984            s_type: Self::STRUCTURE_TYPE,
9985            p_next: ::core::ptr::null(),
9986            acquire_count: u32::default(),
9987            p_acquire_syncs: ::core::ptr::null(),
9988            p_acquire_keys: ::core::ptr::null(),
9989            p_acquire_timeout_milliseconds: ::core::ptr::null(),
9990            release_count: u32::default(),
9991            p_release_syncs: ::core::ptr::null(),
9992            p_release_keys: ::core::ptr::null(),
9993            _marker: PhantomData,
9994        }
9995    }
9996}
9997unsafe impl<'a> TaggedStructure for Win32KeyedMutexAcquireReleaseInfoNV<'a> {
9998    const STRUCTURE_TYPE: StructureType = StructureType::WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV;
9999}
10000unsafe impl ExtendsSubmitInfo for Win32KeyedMutexAcquireReleaseInfoNV<'_> {}
10001unsafe impl ExtendsSubmitInfo2 for Win32KeyedMutexAcquireReleaseInfoNV<'_> {}
10002impl<'a> Win32KeyedMutexAcquireReleaseInfoNV<'a> {
10003    #[inline]
10004    pub fn acquire_syncs(mut self, acquire_syncs: &'a [DeviceMemory]) -> Self {
10005        self.acquire_count = acquire_syncs.len() as _;
10006        self.p_acquire_syncs = acquire_syncs.as_ptr();
10007        self
10008    }
10009    #[inline]
10010    pub fn acquire_keys(mut self, acquire_keys: &'a [u64]) -> Self {
10011        self.acquire_count = acquire_keys.len() as _;
10012        self.p_acquire_keys = acquire_keys.as_ptr();
10013        self
10014    }
10015    #[inline]
10016    pub fn acquire_timeout_milliseconds(mut self, acquire_timeout_milliseconds: &'a [u32]) -> Self {
10017        self.acquire_count = acquire_timeout_milliseconds.len() as _;
10018        self.p_acquire_timeout_milliseconds = acquire_timeout_milliseconds.as_ptr();
10019        self
10020    }
10021    #[inline]
10022    pub fn release_syncs(mut self, release_syncs: &'a [DeviceMemory]) -> Self {
10023        self.release_count = release_syncs.len() as _;
10024        self.p_release_syncs = release_syncs.as_ptr();
10025        self
10026    }
10027    #[inline]
10028    pub fn release_keys(mut self, release_keys: &'a [u64]) -> Self {
10029        self.release_count = release_keys.len() as _;
10030        self.p_release_keys = release_keys.as_ptr();
10031        self
10032    }
10033}
10034#[repr(C)]
10035#[cfg_attr(feature = "debug", derive(Debug))]
10036#[derive(Copy, Clone)]
10037#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.html>"]
10038#[must_use]
10039pub struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'a> {
10040    pub s_type: StructureType,
10041    pub p_next: *mut c_void,
10042    pub device_generated_commands: Bool32,
10043    pub _marker: PhantomData<&'a ()>,
10044}
10045unsafe impl Send for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'_> {}
10046unsafe impl Sync for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'_> {}
10047impl ::core::default::Default for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'_> {
10048    #[inline]
10049    fn default() -> Self {
10050        Self {
10051            s_type: Self::STRUCTURE_TYPE,
10052            p_next: ::core::ptr::null_mut(),
10053            device_generated_commands: Bool32::default(),
10054            _marker: PhantomData,
10055        }
10056    }
10057}
10058unsafe impl<'a> TaggedStructure for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'a> {
10059    const STRUCTURE_TYPE: StructureType =
10060        StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV;
10061}
10062unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'_> {}
10063unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'_> {}
10064impl<'a> PhysicalDeviceDeviceGeneratedCommandsFeaturesNV<'a> {
10065    #[inline]
10066    pub fn device_generated_commands(mut self, device_generated_commands: bool) -> Self {
10067        self.device_generated_commands = device_generated_commands.into();
10068        self
10069    }
10070}
10071#[repr(C)]
10072#[cfg_attr(feature = "debug", derive(Debug))]
10073#[derive(Copy, Clone)]
10074#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.html>"]
10075#[must_use]
10076pub struct PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'a> {
10077    pub s_type: StructureType,
10078    pub p_next: *mut c_void,
10079    pub device_generated_compute: Bool32,
10080    pub device_generated_compute_pipelines: Bool32,
10081    pub device_generated_compute_capture_replay: Bool32,
10082    pub _marker: PhantomData<&'a ()>,
10083}
10084unsafe impl Send for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'_> {}
10085unsafe impl Sync for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'_> {}
10086impl ::core::default::Default for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'_> {
10087    #[inline]
10088    fn default() -> Self {
10089        Self {
10090            s_type: Self::STRUCTURE_TYPE,
10091            p_next: ::core::ptr::null_mut(),
10092            device_generated_compute: Bool32::default(),
10093            device_generated_compute_pipelines: Bool32::default(),
10094            device_generated_compute_capture_replay: Bool32::default(),
10095            _marker: PhantomData,
10096        }
10097    }
10098}
10099unsafe impl<'a> TaggedStructure for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'a> {
10100    const STRUCTURE_TYPE: StructureType =
10101        StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV;
10102}
10103unsafe impl ExtendsPhysicalDeviceFeatures2
10104    for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'_>
10105{
10106}
10107unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'_> {}
10108impl<'a> PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV<'a> {
10109    #[inline]
10110    pub fn device_generated_compute(mut self, device_generated_compute: bool) -> Self {
10111        self.device_generated_compute = device_generated_compute.into();
10112        self
10113    }
10114    #[inline]
10115    pub fn device_generated_compute_pipelines(
10116        mut self,
10117        device_generated_compute_pipelines: bool,
10118    ) -> Self {
10119        self.device_generated_compute_pipelines = device_generated_compute_pipelines.into();
10120        self
10121    }
10122    #[inline]
10123    pub fn device_generated_compute_capture_replay(
10124        mut self,
10125        device_generated_compute_capture_replay: bool,
10126    ) -> Self {
10127        self.device_generated_compute_capture_replay =
10128            device_generated_compute_capture_replay.into();
10129        self
10130    }
10131}
10132#[repr(C)]
10133#[cfg_attr(feature = "debug", derive(Debug))]
10134#[derive(Copy, Clone)]
10135#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDevicePrivateDataCreateInfo.html>"]
10136#[must_use]
10137pub struct DevicePrivateDataCreateInfo<'a> {
10138    pub s_type: StructureType,
10139    pub p_next: *const c_void,
10140    pub private_data_slot_request_count: u32,
10141    pub _marker: PhantomData<&'a ()>,
10142}
10143unsafe impl Send for DevicePrivateDataCreateInfo<'_> {}
10144unsafe impl Sync for DevicePrivateDataCreateInfo<'_> {}
10145impl ::core::default::Default for DevicePrivateDataCreateInfo<'_> {
10146    #[inline]
10147    fn default() -> Self {
10148        Self {
10149            s_type: Self::STRUCTURE_TYPE,
10150            p_next: ::core::ptr::null(),
10151            private_data_slot_request_count: u32::default(),
10152            _marker: PhantomData,
10153        }
10154    }
10155}
10156unsafe impl<'a> TaggedStructure for DevicePrivateDataCreateInfo<'a> {
10157    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_PRIVATE_DATA_CREATE_INFO;
10158}
10159unsafe impl ExtendsDeviceCreateInfo for DevicePrivateDataCreateInfo<'_> {}
10160impl<'a> DevicePrivateDataCreateInfo<'a> {
10161    #[inline]
10162    pub fn private_data_slot_request_count(mut self, private_data_slot_request_count: u32) -> Self {
10163        self.private_data_slot_request_count = private_data_slot_request_count;
10164        self
10165    }
10166}
10167#[repr(C)]
10168#[cfg_attr(feature = "debug", derive(Debug))]
10169#[derive(Copy, Clone)]
10170#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPrivateDataSlotCreateInfo.html>"]
10171#[must_use]
10172pub struct PrivateDataSlotCreateInfo<'a> {
10173    pub s_type: StructureType,
10174    pub p_next: *const c_void,
10175    pub flags: PrivateDataSlotCreateFlags,
10176    pub _marker: PhantomData<&'a ()>,
10177}
10178unsafe impl Send for PrivateDataSlotCreateInfo<'_> {}
10179unsafe impl Sync for PrivateDataSlotCreateInfo<'_> {}
10180impl ::core::default::Default for PrivateDataSlotCreateInfo<'_> {
10181    #[inline]
10182    fn default() -> Self {
10183        Self {
10184            s_type: Self::STRUCTURE_TYPE,
10185            p_next: ::core::ptr::null(),
10186            flags: PrivateDataSlotCreateFlags::default(),
10187            _marker: PhantomData,
10188        }
10189    }
10190}
10191unsafe impl<'a> TaggedStructure for PrivateDataSlotCreateInfo<'a> {
10192    const STRUCTURE_TYPE: StructureType = StructureType::PRIVATE_DATA_SLOT_CREATE_INFO;
10193}
10194impl<'a> PrivateDataSlotCreateInfo<'a> {
10195    #[inline]
10196    pub fn flags(mut self, flags: PrivateDataSlotCreateFlags) -> Self {
10197        self.flags = flags;
10198        self
10199    }
10200}
10201#[repr(C)]
10202#[cfg_attr(feature = "debug", derive(Debug))]
10203#[derive(Copy, Clone)]
10204#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePrivateDataFeatures.html>"]
10205#[must_use]
10206pub struct PhysicalDevicePrivateDataFeatures<'a> {
10207    pub s_type: StructureType,
10208    pub p_next: *mut c_void,
10209    pub private_data: Bool32,
10210    pub _marker: PhantomData<&'a ()>,
10211}
10212unsafe impl Send for PhysicalDevicePrivateDataFeatures<'_> {}
10213unsafe impl Sync for PhysicalDevicePrivateDataFeatures<'_> {}
10214impl ::core::default::Default for PhysicalDevicePrivateDataFeatures<'_> {
10215    #[inline]
10216    fn default() -> Self {
10217        Self {
10218            s_type: Self::STRUCTURE_TYPE,
10219            p_next: ::core::ptr::null_mut(),
10220            private_data: Bool32::default(),
10221            _marker: PhantomData,
10222        }
10223    }
10224}
10225unsafe impl<'a> TaggedStructure for PhysicalDevicePrivateDataFeatures<'a> {
10226    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES;
10227}
10228unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePrivateDataFeatures<'_> {}
10229unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePrivateDataFeatures<'_> {}
10230impl<'a> PhysicalDevicePrivateDataFeatures<'a> {
10231    #[inline]
10232    pub fn private_data(mut self, private_data: bool) -> Self {
10233        self.private_data = private_data.into();
10234        self
10235    }
10236}
10237#[repr(C)]
10238#[cfg_attr(feature = "debug", derive(Debug))]
10239#[derive(Copy, Clone)]
10240#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV.html>"]
10241#[must_use]
10242pub struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'a> {
10243    pub s_type: StructureType,
10244    pub p_next: *mut c_void,
10245    pub max_graphics_shader_group_count: u32,
10246    pub max_indirect_sequence_count: u32,
10247    pub max_indirect_commands_token_count: u32,
10248    pub max_indirect_commands_stream_count: u32,
10249    pub max_indirect_commands_token_offset: u32,
10250    pub max_indirect_commands_stream_stride: u32,
10251    pub min_sequences_count_buffer_offset_alignment: u32,
10252    pub min_sequences_index_buffer_offset_alignment: u32,
10253    pub min_indirect_commands_buffer_offset_alignment: u32,
10254    pub _marker: PhantomData<&'a ()>,
10255}
10256unsafe impl Send for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'_> {}
10257unsafe impl Sync for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'_> {}
10258impl ::core::default::Default for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'_> {
10259    #[inline]
10260    fn default() -> Self {
10261        Self {
10262            s_type: Self::STRUCTURE_TYPE,
10263            p_next: ::core::ptr::null_mut(),
10264            max_graphics_shader_group_count: u32::default(),
10265            max_indirect_sequence_count: u32::default(),
10266            max_indirect_commands_token_count: u32::default(),
10267            max_indirect_commands_stream_count: u32::default(),
10268            max_indirect_commands_token_offset: u32::default(),
10269            max_indirect_commands_stream_stride: u32::default(),
10270            min_sequences_count_buffer_offset_alignment: u32::default(),
10271            min_sequences_index_buffer_offset_alignment: u32::default(),
10272            min_indirect_commands_buffer_offset_alignment: u32::default(),
10273            _marker: PhantomData,
10274        }
10275    }
10276}
10277unsafe impl<'a> TaggedStructure for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'a> {
10278    const STRUCTURE_TYPE: StructureType =
10279        StructureType::PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV;
10280}
10281unsafe impl ExtendsPhysicalDeviceProperties2
10282    for PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'_>
10283{
10284}
10285impl<'a> PhysicalDeviceDeviceGeneratedCommandsPropertiesNV<'a> {
10286    #[inline]
10287    pub fn max_graphics_shader_group_count(mut self, max_graphics_shader_group_count: u32) -> Self {
10288        self.max_graphics_shader_group_count = max_graphics_shader_group_count;
10289        self
10290    }
10291    #[inline]
10292    pub fn max_indirect_sequence_count(mut self, max_indirect_sequence_count: u32) -> Self {
10293        self.max_indirect_sequence_count = max_indirect_sequence_count;
10294        self
10295    }
10296    #[inline]
10297    pub fn max_indirect_commands_token_count(
10298        mut self,
10299        max_indirect_commands_token_count: u32,
10300    ) -> Self {
10301        self.max_indirect_commands_token_count = max_indirect_commands_token_count;
10302        self
10303    }
10304    #[inline]
10305    pub fn max_indirect_commands_stream_count(
10306        mut self,
10307        max_indirect_commands_stream_count: u32,
10308    ) -> Self {
10309        self.max_indirect_commands_stream_count = max_indirect_commands_stream_count;
10310        self
10311    }
10312    #[inline]
10313    pub fn max_indirect_commands_token_offset(
10314        mut self,
10315        max_indirect_commands_token_offset: u32,
10316    ) -> Self {
10317        self.max_indirect_commands_token_offset = max_indirect_commands_token_offset;
10318        self
10319    }
10320    #[inline]
10321    pub fn max_indirect_commands_stream_stride(
10322        mut self,
10323        max_indirect_commands_stream_stride: u32,
10324    ) -> Self {
10325        self.max_indirect_commands_stream_stride = max_indirect_commands_stream_stride;
10326        self
10327    }
10328    #[inline]
10329    pub fn min_sequences_count_buffer_offset_alignment(
10330        mut self,
10331        min_sequences_count_buffer_offset_alignment: u32,
10332    ) -> Self {
10333        self.min_sequences_count_buffer_offset_alignment =
10334            min_sequences_count_buffer_offset_alignment;
10335        self
10336    }
10337    #[inline]
10338    pub fn min_sequences_index_buffer_offset_alignment(
10339        mut self,
10340        min_sequences_index_buffer_offset_alignment: u32,
10341    ) -> Self {
10342        self.min_sequences_index_buffer_offset_alignment =
10343            min_sequences_index_buffer_offset_alignment;
10344        self
10345    }
10346    #[inline]
10347    pub fn min_indirect_commands_buffer_offset_alignment(
10348        mut self,
10349        min_indirect_commands_buffer_offset_alignment: u32,
10350    ) -> Self {
10351        self.min_indirect_commands_buffer_offset_alignment =
10352            min_indirect_commands_buffer_offset_alignment;
10353        self
10354    }
10355}
10356#[repr(C)]
10357#[cfg_attr(feature = "debug", derive(Debug))]
10358#[derive(Copy, Clone)]
10359#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiDrawPropertiesEXT.html>"]
10360#[must_use]
10361pub struct PhysicalDeviceMultiDrawPropertiesEXT<'a> {
10362    pub s_type: StructureType,
10363    pub p_next: *mut c_void,
10364    pub max_multi_draw_count: u32,
10365    pub _marker: PhantomData<&'a ()>,
10366}
10367unsafe impl Send for PhysicalDeviceMultiDrawPropertiesEXT<'_> {}
10368unsafe impl Sync for PhysicalDeviceMultiDrawPropertiesEXT<'_> {}
10369impl ::core::default::Default for PhysicalDeviceMultiDrawPropertiesEXT<'_> {
10370    #[inline]
10371    fn default() -> Self {
10372        Self {
10373            s_type: Self::STRUCTURE_TYPE,
10374            p_next: ::core::ptr::null_mut(),
10375            max_multi_draw_count: u32::default(),
10376            _marker: PhantomData,
10377        }
10378    }
10379}
10380unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiDrawPropertiesEXT<'a> {
10381    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT;
10382}
10383unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMultiDrawPropertiesEXT<'_> {}
10384impl<'a> PhysicalDeviceMultiDrawPropertiesEXT<'a> {
10385    #[inline]
10386    pub fn max_multi_draw_count(mut self, max_multi_draw_count: u32) -> Self {
10387        self.max_multi_draw_count = max_multi_draw_count;
10388        self
10389    }
10390}
10391#[repr(C)]
10392#[cfg_attr(feature = "debug", derive(Debug))]
10393#[derive(Copy, Clone)]
10394#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsShaderGroupCreateInfoNV.html>"]
10395#[must_use]
10396pub struct GraphicsShaderGroupCreateInfoNV<'a> {
10397    pub s_type: StructureType,
10398    pub p_next: *const c_void,
10399    pub stage_count: u32,
10400    pub p_stages: *const PipelineShaderStageCreateInfo<'a>,
10401    pub p_vertex_input_state: *const PipelineVertexInputStateCreateInfo<'a>,
10402    pub p_tessellation_state: *const PipelineTessellationStateCreateInfo<'a>,
10403    pub _marker: PhantomData<&'a ()>,
10404}
10405unsafe impl Send for GraphicsShaderGroupCreateInfoNV<'_> {}
10406unsafe impl Sync for GraphicsShaderGroupCreateInfoNV<'_> {}
10407impl ::core::default::Default for GraphicsShaderGroupCreateInfoNV<'_> {
10408    #[inline]
10409    fn default() -> Self {
10410        Self {
10411            s_type: Self::STRUCTURE_TYPE,
10412            p_next: ::core::ptr::null(),
10413            stage_count: u32::default(),
10414            p_stages: ::core::ptr::null(),
10415            p_vertex_input_state: ::core::ptr::null(),
10416            p_tessellation_state: ::core::ptr::null(),
10417            _marker: PhantomData,
10418        }
10419    }
10420}
10421unsafe impl<'a> TaggedStructure for GraphicsShaderGroupCreateInfoNV<'a> {
10422    const STRUCTURE_TYPE: StructureType = StructureType::GRAPHICS_SHADER_GROUP_CREATE_INFO_NV;
10423}
10424impl<'a> GraphicsShaderGroupCreateInfoNV<'a> {
10425    #[inline]
10426    pub fn stages(mut self, stages: &'a [PipelineShaderStageCreateInfo<'a>]) -> Self {
10427        self.stage_count = stages.len() as _;
10428        self.p_stages = stages.as_ptr();
10429        self
10430    }
10431    #[inline]
10432    pub fn vertex_input_state(
10433        mut self,
10434        vertex_input_state: &'a PipelineVertexInputStateCreateInfo<'a>,
10435    ) -> Self {
10436        self.p_vertex_input_state = vertex_input_state;
10437        self
10438    }
10439    #[inline]
10440    pub fn tessellation_state(
10441        mut self,
10442        tessellation_state: &'a PipelineTessellationStateCreateInfo<'a>,
10443    ) -> Self {
10444        self.p_tessellation_state = tessellation_state;
10445        self
10446    }
10447}
10448#[repr(C)]
10449#[cfg_attr(feature = "debug", derive(Debug))]
10450#[derive(Copy, Clone)]
10451#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineShaderGroupsCreateInfoNV.html>"]
10452#[must_use]
10453pub struct GraphicsPipelineShaderGroupsCreateInfoNV<'a> {
10454    pub s_type: StructureType,
10455    pub p_next: *const c_void,
10456    pub group_count: u32,
10457    pub p_groups: *const GraphicsShaderGroupCreateInfoNV<'a>,
10458    pub pipeline_count: u32,
10459    pub p_pipelines: *const Pipeline,
10460    pub _marker: PhantomData<&'a ()>,
10461}
10462unsafe impl Send for GraphicsPipelineShaderGroupsCreateInfoNV<'_> {}
10463unsafe impl Sync for GraphicsPipelineShaderGroupsCreateInfoNV<'_> {}
10464impl ::core::default::Default for GraphicsPipelineShaderGroupsCreateInfoNV<'_> {
10465    #[inline]
10466    fn default() -> Self {
10467        Self {
10468            s_type: Self::STRUCTURE_TYPE,
10469            p_next: ::core::ptr::null(),
10470            group_count: u32::default(),
10471            p_groups: ::core::ptr::null(),
10472            pipeline_count: u32::default(),
10473            p_pipelines: ::core::ptr::null(),
10474            _marker: PhantomData,
10475        }
10476    }
10477}
10478unsafe impl<'a> TaggedStructure for GraphicsPipelineShaderGroupsCreateInfoNV<'a> {
10479    const STRUCTURE_TYPE: StructureType =
10480        StructureType::GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV;
10481}
10482unsafe impl ExtendsGraphicsPipelineCreateInfo for GraphicsPipelineShaderGroupsCreateInfoNV<'_> {}
10483impl<'a> GraphicsPipelineShaderGroupsCreateInfoNV<'a> {
10484    #[inline]
10485    pub fn groups(mut self, groups: &'a [GraphicsShaderGroupCreateInfoNV<'a>]) -> Self {
10486        self.group_count = groups.len() as _;
10487        self.p_groups = groups.as_ptr();
10488        self
10489    }
10490    #[inline]
10491    pub fn pipelines(mut self, pipelines: &'a [Pipeline]) -> Self {
10492        self.pipeline_count = pipelines.len() as _;
10493        self.p_pipelines = pipelines.as_ptr();
10494        self
10495    }
10496}
10497#[repr(C)]
10498#[cfg_attr(feature = "debug", derive(Debug))]
10499#[derive(Copy, Clone, Default)]
10500#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindShaderGroupIndirectCommandNV.html>"]
10501#[must_use]
10502pub struct BindShaderGroupIndirectCommandNV {
10503    pub group_index: u32,
10504}
10505impl BindShaderGroupIndirectCommandNV {
10506    #[inline]
10507    pub fn group_index(mut self, group_index: u32) -> Self {
10508        self.group_index = group_index;
10509        self
10510    }
10511}
10512#[repr(C)]
10513#[cfg_attr(feature = "debug", derive(Debug))]
10514#[derive(Copy, Clone, Default)]
10515#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindIndexBufferIndirectCommandNV.html>"]
10516#[must_use]
10517pub struct BindIndexBufferIndirectCommandNV {
10518    pub buffer_address: DeviceAddress,
10519    pub size: u32,
10520    pub index_type: IndexType,
10521}
10522impl BindIndexBufferIndirectCommandNV {
10523    #[inline]
10524    pub fn buffer_address(mut self, buffer_address: DeviceAddress) -> Self {
10525        self.buffer_address = buffer_address;
10526        self
10527    }
10528    #[inline]
10529    pub fn size(mut self, size: u32) -> Self {
10530        self.size = size;
10531        self
10532    }
10533    #[inline]
10534    pub fn index_type(mut self, index_type: IndexType) -> Self {
10535        self.index_type = index_type;
10536        self
10537    }
10538}
10539#[repr(C)]
10540#[cfg_attr(feature = "debug", derive(Debug))]
10541#[derive(Copy, Clone, Default)]
10542#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindVertexBufferIndirectCommandNV.html>"]
10543#[must_use]
10544pub struct BindVertexBufferIndirectCommandNV {
10545    pub buffer_address: DeviceAddress,
10546    pub size: u32,
10547    pub stride: u32,
10548}
10549impl BindVertexBufferIndirectCommandNV {
10550    #[inline]
10551    pub fn buffer_address(mut self, buffer_address: DeviceAddress) -> Self {
10552        self.buffer_address = buffer_address;
10553        self
10554    }
10555    #[inline]
10556    pub fn size(mut self, size: u32) -> Self {
10557        self.size = size;
10558        self
10559    }
10560    #[inline]
10561    pub fn stride(mut self, stride: u32) -> Self {
10562        self.stride = stride;
10563        self
10564    }
10565}
10566#[repr(C)]
10567#[cfg_attr(feature = "debug", derive(Debug))]
10568#[derive(Copy, Clone, Default)]
10569#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSetStateFlagsIndirectCommandNV.html>"]
10570#[must_use]
10571pub struct SetStateFlagsIndirectCommandNV {
10572    pub data: u32,
10573}
10574impl SetStateFlagsIndirectCommandNV {
10575    #[inline]
10576    pub fn data(mut self, data: u32) -> Self {
10577        self.data = data;
10578        self
10579    }
10580}
10581#[repr(C)]
10582#[cfg_attr(feature = "debug", derive(Debug))]
10583#[derive(Copy, Clone, Default)]
10584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsStreamNV.html>"]
10585#[must_use]
10586pub struct IndirectCommandsStreamNV {
10587    pub buffer: Buffer,
10588    pub offset: DeviceSize,
10589}
10590impl IndirectCommandsStreamNV {
10591    #[inline]
10592    pub fn buffer(mut self, buffer: Buffer) -> Self {
10593        self.buffer = buffer;
10594        self
10595    }
10596    #[inline]
10597    pub fn offset(mut self, offset: DeviceSize) -> Self {
10598        self.offset = offset;
10599        self
10600    }
10601}
10602#[repr(C)]
10603#[cfg_attr(feature = "debug", derive(Debug))]
10604#[derive(Copy, Clone)]
10605#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutTokenNV.html>"]
10606#[must_use]
10607pub struct IndirectCommandsLayoutTokenNV<'a> {
10608    pub s_type: StructureType,
10609    pub p_next: *const c_void,
10610    pub token_type: IndirectCommandsTokenTypeNV,
10611    pub stream: u32,
10612    pub offset: u32,
10613    pub vertex_binding_unit: u32,
10614    pub vertex_dynamic_stride: Bool32,
10615    pub pushconstant_pipeline_layout: PipelineLayout,
10616    pub pushconstant_shader_stage_flags: ShaderStageFlags,
10617    pub pushconstant_offset: u32,
10618    pub pushconstant_size: u32,
10619    pub indirect_state_flags: IndirectStateFlagsNV,
10620    pub index_type_count: u32,
10621    pub p_index_types: *const IndexType,
10622    pub p_index_type_values: *const u32,
10623    pub _marker: PhantomData<&'a ()>,
10624}
10625unsafe impl Send for IndirectCommandsLayoutTokenNV<'_> {}
10626unsafe impl Sync for IndirectCommandsLayoutTokenNV<'_> {}
10627impl ::core::default::Default for IndirectCommandsLayoutTokenNV<'_> {
10628    #[inline]
10629    fn default() -> Self {
10630        Self {
10631            s_type: Self::STRUCTURE_TYPE,
10632            p_next: ::core::ptr::null(),
10633            token_type: IndirectCommandsTokenTypeNV::default(),
10634            stream: u32::default(),
10635            offset: u32::default(),
10636            vertex_binding_unit: u32::default(),
10637            vertex_dynamic_stride: Bool32::default(),
10638            pushconstant_pipeline_layout: PipelineLayout::default(),
10639            pushconstant_shader_stage_flags: ShaderStageFlags::default(),
10640            pushconstant_offset: u32::default(),
10641            pushconstant_size: u32::default(),
10642            indirect_state_flags: IndirectStateFlagsNV::default(),
10643            index_type_count: u32::default(),
10644            p_index_types: ::core::ptr::null(),
10645            p_index_type_values: ::core::ptr::null(),
10646            _marker: PhantomData,
10647        }
10648    }
10649}
10650unsafe impl<'a> TaggedStructure for IndirectCommandsLayoutTokenNV<'a> {
10651    const STRUCTURE_TYPE: StructureType = StructureType::INDIRECT_COMMANDS_LAYOUT_TOKEN_NV;
10652}
10653impl<'a> IndirectCommandsLayoutTokenNV<'a> {
10654    #[inline]
10655    pub fn token_type(mut self, token_type: IndirectCommandsTokenTypeNV) -> Self {
10656        self.token_type = token_type;
10657        self
10658    }
10659    #[inline]
10660    pub fn stream(mut self, stream: u32) -> Self {
10661        self.stream = stream;
10662        self
10663    }
10664    #[inline]
10665    pub fn offset(mut self, offset: u32) -> Self {
10666        self.offset = offset;
10667        self
10668    }
10669    #[inline]
10670    pub fn vertex_binding_unit(mut self, vertex_binding_unit: u32) -> Self {
10671        self.vertex_binding_unit = vertex_binding_unit;
10672        self
10673    }
10674    #[inline]
10675    pub fn vertex_dynamic_stride(mut self, vertex_dynamic_stride: bool) -> Self {
10676        self.vertex_dynamic_stride = vertex_dynamic_stride.into();
10677        self
10678    }
10679    #[inline]
10680    pub fn pushconstant_pipeline_layout(
10681        mut self,
10682        pushconstant_pipeline_layout: PipelineLayout,
10683    ) -> Self {
10684        self.pushconstant_pipeline_layout = pushconstant_pipeline_layout;
10685        self
10686    }
10687    #[inline]
10688    pub fn pushconstant_shader_stage_flags(
10689        mut self,
10690        pushconstant_shader_stage_flags: ShaderStageFlags,
10691    ) -> Self {
10692        self.pushconstant_shader_stage_flags = pushconstant_shader_stage_flags;
10693        self
10694    }
10695    #[inline]
10696    pub fn pushconstant_offset(mut self, pushconstant_offset: u32) -> Self {
10697        self.pushconstant_offset = pushconstant_offset;
10698        self
10699    }
10700    #[inline]
10701    pub fn pushconstant_size(mut self, pushconstant_size: u32) -> Self {
10702        self.pushconstant_size = pushconstant_size;
10703        self
10704    }
10705    #[inline]
10706    pub fn indirect_state_flags(mut self, indirect_state_flags: IndirectStateFlagsNV) -> Self {
10707        self.indirect_state_flags = indirect_state_flags;
10708        self
10709    }
10710    #[inline]
10711    pub fn index_types(mut self, index_types: &'a [IndexType]) -> Self {
10712        self.index_type_count = index_types.len() as _;
10713        self.p_index_types = index_types.as_ptr();
10714        self
10715    }
10716    #[inline]
10717    pub fn index_type_values(mut self, index_type_values: &'a [u32]) -> Self {
10718        self.index_type_count = index_type_values.len() as _;
10719        self.p_index_type_values = index_type_values.as_ptr();
10720        self
10721    }
10722}
10723#[repr(C)]
10724#[cfg_attr(feature = "debug", derive(Debug))]
10725#[derive(Copy, Clone)]
10726#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutCreateInfoNV.html>"]
10727#[must_use]
10728pub struct IndirectCommandsLayoutCreateInfoNV<'a> {
10729    pub s_type: StructureType,
10730    pub p_next: *const c_void,
10731    pub flags: IndirectCommandsLayoutUsageFlagsNV,
10732    pub pipeline_bind_point: PipelineBindPoint,
10733    pub token_count: u32,
10734    pub p_tokens: *const IndirectCommandsLayoutTokenNV<'a>,
10735    pub stream_count: u32,
10736    pub p_stream_strides: *const u32,
10737    pub _marker: PhantomData<&'a ()>,
10738}
10739unsafe impl Send for IndirectCommandsLayoutCreateInfoNV<'_> {}
10740unsafe impl Sync for IndirectCommandsLayoutCreateInfoNV<'_> {}
10741impl ::core::default::Default for IndirectCommandsLayoutCreateInfoNV<'_> {
10742    #[inline]
10743    fn default() -> Self {
10744        Self {
10745            s_type: Self::STRUCTURE_TYPE,
10746            p_next: ::core::ptr::null(),
10747            flags: IndirectCommandsLayoutUsageFlagsNV::default(),
10748            pipeline_bind_point: PipelineBindPoint::default(),
10749            token_count: u32::default(),
10750            p_tokens: ::core::ptr::null(),
10751            stream_count: u32::default(),
10752            p_stream_strides: ::core::ptr::null(),
10753            _marker: PhantomData,
10754        }
10755    }
10756}
10757unsafe impl<'a> TaggedStructure for IndirectCommandsLayoutCreateInfoNV<'a> {
10758    const STRUCTURE_TYPE: StructureType = StructureType::INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV;
10759}
10760impl<'a> IndirectCommandsLayoutCreateInfoNV<'a> {
10761    #[inline]
10762    pub fn flags(mut self, flags: IndirectCommandsLayoutUsageFlagsNV) -> Self {
10763        self.flags = flags;
10764        self
10765    }
10766    #[inline]
10767    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
10768        self.pipeline_bind_point = pipeline_bind_point;
10769        self
10770    }
10771    #[inline]
10772    pub fn tokens(mut self, tokens: &'a [IndirectCommandsLayoutTokenNV<'a>]) -> Self {
10773        self.token_count = tokens.len() as _;
10774        self.p_tokens = tokens.as_ptr();
10775        self
10776    }
10777    #[inline]
10778    pub fn stream_strides(mut self, stream_strides: &'a [u32]) -> Self {
10779        self.stream_count = stream_strides.len() as _;
10780        self.p_stream_strides = stream_strides.as_ptr();
10781        self
10782    }
10783}
10784#[repr(C)]
10785#[cfg_attr(feature = "debug", derive(Debug))]
10786#[derive(Copy, Clone)]
10787#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsInfoNV.html>"]
10788#[must_use]
10789pub struct GeneratedCommandsInfoNV<'a> {
10790    pub s_type: StructureType,
10791    pub p_next: *const c_void,
10792    pub pipeline_bind_point: PipelineBindPoint,
10793    pub pipeline: Pipeline,
10794    pub indirect_commands_layout: IndirectCommandsLayoutNV,
10795    pub stream_count: u32,
10796    pub p_streams: *const IndirectCommandsStreamNV,
10797    pub sequences_count: u32,
10798    pub preprocess_buffer: Buffer,
10799    pub preprocess_offset: DeviceSize,
10800    pub preprocess_size: DeviceSize,
10801    pub sequences_count_buffer: Buffer,
10802    pub sequences_count_offset: DeviceSize,
10803    pub sequences_index_buffer: Buffer,
10804    pub sequences_index_offset: DeviceSize,
10805    pub _marker: PhantomData<&'a ()>,
10806}
10807unsafe impl Send for GeneratedCommandsInfoNV<'_> {}
10808unsafe impl Sync for GeneratedCommandsInfoNV<'_> {}
10809impl ::core::default::Default for GeneratedCommandsInfoNV<'_> {
10810    #[inline]
10811    fn default() -> Self {
10812        Self {
10813            s_type: Self::STRUCTURE_TYPE,
10814            p_next: ::core::ptr::null(),
10815            pipeline_bind_point: PipelineBindPoint::default(),
10816            pipeline: Pipeline::default(),
10817            indirect_commands_layout: IndirectCommandsLayoutNV::default(),
10818            stream_count: u32::default(),
10819            p_streams: ::core::ptr::null(),
10820            sequences_count: u32::default(),
10821            preprocess_buffer: Buffer::default(),
10822            preprocess_offset: DeviceSize::default(),
10823            preprocess_size: DeviceSize::default(),
10824            sequences_count_buffer: Buffer::default(),
10825            sequences_count_offset: DeviceSize::default(),
10826            sequences_index_buffer: Buffer::default(),
10827            sequences_index_offset: DeviceSize::default(),
10828            _marker: PhantomData,
10829        }
10830    }
10831}
10832unsafe impl<'a> TaggedStructure for GeneratedCommandsInfoNV<'a> {
10833    const STRUCTURE_TYPE: StructureType = StructureType::GENERATED_COMMANDS_INFO_NV;
10834}
10835impl<'a> GeneratedCommandsInfoNV<'a> {
10836    #[inline]
10837    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
10838        self.pipeline_bind_point = pipeline_bind_point;
10839        self
10840    }
10841    #[inline]
10842    pub fn pipeline(mut self, pipeline: Pipeline) -> Self {
10843        self.pipeline = pipeline;
10844        self
10845    }
10846    #[inline]
10847    pub fn indirect_commands_layout(
10848        mut self,
10849        indirect_commands_layout: IndirectCommandsLayoutNV,
10850    ) -> Self {
10851        self.indirect_commands_layout = indirect_commands_layout;
10852        self
10853    }
10854    #[inline]
10855    pub fn streams(mut self, streams: &'a [IndirectCommandsStreamNV]) -> Self {
10856        self.stream_count = streams.len() as _;
10857        self.p_streams = streams.as_ptr();
10858        self
10859    }
10860    #[inline]
10861    pub fn sequences_count(mut self, sequences_count: u32) -> Self {
10862        self.sequences_count = sequences_count;
10863        self
10864    }
10865    #[inline]
10866    pub fn preprocess_buffer(mut self, preprocess_buffer: Buffer) -> Self {
10867        self.preprocess_buffer = preprocess_buffer;
10868        self
10869    }
10870    #[inline]
10871    pub fn preprocess_offset(mut self, preprocess_offset: DeviceSize) -> Self {
10872        self.preprocess_offset = preprocess_offset;
10873        self
10874    }
10875    #[inline]
10876    pub fn preprocess_size(mut self, preprocess_size: DeviceSize) -> Self {
10877        self.preprocess_size = preprocess_size;
10878        self
10879    }
10880    #[inline]
10881    pub fn sequences_count_buffer(mut self, sequences_count_buffer: Buffer) -> Self {
10882        self.sequences_count_buffer = sequences_count_buffer;
10883        self
10884    }
10885    #[inline]
10886    pub fn sequences_count_offset(mut self, sequences_count_offset: DeviceSize) -> Self {
10887        self.sequences_count_offset = sequences_count_offset;
10888        self
10889    }
10890    #[inline]
10891    pub fn sequences_index_buffer(mut self, sequences_index_buffer: Buffer) -> Self {
10892        self.sequences_index_buffer = sequences_index_buffer;
10893        self
10894    }
10895    #[inline]
10896    pub fn sequences_index_offset(mut self, sequences_index_offset: DeviceSize) -> Self {
10897        self.sequences_index_offset = sequences_index_offset;
10898        self
10899    }
10900}
10901#[repr(C)]
10902#[cfg_attr(feature = "debug", derive(Debug))]
10903#[derive(Copy, Clone)]
10904#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsMemoryRequirementsInfoNV.html>"]
10905#[must_use]
10906pub struct GeneratedCommandsMemoryRequirementsInfoNV<'a> {
10907    pub s_type: StructureType,
10908    pub p_next: *const c_void,
10909    pub pipeline_bind_point: PipelineBindPoint,
10910    pub pipeline: Pipeline,
10911    pub indirect_commands_layout: IndirectCommandsLayoutNV,
10912    pub max_sequences_count: u32,
10913    pub _marker: PhantomData<&'a ()>,
10914}
10915unsafe impl Send for GeneratedCommandsMemoryRequirementsInfoNV<'_> {}
10916unsafe impl Sync for GeneratedCommandsMemoryRequirementsInfoNV<'_> {}
10917impl ::core::default::Default for GeneratedCommandsMemoryRequirementsInfoNV<'_> {
10918    #[inline]
10919    fn default() -> Self {
10920        Self {
10921            s_type: Self::STRUCTURE_TYPE,
10922            p_next: ::core::ptr::null(),
10923            pipeline_bind_point: PipelineBindPoint::default(),
10924            pipeline: Pipeline::default(),
10925            indirect_commands_layout: IndirectCommandsLayoutNV::default(),
10926            max_sequences_count: u32::default(),
10927            _marker: PhantomData,
10928        }
10929    }
10930}
10931unsafe impl<'a> TaggedStructure for GeneratedCommandsMemoryRequirementsInfoNV<'a> {
10932    const STRUCTURE_TYPE: StructureType =
10933        StructureType::GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV;
10934}
10935impl<'a> GeneratedCommandsMemoryRequirementsInfoNV<'a> {
10936    #[inline]
10937    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
10938        self.pipeline_bind_point = pipeline_bind_point;
10939        self
10940    }
10941    #[inline]
10942    pub fn pipeline(mut self, pipeline: Pipeline) -> Self {
10943        self.pipeline = pipeline;
10944        self
10945    }
10946    #[inline]
10947    pub fn indirect_commands_layout(
10948        mut self,
10949        indirect_commands_layout: IndirectCommandsLayoutNV,
10950    ) -> Self {
10951        self.indirect_commands_layout = indirect_commands_layout;
10952        self
10953    }
10954    #[inline]
10955    pub fn max_sequences_count(mut self, max_sequences_count: u32) -> Self {
10956        self.max_sequences_count = max_sequences_count;
10957        self
10958    }
10959}
10960#[repr(C)]
10961#[cfg_attr(feature = "debug", derive(Debug))]
10962#[derive(Copy, Clone)]
10963#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineIndirectDeviceAddressInfoNV.html>"]
10964#[must_use]
10965pub struct PipelineIndirectDeviceAddressInfoNV<'a> {
10966    pub s_type: StructureType,
10967    pub p_next: *const c_void,
10968    pub pipeline_bind_point: PipelineBindPoint,
10969    pub pipeline: Pipeline,
10970    pub _marker: PhantomData<&'a ()>,
10971}
10972unsafe impl Send for PipelineIndirectDeviceAddressInfoNV<'_> {}
10973unsafe impl Sync for PipelineIndirectDeviceAddressInfoNV<'_> {}
10974impl ::core::default::Default for PipelineIndirectDeviceAddressInfoNV<'_> {
10975    #[inline]
10976    fn default() -> Self {
10977        Self {
10978            s_type: Self::STRUCTURE_TYPE,
10979            p_next: ::core::ptr::null(),
10980            pipeline_bind_point: PipelineBindPoint::default(),
10981            pipeline: Pipeline::default(),
10982            _marker: PhantomData,
10983        }
10984    }
10985}
10986unsafe impl<'a> TaggedStructure for PipelineIndirectDeviceAddressInfoNV<'a> {
10987    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV;
10988}
10989impl<'a> PipelineIndirectDeviceAddressInfoNV<'a> {
10990    #[inline]
10991    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
10992        self.pipeline_bind_point = pipeline_bind_point;
10993        self
10994    }
10995    #[inline]
10996    pub fn pipeline(mut self, pipeline: Pipeline) -> Self {
10997        self.pipeline = pipeline;
10998        self
10999    }
11000}
11001#[repr(C)]
11002#[cfg_attr(feature = "debug", derive(Debug))]
11003#[derive(Copy, Clone, Default)]
11004#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindPipelineIndirectCommandNV.html>"]
11005#[must_use]
11006pub struct BindPipelineIndirectCommandNV {
11007    pub pipeline_address: DeviceAddress,
11008}
11009impl BindPipelineIndirectCommandNV {
11010    #[inline]
11011    pub fn pipeline_address(mut self, pipeline_address: DeviceAddress) -> Self {
11012        self.pipeline_address = pipeline_address;
11013        self
11014    }
11015}
11016#[repr(C)]
11017#[cfg_attr(feature = "debug", derive(Debug))]
11018#[derive(Copy, Clone)]
11019#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFeatures2.html>"]
11020#[must_use]
11021pub struct PhysicalDeviceFeatures2<'a> {
11022    pub s_type: StructureType,
11023    pub p_next: *mut c_void,
11024    pub features: PhysicalDeviceFeatures,
11025    pub _marker: PhantomData<&'a ()>,
11026}
11027unsafe impl Send for PhysicalDeviceFeatures2<'_> {}
11028unsafe impl Sync for PhysicalDeviceFeatures2<'_> {}
11029impl ::core::default::Default for PhysicalDeviceFeatures2<'_> {
11030    #[inline]
11031    fn default() -> Self {
11032        Self {
11033            s_type: Self::STRUCTURE_TYPE,
11034            p_next: ::core::ptr::null_mut(),
11035            features: PhysicalDeviceFeatures::default(),
11036            _marker: PhantomData,
11037        }
11038    }
11039}
11040unsafe impl<'a> TaggedStructure for PhysicalDeviceFeatures2<'a> {
11041    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_FEATURES_2;
11042}
11043unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFeatures2<'_> {}
11044pub unsafe trait ExtendsPhysicalDeviceFeatures2 {}
11045impl<'a> PhysicalDeviceFeatures2<'a> {
11046    #[inline]
11047    pub fn features(mut self, features: PhysicalDeviceFeatures) -> Self {
11048        self.features = features;
11049        self
11050    }
11051    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11052    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11053    #[doc = r" valid extension structs can be pushed into the chain."]
11054    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11055    #[doc = r" chain will look like `A -> D -> B -> C`."]
11056    pub fn push_next<T: ExtendsPhysicalDeviceFeatures2 + ?Sized>(
11057        mut self,
11058        next: &'a mut T,
11059    ) -> Self {
11060        unsafe {
11061            let next_ptr = <*mut T>::cast(next);
11062            let last_next = ptr_chain_iter(next).last().unwrap();
11063            (*last_next).p_next = self.p_next as _;
11064            self.p_next = next_ptr;
11065        }
11066        self
11067    }
11068}
11069#[repr(C)]
11070#[cfg_attr(feature = "debug", derive(Debug))]
11071#[derive(Copy, Clone)]
11072#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProperties2.html>"]
11073#[must_use]
11074pub struct PhysicalDeviceProperties2<'a> {
11075    pub s_type: StructureType,
11076    pub p_next: *mut c_void,
11077    pub properties: PhysicalDeviceProperties,
11078    pub _marker: PhantomData<&'a ()>,
11079}
11080unsafe impl Send for PhysicalDeviceProperties2<'_> {}
11081unsafe impl Sync for PhysicalDeviceProperties2<'_> {}
11082impl ::core::default::Default for PhysicalDeviceProperties2<'_> {
11083    #[inline]
11084    fn default() -> Self {
11085        Self {
11086            s_type: Self::STRUCTURE_TYPE,
11087            p_next: ::core::ptr::null_mut(),
11088            properties: PhysicalDeviceProperties::default(),
11089            _marker: PhantomData,
11090        }
11091    }
11092}
11093unsafe impl<'a> TaggedStructure for PhysicalDeviceProperties2<'a> {
11094    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_PROPERTIES_2;
11095}
11096pub unsafe trait ExtendsPhysicalDeviceProperties2 {}
11097impl<'a> PhysicalDeviceProperties2<'a> {
11098    #[inline]
11099    pub fn properties(mut self, properties: PhysicalDeviceProperties) -> Self {
11100        self.properties = properties;
11101        self
11102    }
11103    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11104    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11105    #[doc = r" valid extension structs can be pushed into the chain."]
11106    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11107    #[doc = r" chain will look like `A -> D -> B -> C`."]
11108    pub fn push_next<T: ExtendsPhysicalDeviceProperties2 + ?Sized>(
11109        mut self,
11110        next: &'a mut T,
11111    ) -> Self {
11112        unsafe {
11113            let next_ptr = <*mut T>::cast(next);
11114            let last_next = ptr_chain_iter(next).last().unwrap();
11115            (*last_next).p_next = self.p_next as _;
11116            self.p_next = next_ptr;
11117        }
11118        self
11119    }
11120}
11121#[repr(C)]
11122#[cfg_attr(feature = "debug", derive(Debug))]
11123#[derive(Copy, Clone)]
11124#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFormatProperties2.html>"]
11125#[must_use]
11126pub struct FormatProperties2<'a> {
11127    pub s_type: StructureType,
11128    pub p_next: *mut c_void,
11129    pub format_properties: FormatProperties,
11130    pub _marker: PhantomData<&'a ()>,
11131}
11132unsafe impl Send for FormatProperties2<'_> {}
11133unsafe impl Sync for FormatProperties2<'_> {}
11134impl ::core::default::Default for FormatProperties2<'_> {
11135    #[inline]
11136    fn default() -> Self {
11137        Self {
11138            s_type: Self::STRUCTURE_TYPE,
11139            p_next: ::core::ptr::null_mut(),
11140            format_properties: FormatProperties::default(),
11141            _marker: PhantomData,
11142        }
11143    }
11144}
11145unsafe impl<'a> TaggedStructure for FormatProperties2<'a> {
11146    const STRUCTURE_TYPE: StructureType = StructureType::FORMAT_PROPERTIES_2;
11147}
11148pub unsafe trait ExtendsFormatProperties2 {}
11149impl<'a> FormatProperties2<'a> {
11150    #[inline]
11151    pub fn format_properties(mut self, format_properties: FormatProperties) -> Self {
11152        self.format_properties = format_properties;
11153        self
11154    }
11155    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11156    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11157    #[doc = r" valid extension structs can be pushed into the chain."]
11158    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11159    #[doc = r" chain will look like `A -> D -> B -> C`."]
11160    pub fn push_next<T: ExtendsFormatProperties2 + ?Sized>(mut self, next: &'a mut T) -> Self {
11161        unsafe {
11162            let next_ptr = <*mut T>::cast(next);
11163            let last_next = ptr_chain_iter(next).last().unwrap();
11164            (*last_next).p_next = self.p_next as _;
11165            self.p_next = next_ptr;
11166        }
11167        self
11168    }
11169}
11170#[repr(C)]
11171#[cfg_attr(feature = "debug", derive(Debug))]
11172#[derive(Copy, Clone)]
11173#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageFormatProperties2.html>"]
11174#[must_use]
11175pub struct ImageFormatProperties2<'a> {
11176    pub s_type: StructureType,
11177    pub p_next: *mut c_void,
11178    pub image_format_properties: ImageFormatProperties,
11179    pub _marker: PhantomData<&'a ()>,
11180}
11181unsafe impl Send for ImageFormatProperties2<'_> {}
11182unsafe impl Sync for ImageFormatProperties2<'_> {}
11183impl ::core::default::Default for ImageFormatProperties2<'_> {
11184    #[inline]
11185    fn default() -> Self {
11186        Self {
11187            s_type: Self::STRUCTURE_TYPE,
11188            p_next: ::core::ptr::null_mut(),
11189            image_format_properties: ImageFormatProperties::default(),
11190            _marker: PhantomData,
11191        }
11192    }
11193}
11194unsafe impl<'a> TaggedStructure for ImageFormatProperties2<'a> {
11195    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_FORMAT_PROPERTIES_2;
11196}
11197pub unsafe trait ExtendsImageFormatProperties2 {}
11198impl<'a> ImageFormatProperties2<'a> {
11199    #[inline]
11200    pub fn image_format_properties(
11201        mut self,
11202        image_format_properties: ImageFormatProperties,
11203    ) -> Self {
11204        self.image_format_properties = image_format_properties;
11205        self
11206    }
11207    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11208    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11209    #[doc = r" valid extension structs can be pushed into the chain."]
11210    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11211    #[doc = r" chain will look like `A -> D -> B -> C`."]
11212    pub fn push_next<T: ExtendsImageFormatProperties2 + ?Sized>(mut self, next: &'a mut T) -> Self {
11213        unsafe {
11214            let next_ptr = <*mut T>::cast(next);
11215            let last_next = ptr_chain_iter(next).last().unwrap();
11216            (*last_next).p_next = self.p_next as _;
11217            self.p_next = next_ptr;
11218        }
11219        self
11220    }
11221}
11222#[repr(C)]
11223#[cfg_attr(feature = "debug", derive(Debug))]
11224#[derive(Copy, Clone)]
11225#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageFormatInfo2.html>"]
11226#[must_use]
11227pub struct PhysicalDeviceImageFormatInfo2<'a> {
11228    pub s_type: StructureType,
11229    pub p_next: *const c_void,
11230    pub format: Format,
11231    pub ty: ImageType,
11232    pub tiling: ImageTiling,
11233    pub usage: ImageUsageFlags,
11234    pub flags: ImageCreateFlags,
11235    pub _marker: PhantomData<&'a ()>,
11236}
11237unsafe impl Send for PhysicalDeviceImageFormatInfo2<'_> {}
11238unsafe impl Sync for PhysicalDeviceImageFormatInfo2<'_> {}
11239impl ::core::default::Default for PhysicalDeviceImageFormatInfo2<'_> {
11240    #[inline]
11241    fn default() -> Self {
11242        Self {
11243            s_type: Self::STRUCTURE_TYPE,
11244            p_next: ::core::ptr::null(),
11245            format: Format::default(),
11246            ty: ImageType::default(),
11247            tiling: ImageTiling::default(),
11248            usage: ImageUsageFlags::default(),
11249            flags: ImageCreateFlags::default(),
11250            _marker: PhantomData,
11251        }
11252    }
11253}
11254unsafe impl<'a> TaggedStructure for PhysicalDeviceImageFormatInfo2<'a> {
11255    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
11256}
11257pub unsafe trait ExtendsPhysicalDeviceImageFormatInfo2 {}
11258impl<'a> PhysicalDeviceImageFormatInfo2<'a> {
11259    #[inline]
11260    pub fn format(mut self, format: Format) -> Self {
11261        self.format = format;
11262        self
11263    }
11264    #[inline]
11265    pub fn ty(mut self, ty: ImageType) -> Self {
11266        self.ty = ty;
11267        self
11268    }
11269    #[inline]
11270    pub fn tiling(mut self, tiling: ImageTiling) -> Self {
11271        self.tiling = tiling;
11272        self
11273    }
11274    #[inline]
11275    pub fn usage(mut self, usage: ImageUsageFlags) -> Self {
11276        self.usage = usage;
11277        self
11278    }
11279    #[inline]
11280    pub fn flags(mut self, flags: ImageCreateFlags) -> Self {
11281        self.flags = flags;
11282        self
11283    }
11284    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11285    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11286    #[doc = r" valid extension structs can be pushed into the chain."]
11287    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11288    #[doc = r" chain will look like `A -> D -> B -> C`."]
11289    pub fn push_next<T: ExtendsPhysicalDeviceImageFormatInfo2 + ?Sized>(
11290        mut self,
11291        next: &'a mut T,
11292    ) -> Self {
11293        unsafe {
11294            let next_ptr = <*const T>::cast(next);
11295            let last_next = ptr_chain_iter(next).last().unwrap();
11296            (*last_next).p_next = self.p_next as _;
11297            self.p_next = next_ptr;
11298        }
11299        self
11300    }
11301}
11302#[repr(C)]
11303#[cfg_attr(feature = "debug", derive(Debug))]
11304#[derive(Copy, Clone)]
11305#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyProperties2.html>"]
11306#[must_use]
11307pub struct QueueFamilyProperties2<'a> {
11308    pub s_type: StructureType,
11309    pub p_next: *mut c_void,
11310    pub queue_family_properties: QueueFamilyProperties,
11311    pub _marker: PhantomData<&'a ()>,
11312}
11313unsafe impl Send for QueueFamilyProperties2<'_> {}
11314unsafe impl Sync for QueueFamilyProperties2<'_> {}
11315impl ::core::default::Default for QueueFamilyProperties2<'_> {
11316    #[inline]
11317    fn default() -> Self {
11318        Self {
11319            s_type: Self::STRUCTURE_TYPE,
11320            p_next: ::core::ptr::null_mut(),
11321            queue_family_properties: QueueFamilyProperties::default(),
11322            _marker: PhantomData,
11323        }
11324    }
11325}
11326unsafe impl<'a> TaggedStructure for QueueFamilyProperties2<'a> {
11327    const STRUCTURE_TYPE: StructureType = StructureType::QUEUE_FAMILY_PROPERTIES_2;
11328}
11329pub unsafe trait ExtendsQueueFamilyProperties2 {}
11330impl<'a> QueueFamilyProperties2<'a> {
11331    #[inline]
11332    pub fn queue_family_properties(
11333        mut self,
11334        queue_family_properties: QueueFamilyProperties,
11335    ) -> Self {
11336        self.queue_family_properties = queue_family_properties;
11337        self
11338    }
11339    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11340    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11341    #[doc = r" valid extension structs can be pushed into the chain."]
11342    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11343    #[doc = r" chain will look like `A -> D -> B -> C`."]
11344    pub fn push_next<T: ExtendsQueueFamilyProperties2 + ?Sized>(mut self, next: &'a mut T) -> Self {
11345        unsafe {
11346            let next_ptr = <*mut T>::cast(next);
11347            let last_next = ptr_chain_iter(next).last().unwrap();
11348            (*last_next).p_next = self.p_next as _;
11349            self.p_next = next_ptr;
11350        }
11351        self
11352    }
11353}
11354#[repr(C)]
11355#[cfg_attr(feature = "debug", derive(Debug))]
11356#[derive(Copy, Clone)]
11357#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryProperties2.html>"]
11358#[must_use]
11359pub struct PhysicalDeviceMemoryProperties2<'a> {
11360    pub s_type: StructureType,
11361    pub p_next: *mut c_void,
11362    pub memory_properties: PhysicalDeviceMemoryProperties,
11363    pub _marker: PhantomData<&'a ()>,
11364}
11365unsafe impl Send for PhysicalDeviceMemoryProperties2<'_> {}
11366unsafe impl Sync for PhysicalDeviceMemoryProperties2<'_> {}
11367impl ::core::default::Default for PhysicalDeviceMemoryProperties2<'_> {
11368    #[inline]
11369    fn default() -> Self {
11370        Self {
11371            s_type: Self::STRUCTURE_TYPE,
11372            p_next: ::core::ptr::null_mut(),
11373            memory_properties: PhysicalDeviceMemoryProperties::default(),
11374            _marker: PhantomData,
11375        }
11376    }
11377}
11378unsafe impl<'a> TaggedStructure for PhysicalDeviceMemoryProperties2<'a> {
11379    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MEMORY_PROPERTIES_2;
11380}
11381pub unsafe trait ExtendsPhysicalDeviceMemoryProperties2 {}
11382impl<'a> PhysicalDeviceMemoryProperties2<'a> {
11383    #[inline]
11384    pub fn memory_properties(mut self, memory_properties: PhysicalDeviceMemoryProperties) -> Self {
11385        self.memory_properties = memory_properties;
11386        self
11387    }
11388    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11389    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11390    #[doc = r" valid extension structs can be pushed into the chain."]
11391    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11392    #[doc = r" chain will look like `A -> D -> B -> C`."]
11393    pub fn push_next<T: ExtendsPhysicalDeviceMemoryProperties2 + ?Sized>(
11394        mut self,
11395        next: &'a mut T,
11396    ) -> Self {
11397        unsafe {
11398            let next_ptr = <*mut T>::cast(next);
11399            let last_next = ptr_chain_iter(next).last().unwrap();
11400            (*last_next).p_next = self.p_next as _;
11401            self.p_next = next_ptr;
11402        }
11403        self
11404    }
11405}
11406#[repr(C)]
11407#[cfg_attr(feature = "debug", derive(Debug))]
11408#[derive(Copy, Clone)]
11409#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageFormatProperties2.html>"]
11410#[must_use]
11411pub struct SparseImageFormatProperties2<'a> {
11412    pub s_type: StructureType,
11413    pub p_next: *mut c_void,
11414    pub properties: SparseImageFormatProperties,
11415    pub _marker: PhantomData<&'a ()>,
11416}
11417unsafe impl Send for SparseImageFormatProperties2<'_> {}
11418unsafe impl Sync for SparseImageFormatProperties2<'_> {}
11419impl ::core::default::Default for SparseImageFormatProperties2<'_> {
11420    #[inline]
11421    fn default() -> Self {
11422        Self {
11423            s_type: Self::STRUCTURE_TYPE,
11424            p_next: ::core::ptr::null_mut(),
11425            properties: SparseImageFormatProperties::default(),
11426            _marker: PhantomData,
11427        }
11428    }
11429}
11430unsafe impl<'a> TaggedStructure for SparseImageFormatProperties2<'a> {
11431    const STRUCTURE_TYPE: StructureType = StructureType::SPARSE_IMAGE_FORMAT_PROPERTIES_2;
11432}
11433impl<'a> SparseImageFormatProperties2<'a> {
11434    #[inline]
11435    pub fn properties(mut self, properties: SparseImageFormatProperties) -> Self {
11436        self.properties = properties;
11437        self
11438    }
11439}
11440#[repr(C)]
11441#[cfg_attr(feature = "debug", derive(Debug))]
11442#[derive(Copy, Clone)]
11443#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSparseImageFormatInfo2.html>"]
11444#[must_use]
11445pub struct PhysicalDeviceSparseImageFormatInfo2<'a> {
11446    pub s_type: StructureType,
11447    pub p_next: *const c_void,
11448    pub format: Format,
11449    pub ty: ImageType,
11450    pub samples: SampleCountFlags,
11451    pub usage: ImageUsageFlags,
11452    pub tiling: ImageTiling,
11453    pub _marker: PhantomData<&'a ()>,
11454}
11455unsafe impl Send for PhysicalDeviceSparseImageFormatInfo2<'_> {}
11456unsafe impl Sync for PhysicalDeviceSparseImageFormatInfo2<'_> {}
11457impl ::core::default::Default for PhysicalDeviceSparseImageFormatInfo2<'_> {
11458    #[inline]
11459    fn default() -> Self {
11460        Self {
11461            s_type: Self::STRUCTURE_TYPE,
11462            p_next: ::core::ptr::null(),
11463            format: Format::default(),
11464            ty: ImageType::default(),
11465            samples: SampleCountFlags::default(),
11466            usage: ImageUsageFlags::default(),
11467            tiling: ImageTiling::default(),
11468            _marker: PhantomData,
11469        }
11470    }
11471}
11472unsafe impl<'a> TaggedStructure for PhysicalDeviceSparseImageFormatInfo2<'a> {
11473    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2;
11474}
11475impl<'a> PhysicalDeviceSparseImageFormatInfo2<'a> {
11476    #[inline]
11477    pub fn format(mut self, format: Format) -> Self {
11478        self.format = format;
11479        self
11480    }
11481    #[inline]
11482    pub fn ty(mut self, ty: ImageType) -> Self {
11483        self.ty = ty;
11484        self
11485    }
11486    #[inline]
11487    pub fn samples(mut self, samples: SampleCountFlags) -> Self {
11488        self.samples = samples;
11489        self
11490    }
11491    #[inline]
11492    pub fn usage(mut self, usage: ImageUsageFlags) -> Self {
11493        self.usage = usage;
11494        self
11495    }
11496    #[inline]
11497    pub fn tiling(mut self, tiling: ImageTiling) -> Self {
11498        self.tiling = tiling;
11499        self
11500    }
11501}
11502#[repr(C)]
11503#[cfg_attr(feature = "debug", derive(Debug))]
11504#[derive(Copy, Clone)]
11505#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePushDescriptorPropertiesKHR.html>"]
11506#[must_use]
11507pub struct PhysicalDevicePushDescriptorPropertiesKHR<'a> {
11508    pub s_type: StructureType,
11509    pub p_next: *mut c_void,
11510    pub max_push_descriptors: u32,
11511    pub _marker: PhantomData<&'a ()>,
11512}
11513unsafe impl Send for PhysicalDevicePushDescriptorPropertiesKHR<'_> {}
11514unsafe impl Sync for PhysicalDevicePushDescriptorPropertiesKHR<'_> {}
11515impl ::core::default::Default for PhysicalDevicePushDescriptorPropertiesKHR<'_> {
11516    #[inline]
11517    fn default() -> Self {
11518        Self {
11519            s_type: Self::STRUCTURE_TYPE,
11520            p_next: ::core::ptr::null_mut(),
11521            max_push_descriptors: u32::default(),
11522            _marker: PhantomData,
11523        }
11524    }
11525}
11526unsafe impl<'a> TaggedStructure for PhysicalDevicePushDescriptorPropertiesKHR<'a> {
11527    const STRUCTURE_TYPE: StructureType =
11528        StructureType::PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR;
11529}
11530unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePushDescriptorPropertiesKHR<'_> {}
11531impl<'a> PhysicalDevicePushDescriptorPropertiesKHR<'a> {
11532    #[inline]
11533    pub fn max_push_descriptors(mut self, max_push_descriptors: u32) -> Self {
11534        self.max_push_descriptors = max_push_descriptors;
11535        self
11536    }
11537}
11538#[repr(C)]
11539#[cfg_attr(feature = "debug", derive(Debug))]
11540#[derive(Copy, Clone, Default)]
11541#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkConformanceVersion.html>"]
11542#[must_use]
11543pub struct ConformanceVersion {
11544    pub major: u8,
11545    pub minor: u8,
11546    pub subminor: u8,
11547    pub patch: u8,
11548}
11549impl ConformanceVersion {
11550    #[inline]
11551    pub fn major(mut self, major: u8) -> Self {
11552        self.major = major;
11553        self
11554    }
11555    #[inline]
11556    pub fn minor(mut self, minor: u8) -> Self {
11557        self.minor = minor;
11558        self
11559    }
11560    #[inline]
11561    pub fn subminor(mut self, subminor: u8) -> Self {
11562        self.subminor = subminor;
11563        self
11564    }
11565    #[inline]
11566    pub fn patch(mut self, patch: u8) -> Self {
11567        self.patch = patch;
11568        self
11569    }
11570}
11571#[repr(C)]
11572#[derive(Copy, Clone)]
11573#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDriverProperties.html>"]
11574#[must_use]
11575pub struct PhysicalDeviceDriverProperties<'a> {
11576    pub s_type: StructureType,
11577    pub p_next: *mut c_void,
11578    pub driver_id: DriverId,
11579    pub driver_name: [c_char; MAX_DRIVER_NAME_SIZE],
11580    pub driver_info: [c_char; MAX_DRIVER_INFO_SIZE],
11581    pub conformance_version: ConformanceVersion,
11582    pub _marker: PhantomData<&'a ()>,
11583}
11584unsafe impl Send for PhysicalDeviceDriverProperties<'_> {}
11585unsafe impl Sync for PhysicalDeviceDriverProperties<'_> {}
11586#[cfg(feature = "debug")]
11587impl fmt::Debug for PhysicalDeviceDriverProperties<'_> {
11588    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
11589        fmt.debug_struct("PhysicalDeviceDriverProperties")
11590            .field("s_type", &self.s_type)
11591            .field("p_next", &self.p_next)
11592            .field("driver_id", &self.driver_id)
11593            .field("driver_name", &self.driver_name_as_c_str())
11594            .field("driver_info", &self.driver_info_as_c_str())
11595            .field("conformance_version", &self.conformance_version)
11596            .finish()
11597    }
11598}
11599impl ::core::default::Default for PhysicalDeviceDriverProperties<'_> {
11600    #[inline]
11601    fn default() -> Self {
11602        Self {
11603            s_type: Self::STRUCTURE_TYPE,
11604            p_next: ::core::ptr::null_mut(),
11605            driver_id: DriverId::default(),
11606            driver_name: unsafe { ::core::mem::zeroed() },
11607            driver_info: unsafe { ::core::mem::zeroed() },
11608            conformance_version: ConformanceVersion::default(),
11609            _marker: PhantomData,
11610        }
11611    }
11612}
11613unsafe impl<'a> TaggedStructure for PhysicalDeviceDriverProperties<'a> {
11614    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_DRIVER_PROPERTIES;
11615}
11616unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDriverProperties<'_> {}
11617impl<'a> PhysicalDeviceDriverProperties<'a> {
11618    #[inline]
11619    pub fn driver_id(mut self, driver_id: DriverId) -> Self {
11620        self.driver_id = driver_id;
11621        self
11622    }
11623    #[inline]
11624    pub fn driver_name(
11625        mut self,
11626        driver_name: &CStr,
11627    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
11628        write_c_str_slice_with_nul(&mut self.driver_name, driver_name).map(|()| self)
11629    }
11630    #[inline]
11631    pub fn driver_name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
11632        wrap_c_str_slice_until_nul(&self.driver_name)
11633    }
11634    #[inline]
11635    pub fn driver_info(
11636        mut self,
11637        driver_info: &CStr,
11638    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
11639        write_c_str_slice_with_nul(&mut self.driver_info, driver_info).map(|()| self)
11640    }
11641    #[inline]
11642    pub fn driver_info_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
11643        wrap_c_str_slice_until_nul(&self.driver_info)
11644    }
11645    #[inline]
11646    pub fn conformance_version(mut self, conformance_version: ConformanceVersion) -> Self {
11647        self.conformance_version = conformance_version;
11648        self
11649    }
11650}
11651#[repr(C)]
11652#[cfg_attr(feature = "debug", derive(Debug))]
11653#[derive(Copy, Clone)]
11654#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentRegionsKHR.html>"]
11655#[must_use]
11656pub struct PresentRegionsKHR<'a> {
11657    pub s_type: StructureType,
11658    pub p_next: *const c_void,
11659    pub swapchain_count: u32,
11660    pub p_regions: *const PresentRegionKHR<'a>,
11661    pub _marker: PhantomData<&'a ()>,
11662}
11663unsafe impl Send for PresentRegionsKHR<'_> {}
11664unsafe impl Sync for PresentRegionsKHR<'_> {}
11665impl ::core::default::Default for PresentRegionsKHR<'_> {
11666    #[inline]
11667    fn default() -> Self {
11668        Self {
11669            s_type: Self::STRUCTURE_TYPE,
11670            p_next: ::core::ptr::null(),
11671            swapchain_count: u32::default(),
11672            p_regions: ::core::ptr::null(),
11673            _marker: PhantomData,
11674        }
11675    }
11676}
11677unsafe impl<'a> TaggedStructure for PresentRegionsKHR<'a> {
11678    const STRUCTURE_TYPE: StructureType = StructureType::PRESENT_REGIONS_KHR;
11679}
11680unsafe impl ExtendsPresentInfoKHR for PresentRegionsKHR<'_> {}
11681impl<'a> PresentRegionsKHR<'a> {
11682    #[inline]
11683    pub fn regions(mut self, regions: &'a [PresentRegionKHR<'a>]) -> Self {
11684        self.swapchain_count = regions.len() as _;
11685        self.p_regions = regions.as_ptr();
11686        self
11687    }
11688}
11689#[repr(C)]
11690#[cfg_attr(feature = "debug", derive(Debug))]
11691#[derive(Copy, Clone)]
11692#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentRegionKHR.html>"]
11693#[must_use]
11694pub struct PresentRegionKHR<'a> {
11695    pub rectangle_count: u32,
11696    pub p_rectangles: *const RectLayerKHR,
11697    pub _marker: PhantomData<&'a ()>,
11698}
11699unsafe impl Send for PresentRegionKHR<'_> {}
11700unsafe impl Sync for PresentRegionKHR<'_> {}
11701impl ::core::default::Default for PresentRegionKHR<'_> {
11702    #[inline]
11703    fn default() -> Self {
11704        Self {
11705            rectangle_count: u32::default(),
11706            p_rectangles: ::core::ptr::null(),
11707            _marker: PhantomData,
11708        }
11709    }
11710}
11711impl<'a> PresentRegionKHR<'a> {
11712    #[inline]
11713    pub fn rectangles(mut self, rectangles: &'a [RectLayerKHR]) -> Self {
11714        self.rectangle_count = rectangles.len() as _;
11715        self.p_rectangles = rectangles.as_ptr();
11716        self
11717    }
11718}
11719#[repr(C)]
11720#[cfg_attr(feature = "debug", derive(Debug))]
11721#[derive(Copy, Clone, Default)]
11722#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRectLayerKHR.html>"]
11723#[must_use]
11724pub struct RectLayerKHR {
11725    pub offset: Offset2D,
11726    pub extent: Extent2D,
11727    pub layer: u32,
11728}
11729impl RectLayerKHR {
11730    #[inline]
11731    pub fn offset(mut self, offset: Offset2D) -> Self {
11732        self.offset = offset;
11733        self
11734    }
11735    #[inline]
11736    pub fn extent(mut self, extent: Extent2D) -> Self {
11737        self.extent = extent;
11738        self
11739    }
11740    #[inline]
11741    pub fn layer(mut self, layer: u32) -> Self {
11742        self.layer = layer;
11743        self
11744    }
11745}
11746#[repr(C)]
11747#[cfg_attr(feature = "debug", derive(Debug))]
11748#[derive(Copy, Clone)]
11749#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVariablePointersFeatures.html>"]
11750#[must_use]
11751pub struct PhysicalDeviceVariablePointersFeatures<'a> {
11752    pub s_type: StructureType,
11753    pub p_next: *mut c_void,
11754    pub variable_pointers_storage_buffer: Bool32,
11755    pub variable_pointers: Bool32,
11756    pub _marker: PhantomData<&'a ()>,
11757}
11758unsafe impl Send for PhysicalDeviceVariablePointersFeatures<'_> {}
11759unsafe impl Sync for PhysicalDeviceVariablePointersFeatures<'_> {}
11760impl ::core::default::Default for PhysicalDeviceVariablePointersFeatures<'_> {
11761    #[inline]
11762    fn default() -> Self {
11763        Self {
11764            s_type: Self::STRUCTURE_TYPE,
11765            p_next: ::core::ptr::null_mut(),
11766            variable_pointers_storage_buffer: Bool32::default(),
11767            variable_pointers: Bool32::default(),
11768            _marker: PhantomData,
11769        }
11770    }
11771}
11772unsafe impl<'a> TaggedStructure for PhysicalDeviceVariablePointersFeatures<'a> {
11773    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES;
11774}
11775unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVariablePointersFeatures<'_> {}
11776unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVariablePointersFeatures<'_> {}
11777impl<'a> PhysicalDeviceVariablePointersFeatures<'a> {
11778    #[inline]
11779    pub fn variable_pointers_storage_buffer(
11780        mut self,
11781        variable_pointers_storage_buffer: bool,
11782    ) -> Self {
11783        self.variable_pointers_storage_buffer = variable_pointers_storage_buffer.into();
11784        self
11785    }
11786    #[inline]
11787    pub fn variable_pointers(mut self, variable_pointers: bool) -> Self {
11788        self.variable_pointers = variable_pointers.into();
11789        self
11790    }
11791}
11792#[repr(C)]
11793#[cfg_attr(feature = "debug", derive(Debug))]
11794#[derive(Copy, Clone, Default)]
11795#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalMemoryProperties.html>"]
11796#[must_use]
11797pub struct ExternalMemoryProperties {
11798    pub external_memory_features: ExternalMemoryFeatureFlags,
11799    pub export_from_imported_handle_types: ExternalMemoryHandleTypeFlags,
11800    pub compatible_handle_types: ExternalMemoryHandleTypeFlags,
11801}
11802impl ExternalMemoryProperties {
11803    #[inline]
11804    pub fn external_memory_features(
11805        mut self,
11806        external_memory_features: ExternalMemoryFeatureFlags,
11807    ) -> Self {
11808        self.external_memory_features = external_memory_features;
11809        self
11810    }
11811    #[inline]
11812    pub fn export_from_imported_handle_types(
11813        mut self,
11814        export_from_imported_handle_types: ExternalMemoryHandleTypeFlags,
11815    ) -> Self {
11816        self.export_from_imported_handle_types = export_from_imported_handle_types;
11817        self
11818    }
11819    #[inline]
11820    pub fn compatible_handle_types(
11821        mut self,
11822        compatible_handle_types: ExternalMemoryHandleTypeFlags,
11823    ) -> Self {
11824        self.compatible_handle_types = compatible_handle_types;
11825        self
11826    }
11827}
11828#[repr(C)]
11829#[cfg_attr(feature = "debug", derive(Debug))]
11830#[derive(Copy, Clone)]
11831#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalImageFormatInfo.html>"]
11832#[must_use]
11833pub struct PhysicalDeviceExternalImageFormatInfo<'a> {
11834    pub s_type: StructureType,
11835    pub p_next: *const c_void,
11836    pub handle_type: ExternalMemoryHandleTypeFlags,
11837    pub _marker: PhantomData<&'a ()>,
11838}
11839unsafe impl Send for PhysicalDeviceExternalImageFormatInfo<'_> {}
11840unsafe impl Sync for PhysicalDeviceExternalImageFormatInfo<'_> {}
11841impl ::core::default::Default for PhysicalDeviceExternalImageFormatInfo<'_> {
11842    #[inline]
11843    fn default() -> Self {
11844        Self {
11845            s_type: Self::STRUCTURE_TYPE,
11846            p_next: ::core::ptr::null(),
11847            handle_type: ExternalMemoryHandleTypeFlags::default(),
11848            _marker: PhantomData,
11849        }
11850    }
11851}
11852unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalImageFormatInfo<'a> {
11853    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO;
11854}
11855unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for PhysicalDeviceExternalImageFormatInfo<'_> {}
11856impl<'a> PhysicalDeviceExternalImageFormatInfo<'a> {
11857    #[inline]
11858    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
11859        self.handle_type = handle_type;
11860        self
11861    }
11862}
11863#[repr(C)]
11864#[cfg_attr(feature = "debug", derive(Debug))]
11865#[derive(Copy, Clone)]
11866#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalImageFormatProperties.html>"]
11867#[must_use]
11868pub struct ExternalImageFormatProperties<'a> {
11869    pub s_type: StructureType,
11870    pub p_next: *mut c_void,
11871    pub external_memory_properties: ExternalMemoryProperties,
11872    pub _marker: PhantomData<&'a ()>,
11873}
11874unsafe impl Send for ExternalImageFormatProperties<'_> {}
11875unsafe impl Sync for ExternalImageFormatProperties<'_> {}
11876impl ::core::default::Default for ExternalImageFormatProperties<'_> {
11877    #[inline]
11878    fn default() -> Self {
11879        Self {
11880            s_type: Self::STRUCTURE_TYPE,
11881            p_next: ::core::ptr::null_mut(),
11882            external_memory_properties: ExternalMemoryProperties::default(),
11883            _marker: PhantomData,
11884        }
11885    }
11886}
11887unsafe impl<'a> TaggedStructure for ExternalImageFormatProperties<'a> {
11888    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_IMAGE_FORMAT_PROPERTIES;
11889}
11890unsafe impl ExtendsImageFormatProperties2 for ExternalImageFormatProperties<'_> {}
11891impl<'a> ExternalImageFormatProperties<'a> {
11892    #[inline]
11893    pub fn external_memory_properties(
11894        mut self,
11895        external_memory_properties: ExternalMemoryProperties,
11896    ) -> Self {
11897        self.external_memory_properties = external_memory_properties;
11898        self
11899    }
11900}
11901#[repr(C)]
11902#[cfg_attr(feature = "debug", derive(Debug))]
11903#[derive(Copy, Clone)]
11904#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalBufferInfo.html>"]
11905#[must_use]
11906pub struct PhysicalDeviceExternalBufferInfo<'a> {
11907    pub s_type: StructureType,
11908    pub p_next: *const c_void,
11909    pub flags: BufferCreateFlags,
11910    pub usage: BufferUsageFlags,
11911    pub handle_type: ExternalMemoryHandleTypeFlags,
11912    pub _marker: PhantomData<&'a ()>,
11913}
11914unsafe impl Send for PhysicalDeviceExternalBufferInfo<'_> {}
11915unsafe impl Sync for PhysicalDeviceExternalBufferInfo<'_> {}
11916impl ::core::default::Default for PhysicalDeviceExternalBufferInfo<'_> {
11917    #[inline]
11918    fn default() -> Self {
11919        Self {
11920            s_type: Self::STRUCTURE_TYPE,
11921            p_next: ::core::ptr::null(),
11922            flags: BufferCreateFlags::default(),
11923            usage: BufferUsageFlags::default(),
11924            handle_type: ExternalMemoryHandleTypeFlags::default(),
11925            _marker: PhantomData,
11926        }
11927    }
11928}
11929unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalBufferInfo<'a> {
11930    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO;
11931}
11932pub unsafe trait ExtendsPhysicalDeviceExternalBufferInfo {}
11933impl<'a> PhysicalDeviceExternalBufferInfo<'a> {
11934    #[inline]
11935    pub fn flags(mut self, flags: BufferCreateFlags) -> Self {
11936        self.flags = flags;
11937        self
11938    }
11939    #[inline]
11940    pub fn usage(mut self, usage: BufferUsageFlags) -> Self {
11941        self.usage = usage;
11942        self
11943    }
11944    #[inline]
11945    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
11946        self.handle_type = handle_type;
11947        self
11948    }
11949    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
11950    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
11951    #[doc = r" valid extension structs can be pushed into the chain."]
11952    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
11953    #[doc = r" chain will look like `A -> D -> B -> C`."]
11954    pub fn push_next<T: ExtendsPhysicalDeviceExternalBufferInfo + ?Sized>(
11955        mut self,
11956        next: &'a mut T,
11957    ) -> Self {
11958        unsafe {
11959            let next_ptr = <*const T>::cast(next);
11960            let last_next = ptr_chain_iter(next).last().unwrap();
11961            (*last_next).p_next = self.p_next as _;
11962            self.p_next = next_ptr;
11963        }
11964        self
11965    }
11966}
11967#[repr(C)]
11968#[cfg_attr(feature = "debug", derive(Debug))]
11969#[derive(Copy, Clone)]
11970#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalBufferProperties.html>"]
11971#[must_use]
11972pub struct ExternalBufferProperties<'a> {
11973    pub s_type: StructureType,
11974    pub p_next: *mut c_void,
11975    pub external_memory_properties: ExternalMemoryProperties,
11976    pub _marker: PhantomData<&'a ()>,
11977}
11978unsafe impl Send for ExternalBufferProperties<'_> {}
11979unsafe impl Sync for ExternalBufferProperties<'_> {}
11980impl ::core::default::Default for ExternalBufferProperties<'_> {
11981    #[inline]
11982    fn default() -> Self {
11983        Self {
11984            s_type: Self::STRUCTURE_TYPE,
11985            p_next: ::core::ptr::null_mut(),
11986            external_memory_properties: ExternalMemoryProperties::default(),
11987            _marker: PhantomData,
11988        }
11989    }
11990}
11991unsafe impl<'a> TaggedStructure for ExternalBufferProperties<'a> {
11992    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_BUFFER_PROPERTIES;
11993}
11994impl<'a> ExternalBufferProperties<'a> {
11995    #[inline]
11996    pub fn external_memory_properties(
11997        mut self,
11998        external_memory_properties: ExternalMemoryProperties,
11999    ) -> Self {
12000        self.external_memory_properties = external_memory_properties;
12001        self
12002    }
12003}
12004#[repr(C)]
12005#[cfg_attr(feature = "debug", derive(Debug))]
12006#[derive(Copy, Clone)]
12007#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceIDProperties.html>"]
12008#[must_use]
12009pub struct PhysicalDeviceIDProperties<'a> {
12010    pub s_type: StructureType,
12011    pub p_next: *mut c_void,
12012    pub device_uuid: [u8; UUID_SIZE],
12013    pub driver_uuid: [u8; UUID_SIZE],
12014    pub device_luid: [u8; LUID_SIZE],
12015    pub device_node_mask: u32,
12016    pub device_luid_valid: Bool32,
12017    pub _marker: PhantomData<&'a ()>,
12018}
12019unsafe impl Send for PhysicalDeviceIDProperties<'_> {}
12020unsafe impl Sync for PhysicalDeviceIDProperties<'_> {}
12021impl ::core::default::Default for PhysicalDeviceIDProperties<'_> {
12022    #[inline]
12023    fn default() -> Self {
12024        Self {
12025            s_type: Self::STRUCTURE_TYPE,
12026            p_next: ::core::ptr::null_mut(),
12027            device_uuid: unsafe { ::core::mem::zeroed() },
12028            driver_uuid: unsafe { ::core::mem::zeroed() },
12029            device_luid: unsafe { ::core::mem::zeroed() },
12030            device_node_mask: u32::default(),
12031            device_luid_valid: Bool32::default(),
12032            _marker: PhantomData,
12033        }
12034    }
12035}
12036unsafe impl<'a> TaggedStructure for PhysicalDeviceIDProperties<'a> {
12037    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_ID_PROPERTIES;
12038}
12039unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceIDProperties<'_> {}
12040impl<'a> PhysicalDeviceIDProperties<'a> {
12041    #[inline]
12042    pub fn device_uuid(mut self, device_uuid: [u8; UUID_SIZE]) -> Self {
12043        self.device_uuid = device_uuid;
12044        self
12045    }
12046    #[inline]
12047    pub fn driver_uuid(mut self, driver_uuid: [u8; UUID_SIZE]) -> Self {
12048        self.driver_uuid = driver_uuid;
12049        self
12050    }
12051    #[inline]
12052    pub fn device_luid(mut self, device_luid: [u8; LUID_SIZE]) -> Self {
12053        self.device_luid = device_luid;
12054        self
12055    }
12056    #[inline]
12057    pub fn device_node_mask(mut self, device_node_mask: u32) -> Self {
12058        self.device_node_mask = device_node_mask;
12059        self
12060    }
12061    #[inline]
12062    pub fn device_luid_valid(mut self, device_luid_valid: bool) -> Self {
12063        self.device_luid_valid = device_luid_valid.into();
12064        self
12065    }
12066}
12067#[repr(C)]
12068#[cfg_attr(feature = "debug", derive(Debug))]
12069#[derive(Copy, Clone)]
12070#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalMemoryImageCreateInfo.html>"]
12071#[must_use]
12072pub struct ExternalMemoryImageCreateInfo<'a> {
12073    pub s_type: StructureType,
12074    pub p_next: *const c_void,
12075    pub handle_types: ExternalMemoryHandleTypeFlags,
12076    pub _marker: PhantomData<&'a ()>,
12077}
12078unsafe impl Send for ExternalMemoryImageCreateInfo<'_> {}
12079unsafe impl Sync for ExternalMemoryImageCreateInfo<'_> {}
12080impl ::core::default::Default for ExternalMemoryImageCreateInfo<'_> {
12081    #[inline]
12082    fn default() -> Self {
12083        Self {
12084            s_type: Self::STRUCTURE_TYPE,
12085            p_next: ::core::ptr::null(),
12086            handle_types: ExternalMemoryHandleTypeFlags::default(),
12087            _marker: PhantomData,
12088        }
12089    }
12090}
12091unsafe impl<'a> TaggedStructure for ExternalMemoryImageCreateInfo<'a> {
12092    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_MEMORY_IMAGE_CREATE_INFO;
12093}
12094unsafe impl ExtendsImageCreateInfo for ExternalMemoryImageCreateInfo<'_> {}
12095impl<'a> ExternalMemoryImageCreateInfo<'a> {
12096    #[inline]
12097    pub fn handle_types(mut self, handle_types: ExternalMemoryHandleTypeFlags) -> Self {
12098        self.handle_types = handle_types;
12099        self
12100    }
12101}
12102#[repr(C)]
12103#[cfg_attr(feature = "debug", derive(Debug))]
12104#[derive(Copy, Clone)]
12105#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalMemoryBufferCreateInfo.html>"]
12106#[must_use]
12107pub struct ExternalMemoryBufferCreateInfo<'a> {
12108    pub s_type: StructureType,
12109    pub p_next: *const c_void,
12110    pub handle_types: ExternalMemoryHandleTypeFlags,
12111    pub _marker: PhantomData<&'a ()>,
12112}
12113unsafe impl Send for ExternalMemoryBufferCreateInfo<'_> {}
12114unsafe impl Sync for ExternalMemoryBufferCreateInfo<'_> {}
12115impl ::core::default::Default for ExternalMemoryBufferCreateInfo<'_> {
12116    #[inline]
12117    fn default() -> Self {
12118        Self {
12119            s_type: Self::STRUCTURE_TYPE,
12120            p_next: ::core::ptr::null(),
12121            handle_types: ExternalMemoryHandleTypeFlags::default(),
12122            _marker: PhantomData,
12123        }
12124    }
12125}
12126unsafe impl<'a> TaggedStructure for ExternalMemoryBufferCreateInfo<'a> {
12127    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_MEMORY_BUFFER_CREATE_INFO;
12128}
12129unsafe impl ExtendsBufferCreateInfo for ExternalMemoryBufferCreateInfo<'_> {}
12130impl<'a> ExternalMemoryBufferCreateInfo<'a> {
12131    #[inline]
12132    pub fn handle_types(mut self, handle_types: ExternalMemoryHandleTypeFlags) -> Self {
12133        self.handle_types = handle_types;
12134        self
12135    }
12136}
12137#[repr(C)]
12138#[cfg_attr(feature = "debug", derive(Debug))]
12139#[derive(Copy, Clone)]
12140#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMemoryAllocateInfo.html>"]
12141#[must_use]
12142pub struct ExportMemoryAllocateInfo<'a> {
12143    pub s_type: StructureType,
12144    pub p_next: *const c_void,
12145    pub handle_types: ExternalMemoryHandleTypeFlags,
12146    pub _marker: PhantomData<&'a ()>,
12147}
12148unsafe impl Send for ExportMemoryAllocateInfo<'_> {}
12149unsafe impl Sync for ExportMemoryAllocateInfo<'_> {}
12150impl ::core::default::Default for ExportMemoryAllocateInfo<'_> {
12151    #[inline]
12152    fn default() -> Self {
12153        Self {
12154            s_type: Self::STRUCTURE_TYPE,
12155            p_next: ::core::ptr::null(),
12156            handle_types: ExternalMemoryHandleTypeFlags::default(),
12157            _marker: PhantomData,
12158        }
12159    }
12160}
12161unsafe impl<'a> TaggedStructure for ExportMemoryAllocateInfo<'a> {
12162    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_MEMORY_ALLOCATE_INFO;
12163}
12164unsafe impl ExtendsMemoryAllocateInfo for ExportMemoryAllocateInfo<'_> {}
12165impl<'a> ExportMemoryAllocateInfo<'a> {
12166    #[inline]
12167    pub fn handle_types(mut self, handle_types: ExternalMemoryHandleTypeFlags) -> Self {
12168        self.handle_types = handle_types;
12169        self
12170    }
12171}
12172#[repr(C)]
12173#[cfg_attr(feature = "debug", derive(Debug))]
12174#[derive(Copy, Clone)]
12175#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryWin32HandleInfoKHR.html>"]
12176#[must_use]
12177pub struct ImportMemoryWin32HandleInfoKHR<'a> {
12178    pub s_type: StructureType,
12179    pub p_next: *const c_void,
12180    pub handle_type: ExternalMemoryHandleTypeFlags,
12181    pub handle: HANDLE,
12182    pub name: LPCWSTR,
12183    pub _marker: PhantomData<&'a ()>,
12184}
12185unsafe impl Send for ImportMemoryWin32HandleInfoKHR<'_> {}
12186unsafe impl Sync for ImportMemoryWin32HandleInfoKHR<'_> {}
12187impl ::core::default::Default for ImportMemoryWin32HandleInfoKHR<'_> {
12188    #[inline]
12189    fn default() -> Self {
12190        Self {
12191            s_type: Self::STRUCTURE_TYPE,
12192            p_next: ::core::ptr::null(),
12193            handle_type: ExternalMemoryHandleTypeFlags::default(),
12194            handle: unsafe { ::core::mem::zeroed() },
12195            name: unsafe { ::core::mem::zeroed() },
12196            _marker: PhantomData,
12197        }
12198    }
12199}
12200unsafe impl<'a> TaggedStructure for ImportMemoryWin32HandleInfoKHR<'a> {
12201    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
12202}
12203unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryWin32HandleInfoKHR<'_> {}
12204impl<'a> ImportMemoryWin32HandleInfoKHR<'a> {
12205    #[inline]
12206    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12207        self.handle_type = handle_type;
12208        self
12209    }
12210    #[inline]
12211    pub fn handle(mut self, handle: HANDLE) -> Self {
12212        self.handle = handle;
12213        self
12214    }
12215    #[inline]
12216    pub fn name(mut self, name: LPCWSTR) -> Self {
12217        self.name = name;
12218        self
12219    }
12220}
12221#[repr(C)]
12222#[cfg_attr(feature = "debug", derive(Debug))]
12223#[derive(Copy, Clone)]
12224#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMemoryWin32HandleInfoKHR.html>"]
12225#[must_use]
12226pub struct ExportMemoryWin32HandleInfoKHR<'a> {
12227    pub s_type: StructureType,
12228    pub p_next: *const c_void,
12229    pub p_attributes: *const SECURITY_ATTRIBUTES,
12230    pub dw_access: DWORD,
12231    pub name: LPCWSTR,
12232    pub _marker: PhantomData<&'a ()>,
12233}
12234unsafe impl Send for ExportMemoryWin32HandleInfoKHR<'_> {}
12235unsafe impl Sync for ExportMemoryWin32HandleInfoKHR<'_> {}
12236impl ::core::default::Default for ExportMemoryWin32HandleInfoKHR<'_> {
12237    #[inline]
12238    fn default() -> Self {
12239        Self {
12240            s_type: Self::STRUCTURE_TYPE,
12241            p_next: ::core::ptr::null(),
12242            p_attributes: ::core::ptr::null(),
12243            dw_access: DWORD::default(),
12244            name: unsafe { ::core::mem::zeroed() },
12245            _marker: PhantomData,
12246        }
12247    }
12248}
12249unsafe impl<'a> TaggedStructure for ExportMemoryWin32HandleInfoKHR<'a> {
12250    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR;
12251}
12252unsafe impl ExtendsMemoryAllocateInfo for ExportMemoryWin32HandleInfoKHR<'_> {}
12253impl<'a> ExportMemoryWin32HandleInfoKHR<'a> {
12254    #[inline]
12255    pub fn attributes(mut self, attributes: &'a SECURITY_ATTRIBUTES) -> Self {
12256        self.p_attributes = attributes;
12257        self
12258    }
12259    #[inline]
12260    pub fn dw_access(mut self, dw_access: DWORD) -> Self {
12261        self.dw_access = dw_access;
12262        self
12263    }
12264    #[inline]
12265    pub fn name(mut self, name: LPCWSTR) -> Self {
12266        self.name = name;
12267        self
12268    }
12269}
12270#[repr(C)]
12271#[cfg_attr(feature = "debug", derive(Debug))]
12272#[derive(Copy, Clone)]
12273#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryZirconHandleInfoFUCHSIA.html>"]
12274#[must_use]
12275pub struct ImportMemoryZirconHandleInfoFUCHSIA<'a> {
12276    pub s_type: StructureType,
12277    pub p_next: *const c_void,
12278    pub handle_type: ExternalMemoryHandleTypeFlags,
12279    pub handle: zx_handle_t,
12280    pub _marker: PhantomData<&'a ()>,
12281}
12282unsafe impl Send for ImportMemoryZirconHandleInfoFUCHSIA<'_> {}
12283unsafe impl Sync for ImportMemoryZirconHandleInfoFUCHSIA<'_> {}
12284impl ::core::default::Default for ImportMemoryZirconHandleInfoFUCHSIA<'_> {
12285    #[inline]
12286    fn default() -> Self {
12287        Self {
12288            s_type: Self::STRUCTURE_TYPE,
12289            p_next: ::core::ptr::null(),
12290            handle_type: ExternalMemoryHandleTypeFlags::default(),
12291            handle: zx_handle_t::default(),
12292            _marker: PhantomData,
12293        }
12294    }
12295}
12296unsafe impl<'a> TaggedStructure for ImportMemoryZirconHandleInfoFUCHSIA<'a> {
12297    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA;
12298}
12299unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryZirconHandleInfoFUCHSIA<'_> {}
12300impl<'a> ImportMemoryZirconHandleInfoFUCHSIA<'a> {
12301    #[inline]
12302    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12303        self.handle_type = handle_type;
12304        self
12305    }
12306    #[inline]
12307    pub fn handle(mut self, handle: zx_handle_t) -> Self {
12308        self.handle = handle;
12309        self
12310    }
12311}
12312#[repr(C)]
12313#[cfg_attr(feature = "debug", derive(Debug))]
12314#[derive(Copy, Clone)]
12315#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryZirconHandlePropertiesFUCHSIA.html>"]
12316#[must_use]
12317pub struct MemoryZirconHandlePropertiesFUCHSIA<'a> {
12318    pub s_type: StructureType,
12319    pub p_next: *mut c_void,
12320    pub memory_type_bits: u32,
12321    pub _marker: PhantomData<&'a ()>,
12322}
12323unsafe impl Send for MemoryZirconHandlePropertiesFUCHSIA<'_> {}
12324unsafe impl Sync for MemoryZirconHandlePropertiesFUCHSIA<'_> {}
12325impl ::core::default::Default for MemoryZirconHandlePropertiesFUCHSIA<'_> {
12326    #[inline]
12327    fn default() -> Self {
12328        Self {
12329            s_type: Self::STRUCTURE_TYPE,
12330            p_next: ::core::ptr::null_mut(),
12331            memory_type_bits: u32::default(),
12332            _marker: PhantomData,
12333        }
12334    }
12335}
12336unsafe impl<'a> TaggedStructure for MemoryZirconHandlePropertiesFUCHSIA<'a> {
12337    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA;
12338}
12339impl<'a> MemoryZirconHandlePropertiesFUCHSIA<'a> {
12340    #[inline]
12341    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
12342        self.memory_type_bits = memory_type_bits;
12343        self
12344    }
12345}
12346#[repr(C)]
12347#[cfg_attr(feature = "debug", derive(Debug))]
12348#[derive(Copy, Clone)]
12349#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryGetZirconHandleInfoFUCHSIA.html>"]
12350#[must_use]
12351pub struct MemoryGetZirconHandleInfoFUCHSIA<'a> {
12352    pub s_type: StructureType,
12353    pub p_next: *const c_void,
12354    pub memory: DeviceMemory,
12355    pub handle_type: ExternalMemoryHandleTypeFlags,
12356    pub _marker: PhantomData<&'a ()>,
12357}
12358unsafe impl Send for MemoryGetZirconHandleInfoFUCHSIA<'_> {}
12359unsafe impl Sync for MemoryGetZirconHandleInfoFUCHSIA<'_> {}
12360impl ::core::default::Default for MemoryGetZirconHandleInfoFUCHSIA<'_> {
12361    #[inline]
12362    fn default() -> Self {
12363        Self {
12364            s_type: Self::STRUCTURE_TYPE,
12365            p_next: ::core::ptr::null(),
12366            memory: DeviceMemory::default(),
12367            handle_type: ExternalMemoryHandleTypeFlags::default(),
12368            _marker: PhantomData,
12369        }
12370    }
12371}
12372unsafe impl<'a> TaggedStructure for MemoryGetZirconHandleInfoFUCHSIA<'a> {
12373    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
12374}
12375impl<'a> MemoryGetZirconHandleInfoFUCHSIA<'a> {
12376    #[inline]
12377    pub fn memory(mut self, memory: DeviceMemory) -> Self {
12378        self.memory = memory;
12379        self
12380    }
12381    #[inline]
12382    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12383        self.handle_type = handle_type;
12384        self
12385    }
12386}
12387#[repr(C)]
12388#[cfg_attr(feature = "debug", derive(Debug))]
12389#[derive(Copy, Clone)]
12390#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryWin32HandlePropertiesKHR.html>"]
12391#[must_use]
12392pub struct MemoryWin32HandlePropertiesKHR<'a> {
12393    pub s_type: StructureType,
12394    pub p_next: *mut c_void,
12395    pub memory_type_bits: u32,
12396    pub _marker: PhantomData<&'a ()>,
12397}
12398unsafe impl Send for MemoryWin32HandlePropertiesKHR<'_> {}
12399unsafe impl Sync for MemoryWin32HandlePropertiesKHR<'_> {}
12400impl ::core::default::Default for MemoryWin32HandlePropertiesKHR<'_> {
12401    #[inline]
12402    fn default() -> Self {
12403        Self {
12404            s_type: Self::STRUCTURE_TYPE,
12405            p_next: ::core::ptr::null_mut(),
12406            memory_type_bits: u32::default(),
12407            _marker: PhantomData,
12408        }
12409    }
12410}
12411unsafe impl<'a> TaggedStructure for MemoryWin32HandlePropertiesKHR<'a> {
12412    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_WIN32_HANDLE_PROPERTIES_KHR;
12413}
12414impl<'a> MemoryWin32HandlePropertiesKHR<'a> {
12415    #[inline]
12416    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
12417        self.memory_type_bits = memory_type_bits;
12418        self
12419    }
12420}
12421#[repr(C)]
12422#[cfg_attr(feature = "debug", derive(Debug))]
12423#[derive(Copy, Clone)]
12424#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryGetWin32HandleInfoKHR.html>"]
12425#[must_use]
12426pub struct MemoryGetWin32HandleInfoKHR<'a> {
12427    pub s_type: StructureType,
12428    pub p_next: *const c_void,
12429    pub memory: DeviceMemory,
12430    pub handle_type: ExternalMemoryHandleTypeFlags,
12431    pub _marker: PhantomData<&'a ()>,
12432}
12433unsafe impl Send for MemoryGetWin32HandleInfoKHR<'_> {}
12434unsafe impl Sync for MemoryGetWin32HandleInfoKHR<'_> {}
12435impl ::core::default::Default for MemoryGetWin32HandleInfoKHR<'_> {
12436    #[inline]
12437    fn default() -> Self {
12438        Self {
12439            s_type: Self::STRUCTURE_TYPE,
12440            p_next: ::core::ptr::null(),
12441            memory: DeviceMemory::default(),
12442            handle_type: ExternalMemoryHandleTypeFlags::default(),
12443            _marker: PhantomData,
12444        }
12445    }
12446}
12447unsafe impl<'a> TaggedStructure for MemoryGetWin32HandleInfoKHR<'a> {
12448    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_GET_WIN32_HANDLE_INFO_KHR;
12449}
12450impl<'a> MemoryGetWin32HandleInfoKHR<'a> {
12451    #[inline]
12452    pub fn memory(mut self, memory: DeviceMemory) -> Self {
12453        self.memory = memory;
12454        self
12455    }
12456    #[inline]
12457    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12458        self.handle_type = handle_type;
12459        self
12460    }
12461}
12462#[repr(C)]
12463#[cfg_attr(feature = "debug", derive(Debug))]
12464#[derive(Copy, Clone)]
12465#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryFdInfoKHR.html>"]
12466#[must_use]
12467pub struct ImportMemoryFdInfoKHR<'a> {
12468    pub s_type: StructureType,
12469    pub p_next: *const c_void,
12470    pub handle_type: ExternalMemoryHandleTypeFlags,
12471    pub fd: c_int,
12472    pub _marker: PhantomData<&'a ()>,
12473}
12474unsafe impl Send for ImportMemoryFdInfoKHR<'_> {}
12475unsafe impl Sync for ImportMemoryFdInfoKHR<'_> {}
12476impl ::core::default::Default for ImportMemoryFdInfoKHR<'_> {
12477    #[inline]
12478    fn default() -> Self {
12479        Self {
12480            s_type: Self::STRUCTURE_TYPE,
12481            p_next: ::core::ptr::null(),
12482            handle_type: ExternalMemoryHandleTypeFlags::default(),
12483            fd: c_int::default(),
12484            _marker: PhantomData,
12485        }
12486    }
12487}
12488unsafe impl<'a> TaggedStructure for ImportMemoryFdInfoKHR<'a> {
12489    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_FD_INFO_KHR;
12490}
12491unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryFdInfoKHR<'_> {}
12492impl<'a> ImportMemoryFdInfoKHR<'a> {
12493    #[inline]
12494    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12495        self.handle_type = handle_type;
12496        self
12497    }
12498    #[inline]
12499    pub fn fd(mut self, fd: c_int) -> Self {
12500        self.fd = fd;
12501        self
12502    }
12503}
12504#[repr(C)]
12505#[cfg_attr(feature = "debug", derive(Debug))]
12506#[derive(Copy, Clone)]
12507#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryFdPropertiesKHR.html>"]
12508#[must_use]
12509pub struct MemoryFdPropertiesKHR<'a> {
12510    pub s_type: StructureType,
12511    pub p_next: *mut c_void,
12512    pub memory_type_bits: u32,
12513    pub _marker: PhantomData<&'a ()>,
12514}
12515unsafe impl Send for MemoryFdPropertiesKHR<'_> {}
12516unsafe impl Sync for MemoryFdPropertiesKHR<'_> {}
12517impl ::core::default::Default for MemoryFdPropertiesKHR<'_> {
12518    #[inline]
12519    fn default() -> Self {
12520        Self {
12521            s_type: Self::STRUCTURE_TYPE,
12522            p_next: ::core::ptr::null_mut(),
12523            memory_type_bits: u32::default(),
12524            _marker: PhantomData,
12525        }
12526    }
12527}
12528unsafe impl<'a> TaggedStructure for MemoryFdPropertiesKHR<'a> {
12529    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_FD_PROPERTIES_KHR;
12530}
12531impl<'a> MemoryFdPropertiesKHR<'a> {
12532    #[inline]
12533    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
12534        self.memory_type_bits = memory_type_bits;
12535        self
12536    }
12537}
12538#[repr(C)]
12539#[cfg_attr(feature = "debug", derive(Debug))]
12540#[derive(Copy, Clone)]
12541#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryGetFdInfoKHR.html>"]
12542#[must_use]
12543pub struct MemoryGetFdInfoKHR<'a> {
12544    pub s_type: StructureType,
12545    pub p_next: *const c_void,
12546    pub memory: DeviceMemory,
12547    pub handle_type: ExternalMemoryHandleTypeFlags,
12548    pub _marker: PhantomData<&'a ()>,
12549}
12550unsafe impl Send for MemoryGetFdInfoKHR<'_> {}
12551unsafe impl Sync for MemoryGetFdInfoKHR<'_> {}
12552impl ::core::default::Default for MemoryGetFdInfoKHR<'_> {
12553    #[inline]
12554    fn default() -> Self {
12555        Self {
12556            s_type: Self::STRUCTURE_TYPE,
12557            p_next: ::core::ptr::null(),
12558            memory: DeviceMemory::default(),
12559            handle_type: ExternalMemoryHandleTypeFlags::default(),
12560            _marker: PhantomData,
12561        }
12562    }
12563}
12564unsafe impl<'a> TaggedStructure for MemoryGetFdInfoKHR<'a> {
12565    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_GET_FD_INFO_KHR;
12566}
12567impl<'a> MemoryGetFdInfoKHR<'a> {
12568    #[inline]
12569    pub fn memory(mut self, memory: DeviceMemory) -> Self {
12570        self.memory = memory;
12571        self
12572    }
12573    #[inline]
12574    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
12575        self.handle_type = handle_type;
12576        self
12577    }
12578}
12579#[repr(C)]
12580#[cfg_attr(feature = "debug", derive(Debug))]
12581#[derive(Copy, Clone)]
12582#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWin32KeyedMutexAcquireReleaseInfoKHR.html>"]
12583#[must_use]
12584pub struct Win32KeyedMutexAcquireReleaseInfoKHR<'a> {
12585    pub s_type: StructureType,
12586    pub p_next: *const c_void,
12587    pub acquire_count: u32,
12588    pub p_acquire_syncs: *const DeviceMemory,
12589    pub p_acquire_keys: *const u64,
12590    pub p_acquire_timeouts: *const u32,
12591    pub release_count: u32,
12592    pub p_release_syncs: *const DeviceMemory,
12593    pub p_release_keys: *const u64,
12594    pub _marker: PhantomData<&'a ()>,
12595}
12596unsafe impl Send for Win32KeyedMutexAcquireReleaseInfoKHR<'_> {}
12597unsafe impl Sync for Win32KeyedMutexAcquireReleaseInfoKHR<'_> {}
12598impl ::core::default::Default for Win32KeyedMutexAcquireReleaseInfoKHR<'_> {
12599    #[inline]
12600    fn default() -> Self {
12601        Self {
12602            s_type: Self::STRUCTURE_TYPE,
12603            p_next: ::core::ptr::null(),
12604            acquire_count: u32::default(),
12605            p_acquire_syncs: ::core::ptr::null(),
12606            p_acquire_keys: ::core::ptr::null(),
12607            p_acquire_timeouts: ::core::ptr::null(),
12608            release_count: u32::default(),
12609            p_release_syncs: ::core::ptr::null(),
12610            p_release_keys: ::core::ptr::null(),
12611            _marker: PhantomData,
12612        }
12613    }
12614}
12615unsafe impl<'a> TaggedStructure for Win32KeyedMutexAcquireReleaseInfoKHR<'a> {
12616    const STRUCTURE_TYPE: StructureType = StructureType::WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR;
12617}
12618unsafe impl ExtendsSubmitInfo for Win32KeyedMutexAcquireReleaseInfoKHR<'_> {}
12619unsafe impl ExtendsSubmitInfo2 for Win32KeyedMutexAcquireReleaseInfoKHR<'_> {}
12620impl<'a> Win32KeyedMutexAcquireReleaseInfoKHR<'a> {
12621    #[inline]
12622    pub fn acquire_syncs(mut self, acquire_syncs: &'a [DeviceMemory]) -> Self {
12623        self.acquire_count = acquire_syncs.len() as _;
12624        self.p_acquire_syncs = acquire_syncs.as_ptr();
12625        self
12626    }
12627    #[inline]
12628    pub fn acquire_keys(mut self, acquire_keys: &'a [u64]) -> Self {
12629        self.acquire_count = acquire_keys.len() as _;
12630        self.p_acquire_keys = acquire_keys.as_ptr();
12631        self
12632    }
12633    #[inline]
12634    pub fn acquire_timeouts(mut self, acquire_timeouts: &'a [u32]) -> Self {
12635        self.acquire_count = acquire_timeouts.len() as _;
12636        self.p_acquire_timeouts = acquire_timeouts.as_ptr();
12637        self
12638    }
12639    #[inline]
12640    pub fn release_syncs(mut self, release_syncs: &'a [DeviceMemory]) -> Self {
12641        self.release_count = release_syncs.len() as _;
12642        self.p_release_syncs = release_syncs.as_ptr();
12643        self
12644    }
12645    #[inline]
12646    pub fn release_keys(mut self, release_keys: &'a [u64]) -> Self {
12647        self.release_count = release_keys.len() as _;
12648        self.p_release_keys = release_keys.as_ptr();
12649        self
12650    }
12651}
12652#[repr(C)]
12653#[cfg_attr(feature = "debug", derive(Debug))]
12654#[derive(Copy, Clone)]
12655#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalSemaphoreInfo.html>"]
12656#[must_use]
12657pub struct PhysicalDeviceExternalSemaphoreInfo<'a> {
12658    pub s_type: StructureType,
12659    pub p_next: *const c_void,
12660    pub handle_type: ExternalSemaphoreHandleTypeFlags,
12661    pub _marker: PhantomData<&'a ()>,
12662}
12663unsafe impl Send for PhysicalDeviceExternalSemaphoreInfo<'_> {}
12664unsafe impl Sync for PhysicalDeviceExternalSemaphoreInfo<'_> {}
12665impl ::core::default::Default for PhysicalDeviceExternalSemaphoreInfo<'_> {
12666    #[inline]
12667    fn default() -> Self {
12668        Self {
12669            s_type: Self::STRUCTURE_TYPE,
12670            p_next: ::core::ptr::null(),
12671            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
12672            _marker: PhantomData,
12673        }
12674    }
12675}
12676unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalSemaphoreInfo<'a> {
12677    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO;
12678}
12679pub unsafe trait ExtendsPhysicalDeviceExternalSemaphoreInfo {}
12680impl<'a> PhysicalDeviceExternalSemaphoreInfo<'a> {
12681    #[inline]
12682    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
12683        self.handle_type = handle_type;
12684        self
12685    }
12686    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
12687    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
12688    #[doc = r" valid extension structs can be pushed into the chain."]
12689    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
12690    #[doc = r" chain will look like `A -> D -> B -> C`."]
12691    pub fn push_next<T: ExtendsPhysicalDeviceExternalSemaphoreInfo + ?Sized>(
12692        mut self,
12693        next: &'a mut T,
12694    ) -> Self {
12695        unsafe {
12696            let next_ptr = <*const T>::cast(next);
12697            let last_next = ptr_chain_iter(next).last().unwrap();
12698            (*last_next).p_next = self.p_next as _;
12699            self.p_next = next_ptr;
12700        }
12701        self
12702    }
12703}
12704#[repr(C)]
12705#[cfg_attr(feature = "debug", derive(Debug))]
12706#[derive(Copy, Clone)]
12707#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalSemaphoreProperties.html>"]
12708#[must_use]
12709pub struct ExternalSemaphoreProperties<'a> {
12710    pub s_type: StructureType,
12711    pub p_next: *mut c_void,
12712    pub export_from_imported_handle_types: ExternalSemaphoreHandleTypeFlags,
12713    pub compatible_handle_types: ExternalSemaphoreHandleTypeFlags,
12714    pub external_semaphore_features: ExternalSemaphoreFeatureFlags,
12715    pub _marker: PhantomData<&'a ()>,
12716}
12717unsafe impl Send for ExternalSemaphoreProperties<'_> {}
12718unsafe impl Sync for ExternalSemaphoreProperties<'_> {}
12719impl ::core::default::Default for ExternalSemaphoreProperties<'_> {
12720    #[inline]
12721    fn default() -> Self {
12722        Self {
12723            s_type: Self::STRUCTURE_TYPE,
12724            p_next: ::core::ptr::null_mut(),
12725            export_from_imported_handle_types: ExternalSemaphoreHandleTypeFlags::default(),
12726            compatible_handle_types: ExternalSemaphoreHandleTypeFlags::default(),
12727            external_semaphore_features: ExternalSemaphoreFeatureFlags::default(),
12728            _marker: PhantomData,
12729        }
12730    }
12731}
12732unsafe impl<'a> TaggedStructure for ExternalSemaphoreProperties<'a> {
12733    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_SEMAPHORE_PROPERTIES;
12734}
12735impl<'a> ExternalSemaphoreProperties<'a> {
12736    #[inline]
12737    pub fn export_from_imported_handle_types(
12738        mut self,
12739        export_from_imported_handle_types: ExternalSemaphoreHandleTypeFlags,
12740    ) -> Self {
12741        self.export_from_imported_handle_types = export_from_imported_handle_types;
12742        self
12743    }
12744    #[inline]
12745    pub fn compatible_handle_types(
12746        mut self,
12747        compatible_handle_types: ExternalSemaphoreHandleTypeFlags,
12748    ) -> Self {
12749        self.compatible_handle_types = compatible_handle_types;
12750        self
12751    }
12752    #[inline]
12753    pub fn external_semaphore_features(
12754        mut self,
12755        external_semaphore_features: ExternalSemaphoreFeatureFlags,
12756    ) -> Self {
12757        self.external_semaphore_features = external_semaphore_features;
12758        self
12759    }
12760}
12761#[repr(C)]
12762#[cfg_attr(feature = "debug", derive(Debug))]
12763#[derive(Copy, Clone)]
12764#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportSemaphoreCreateInfo.html>"]
12765#[must_use]
12766pub struct ExportSemaphoreCreateInfo<'a> {
12767    pub s_type: StructureType,
12768    pub p_next: *const c_void,
12769    pub handle_types: ExternalSemaphoreHandleTypeFlags,
12770    pub _marker: PhantomData<&'a ()>,
12771}
12772unsafe impl Send for ExportSemaphoreCreateInfo<'_> {}
12773unsafe impl Sync for ExportSemaphoreCreateInfo<'_> {}
12774impl ::core::default::Default for ExportSemaphoreCreateInfo<'_> {
12775    #[inline]
12776    fn default() -> Self {
12777        Self {
12778            s_type: Self::STRUCTURE_TYPE,
12779            p_next: ::core::ptr::null(),
12780            handle_types: ExternalSemaphoreHandleTypeFlags::default(),
12781            _marker: PhantomData,
12782        }
12783    }
12784}
12785unsafe impl<'a> TaggedStructure for ExportSemaphoreCreateInfo<'a> {
12786    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_SEMAPHORE_CREATE_INFO;
12787}
12788unsafe impl ExtendsSemaphoreCreateInfo for ExportSemaphoreCreateInfo<'_> {}
12789impl<'a> ExportSemaphoreCreateInfo<'a> {
12790    #[inline]
12791    pub fn handle_types(mut self, handle_types: ExternalSemaphoreHandleTypeFlags) -> Self {
12792        self.handle_types = handle_types;
12793        self
12794    }
12795}
12796#[repr(C)]
12797#[cfg_attr(feature = "debug", derive(Debug))]
12798#[derive(Copy, Clone)]
12799#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportSemaphoreWin32HandleInfoKHR.html>"]
12800#[must_use]
12801pub struct ImportSemaphoreWin32HandleInfoKHR<'a> {
12802    pub s_type: StructureType,
12803    pub p_next: *const c_void,
12804    pub semaphore: Semaphore,
12805    pub flags: SemaphoreImportFlags,
12806    pub handle_type: ExternalSemaphoreHandleTypeFlags,
12807    pub handle: HANDLE,
12808    pub name: LPCWSTR,
12809    pub _marker: PhantomData<&'a ()>,
12810}
12811unsafe impl Send for ImportSemaphoreWin32HandleInfoKHR<'_> {}
12812unsafe impl Sync for ImportSemaphoreWin32HandleInfoKHR<'_> {}
12813impl ::core::default::Default for ImportSemaphoreWin32HandleInfoKHR<'_> {
12814    #[inline]
12815    fn default() -> Self {
12816        Self {
12817            s_type: Self::STRUCTURE_TYPE,
12818            p_next: ::core::ptr::null(),
12819            semaphore: Semaphore::default(),
12820            flags: SemaphoreImportFlags::default(),
12821            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
12822            handle: unsafe { ::core::mem::zeroed() },
12823            name: unsafe { ::core::mem::zeroed() },
12824            _marker: PhantomData,
12825        }
12826    }
12827}
12828unsafe impl<'a> TaggedStructure for ImportSemaphoreWin32HandleInfoKHR<'a> {
12829    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
12830}
12831impl<'a> ImportSemaphoreWin32HandleInfoKHR<'a> {
12832    #[inline]
12833    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
12834        self.semaphore = semaphore;
12835        self
12836    }
12837    #[inline]
12838    pub fn flags(mut self, flags: SemaphoreImportFlags) -> Self {
12839        self.flags = flags;
12840        self
12841    }
12842    #[inline]
12843    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
12844        self.handle_type = handle_type;
12845        self
12846    }
12847    #[inline]
12848    pub fn handle(mut self, handle: HANDLE) -> Self {
12849        self.handle = handle;
12850        self
12851    }
12852    #[inline]
12853    pub fn name(mut self, name: LPCWSTR) -> Self {
12854        self.name = name;
12855        self
12856    }
12857}
12858#[repr(C)]
12859#[cfg_attr(feature = "debug", derive(Debug))]
12860#[derive(Copy, Clone)]
12861#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportSemaphoreWin32HandleInfoKHR.html>"]
12862#[must_use]
12863pub struct ExportSemaphoreWin32HandleInfoKHR<'a> {
12864    pub s_type: StructureType,
12865    pub p_next: *const c_void,
12866    pub p_attributes: *const SECURITY_ATTRIBUTES,
12867    pub dw_access: DWORD,
12868    pub name: LPCWSTR,
12869    pub _marker: PhantomData<&'a ()>,
12870}
12871unsafe impl Send for ExportSemaphoreWin32HandleInfoKHR<'_> {}
12872unsafe impl Sync for ExportSemaphoreWin32HandleInfoKHR<'_> {}
12873impl ::core::default::Default for ExportSemaphoreWin32HandleInfoKHR<'_> {
12874    #[inline]
12875    fn default() -> Self {
12876        Self {
12877            s_type: Self::STRUCTURE_TYPE,
12878            p_next: ::core::ptr::null(),
12879            p_attributes: ::core::ptr::null(),
12880            dw_access: DWORD::default(),
12881            name: unsafe { ::core::mem::zeroed() },
12882            _marker: PhantomData,
12883        }
12884    }
12885}
12886unsafe impl<'a> TaggedStructure for ExportSemaphoreWin32HandleInfoKHR<'a> {
12887    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR;
12888}
12889unsafe impl ExtendsSemaphoreCreateInfo for ExportSemaphoreWin32HandleInfoKHR<'_> {}
12890impl<'a> ExportSemaphoreWin32HandleInfoKHR<'a> {
12891    #[inline]
12892    pub fn attributes(mut self, attributes: &'a SECURITY_ATTRIBUTES) -> Self {
12893        self.p_attributes = attributes;
12894        self
12895    }
12896    #[inline]
12897    pub fn dw_access(mut self, dw_access: DWORD) -> Self {
12898        self.dw_access = dw_access;
12899        self
12900    }
12901    #[inline]
12902    pub fn name(mut self, name: LPCWSTR) -> Self {
12903        self.name = name;
12904        self
12905    }
12906}
12907#[repr(C)]
12908#[cfg_attr(feature = "debug", derive(Debug))]
12909#[derive(Copy, Clone)]
12910#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkD3D12FenceSubmitInfoKHR.html>"]
12911#[must_use]
12912pub struct D3D12FenceSubmitInfoKHR<'a> {
12913    pub s_type: StructureType,
12914    pub p_next: *const c_void,
12915    pub wait_semaphore_values_count: u32,
12916    pub p_wait_semaphore_values: *const u64,
12917    pub signal_semaphore_values_count: u32,
12918    pub p_signal_semaphore_values: *const u64,
12919    pub _marker: PhantomData<&'a ()>,
12920}
12921unsafe impl Send for D3D12FenceSubmitInfoKHR<'_> {}
12922unsafe impl Sync for D3D12FenceSubmitInfoKHR<'_> {}
12923impl ::core::default::Default for D3D12FenceSubmitInfoKHR<'_> {
12924    #[inline]
12925    fn default() -> Self {
12926        Self {
12927            s_type: Self::STRUCTURE_TYPE,
12928            p_next: ::core::ptr::null(),
12929            wait_semaphore_values_count: u32::default(),
12930            p_wait_semaphore_values: ::core::ptr::null(),
12931            signal_semaphore_values_count: u32::default(),
12932            p_signal_semaphore_values: ::core::ptr::null(),
12933            _marker: PhantomData,
12934        }
12935    }
12936}
12937unsafe impl<'a> TaggedStructure for D3D12FenceSubmitInfoKHR<'a> {
12938    const STRUCTURE_TYPE: StructureType = StructureType::D3D12_FENCE_SUBMIT_INFO_KHR;
12939}
12940unsafe impl ExtendsSubmitInfo for D3D12FenceSubmitInfoKHR<'_> {}
12941impl<'a> D3D12FenceSubmitInfoKHR<'a> {
12942    #[inline]
12943    pub fn wait_semaphore_values(mut self, wait_semaphore_values: &'a [u64]) -> Self {
12944        self.wait_semaphore_values_count = wait_semaphore_values.len() as _;
12945        self.p_wait_semaphore_values = wait_semaphore_values.as_ptr();
12946        self
12947    }
12948    #[inline]
12949    pub fn signal_semaphore_values(mut self, signal_semaphore_values: &'a [u64]) -> Self {
12950        self.signal_semaphore_values_count = signal_semaphore_values.len() as _;
12951        self.p_signal_semaphore_values = signal_semaphore_values.as_ptr();
12952        self
12953    }
12954}
12955#[repr(C)]
12956#[cfg_attr(feature = "debug", derive(Debug))]
12957#[derive(Copy, Clone)]
12958#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreGetWin32HandleInfoKHR.html>"]
12959#[must_use]
12960pub struct SemaphoreGetWin32HandleInfoKHR<'a> {
12961    pub s_type: StructureType,
12962    pub p_next: *const c_void,
12963    pub semaphore: Semaphore,
12964    pub handle_type: ExternalSemaphoreHandleTypeFlags,
12965    pub _marker: PhantomData<&'a ()>,
12966}
12967unsafe impl Send for SemaphoreGetWin32HandleInfoKHR<'_> {}
12968unsafe impl Sync for SemaphoreGetWin32HandleInfoKHR<'_> {}
12969impl ::core::default::Default for SemaphoreGetWin32HandleInfoKHR<'_> {
12970    #[inline]
12971    fn default() -> Self {
12972        Self {
12973            s_type: Self::STRUCTURE_TYPE,
12974            p_next: ::core::ptr::null(),
12975            semaphore: Semaphore::default(),
12976            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
12977            _marker: PhantomData,
12978        }
12979    }
12980}
12981unsafe impl<'a> TaggedStructure for SemaphoreGetWin32HandleInfoKHR<'a> {
12982    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR;
12983}
12984impl<'a> SemaphoreGetWin32HandleInfoKHR<'a> {
12985    #[inline]
12986    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
12987        self.semaphore = semaphore;
12988        self
12989    }
12990    #[inline]
12991    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
12992        self.handle_type = handle_type;
12993        self
12994    }
12995}
12996#[repr(C)]
12997#[cfg_attr(feature = "debug", derive(Debug))]
12998#[derive(Copy, Clone)]
12999#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportSemaphoreFdInfoKHR.html>"]
13000#[must_use]
13001pub struct ImportSemaphoreFdInfoKHR<'a> {
13002    pub s_type: StructureType,
13003    pub p_next: *const c_void,
13004    pub semaphore: Semaphore,
13005    pub flags: SemaphoreImportFlags,
13006    pub handle_type: ExternalSemaphoreHandleTypeFlags,
13007    pub fd: c_int,
13008    pub _marker: PhantomData<&'a ()>,
13009}
13010unsafe impl Send for ImportSemaphoreFdInfoKHR<'_> {}
13011unsafe impl Sync for ImportSemaphoreFdInfoKHR<'_> {}
13012impl ::core::default::Default for ImportSemaphoreFdInfoKHR<'_> {
13013    #[inline]
13014    fn default() -> Self {
13015        Self {
13016            s_type: Self::STRUCTURE_TYPE,
13017            p_next: ::core::ptr::null(),
13018            semaphore: Semaphore::default(),
13019            flags: SemaphoreImportFlags::default(),
13020            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
13021            fd: c_int::default(),
13022            _marker: PhantomData,
13023        }
13024    }
13025}
13026unsafe impl<'a> TaggedStructure for ImportSemaphoreFdInfoKHR<'a> {
13027    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_SEMAPHORE_FD_INFO_KHR;
13028}
13029impl<'a> ImportSemaphoreFdInfoKHR<'a> {
13030    #[inline]
13031    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
13032        self.semaphore = semaphore;
13033        self
13034    }
13035    #[inline]
13036    pub fn flags(mut self, flags: SemaphoreImportFlags) -> Self {
13037        self.flags = flags;
13038        self
13039    }
13040    #[inline]
13041    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
13042        self.handle_type = handle_type;
13043        self
13044    }
13045    #[inline]
13046    pub fn fd(mut self, fd: c_int) -> Self {
13047        self.fd = fd;
13048        self
13049    }
13050}
13051#[repr(C)]
13052#[cfg_attr(feature = "debug", derive(Debug))]
13053#[derive(Copy, Clone)]
13054#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreGetFdInfoKHR.html>"]
13055#[must_use]
13056pub struct SemaphoreGetFdInfoKHR<'a> {
13057    pub s_type: StructureType,
13058    pub p_next: *const c_void,
13059    pub semaphore: Semaphore,
13060    pub handle_type: ExternalSemaphoreHandleTypeFlags,
13061    pub _marker: PhantomData<&'a ()>,
13062}
13063unsafe impl Send for SemaphoreGetFdInfoKHR<'_> {}
13064unsafe impl Sync for SemaphoreGetFdInfoKHR<'_> {}
13065impl ::core::default::Default for SemaphoreGetFdInfoKHR<'_> {
13066    #[inline]
13067    fn default() -> Self {
13068        Self {
13069            s_type: Self::STRUCTURE_TYPE,
13070            p_next: ::core::ptr::null(),
13071            semaphore: Semaphore::default(),
13072            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
13073            _marker: PhantomData,
13074        }
13075    }
13076}
13077unsafe impl<'a> TaggedStructure for SemaphoreGetFdInfoKHR<'a> {
13078    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_GET_FD_INFO_KHR;
13079}
13080impl<'a> SemaphoreGetFdInfoKHR<'a> {
13081    #[inline]
13082    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
13083        self.semaphore = semaphore;
13084        self
13085    }
13086    #[inline]
13087    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
13088        self.handle_type = handle_type;
13089        self
13090    }
13091}
13092#[repr(C)]
13093#[cfg_attr(feature = "debug", derive(Debug))]
13094#[derive(Copy, Clone)]
13095#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportSemaphoreZirconHandleInfoFUCHSIA.html>"]
13096#[must_use]
13097pub struct ImportSemaphoreZirconHandleInfoFUCHSIA<'a> {
13098    pub s_type: StructureType,
13099    pub p_next: *const c_void,
13100    pub semaphore: Semaphore,
13101    pub flags: SemaphoreImportFlags,
13102    pub handle_type: ExternalSemaphoreHandleTypeFlags,
13103    pub zircon_handle: zx_handle_t,
13104    pub _marker: PhantomData<&'a ()>,
13105}
13106unsafe impl Send for ImportSemaphoreZirconHandleInfoFUCHSIA<'_> {}
13107unsafe impl Sync for ImportSemaphoreZirconHandleInfoFUCHSIA<'_> {}
13108impl ::core::default::Default for ImportSemaphoreZirconHandleInfoFUCHSIA<'_> {
13109    #[inline]
13110    fn default() -> Self {
13111        Self {
13112            s_type: Self::STRUCTURE_TYPE,
13113            p_next: ::core::ptr::null(),
13114            semaphore: Semaphore::default(),
13115            flags: SemaphoreImportFlags::default(),
13116            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
13117            zircon_handle: zx_handle_t::default(),
13118            _marker: PhantomData,
13119        }
13120    }
13121}
13122unsafe impl<'a> TaggedStructure for ImportSemaphoreZirconHandleInfoFUCHSIA<'a> {
13123    const STRUCTURE_TYPE: StructureType =
13124        StructureType::IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA;
13125}
13126impl<'a> ImportSemaphoreZirconHandleInfoFUCHSIA<'a> {
13127    #[inline]
13128    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
13129        self.semaphore = semaphore;
13130        self
13131    }
13132    #[inline]
13133    pub fn flags(mut self, flags: SemaphoreImportFlags) -> Self {
13134        self.flags = flags;
13135        self
13136    }
13137    #[inline]
13138    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
13139        self.handle_type = handle_type;
13140        self
13141    }
13142    #[inline]
13143    pub fn zircon_handle(mut self, zircon_handle: zx_handle_t) -> Self {
13144        self.zircon_handle = zircon_handle;
13145        self
13146    }
13147}
13148#[repr(C)]
13149#[cfg_attr(feature = "debug", derive(Debug))]
13150#[derive(Copy, Clone)]
13151#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreGetZirconHandleInfoFUCHSIA.html>"]
13152#[must_use]
13153pub struct SemaphoreGetZirconHandleInfoFUCHSIA<'a> {
13154    pub s_type: StructureType,
13155    pub p_next: *const c_void,
13156    pub semaphore: Semaphore,
13157    pub handle_type: ExternalSemaphoreHandleTypeFlags,
13158    pub _marker: PhantomData<&'a ()>,
13159}
13160unsafe impl Send for SemaphoreGetZirconHandleInfoFUCHSIA<'_> {}
13161unsafe impl Sync for SemaphoreGetZirconHandleInfoFUCHSIA<'_> {}
13162impl ::core::default::Default for SemaphoreGetZirconHandleInfoFUCHSIA<'_> {
13163    #[inline]
13164    fn default() -> Self {
13165        Self {
13166            s_type: Self::STRUCTURE_TYPE,
13167            p_next: ::core::ptr::null(),
13168            semaphore: Semaphore::default(),
13169            handle_type: ExternalSemaphoreHandleTypeFlags::default(),
13170            _marker: PhantomData,
13171        }
13172    }
13173}
13174unsafe impl<'a> TaggedStructure for SemaphoreGetZirconHandleInfoFUCHSIA<'a> {
13175    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA;
13176}
13177impl<'a> SemaphoreGetZirconHandleInfoFUCHSIA<'a> {
13178    #[inline]
13179    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
13180        self.semaphore = semaphore;
13181        self
13182    }
13183    #[inline]
13184    pub fn handle_type(mut self, handle_type: ExternalSemaphoreHandleTypeFlags) -> Self {
13185        self.handle_type = handle_type;
13186        self
13187    }
13188}
13189#[repr(C)]
13190#[cfg_attr(feature = "debug", derive(Debug))]
13191#[derive(Copy, Clone)]
13192#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalFenceInfo.html>"]
13193#[must_use]
13194pub struct PhysicalDeviceExternalFenceInfo<'a> {
13195    pub s_type: StructureType,
13196    pub p_next: *const c_void,
13197    pub handle_type: ExternalFenceHandleTypeFlags,
13198    pub _marker: PhantomData<&'a ()>,
13199}
13200unsafe impl Send for PhysicalDeviceExternalFenceInfo<'_> {}
13201unsafe impl Sync for PhysicalDeviceExternalFenceInfo<'_> {}
13202impl ::core::default::Default for PhysicalDeviceExternalFenceInfo<'_> {
13203    #[inline]
13204    fn default() -> Self {
13205        Self {
13206            s_type: Self::STRUCTURE_TYPE,
13207            p_next: ::core::ptr::null(),
13208            handle_type: ExternalFenceHandleTypeFlags::default(),
13209            _marker: PhantomData,
13210        }
13211    }
13212}
13213unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalFenceInfo<'a> {
13214    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO;
13215}
13216impl<'a> PhysicalDeviceExternalFenceInfo<'a> {
13217    #[inline]
13218    pub fn handle_type(mut self, handle_type: ExternalFenceHandleTypeFlags) -> Self {
13219        self.handle_type = handle_type;
13220        self
13221    }
13222}
13223#[repr(C)]
13224#[cfg_attr(feature = "debug", derive(Debug))]
13225#[derive(Copy, Clone)]
13226#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalFenceProperties.html>"]
13227#[must_use]
13228pub struct ExternalFenceProperties<'a> {
13229    pub s_type: StructureType,
13230    pub p_next: *mut c_void,
13231    pub export_from_imported_handle_types: ExternalFenceHandleTypeFlags,
13232    pub compatible_handle_types: ExternalFenceHandleTypeFlags,
13233    pub external_fence_features: ExternalFenceFeatureFlags,
13234    pub _marker: PhantomData<&'a ()>,
13235}
13236unsafe impl Send for ExternalFenceProperties<'_> {}
13237unsafe impl Sync for ExternalFenceProperties<'_> {}
13238impl ::core::default::Default for ExternalFenceProperties<'_> {
13239    #[inline]
13240    fn default() -> Self {
13241        Self {
13242            s_type: Self::STRUCTURE_TYPE,
13243            p_next: ::core::ptr::null_mut(),
13244            export_from_imported_handle_types: ExternalFenceHandleTypeFlags::default(),
13245            compatible_handle_types: ExternalFenceHandleTypeFlags::default(),
13246            external_fence_features: ExternalFenceFeatureFlags::default(),
13247            _marker: PhantomData,
13248        }
13249    }
13250}
13251unsafe impl<'a> TaggedStructure for ExternalFenceProperties<'a> {
13252    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_FENCE_PROPERTIES;
13253}
13254impl<'a> ExternalFenceProperties<'a> {
13255    #[inline]
13256    pub fn export_from_imported_handle_types(
13257        mut self,
13258        export_from_imported_handle_types: ExternalFenceHandleTypeFlags,
13259    ) -> Self {
13260        self.export_from_imported_handle_types = export_from_imported_handle_types;
13261        self
13262    }
13263    #[inline]
13264    pub fn compatible_handle_types(
13265        mut self,
13266        compatible_handle_types: ExternalFenceHandleTypeFlags,
13267    ) -> Self {
13268        self.compatible_handle_types = compatible_handle_types;
13269        self
13270    }
13271    #[inline]
13272    pub fn external_fence_features(
13273        mut self,
13274        external_fence_features: ExternalFenceFeatureFlags,
13275    ) -> Self {
13276        self.external_fence_features = external_fence_features;
13277        self
13278    }
13279}
13280#[repr(C)]
13281#[cfg_attr(feature = "debug", derive(Debug))]
13282#[derive(Copy, Clone)]
13283#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportFenceCreateInfo.html>"]
13284#[must_use]
13285pub struct ExportFenceCreateInfo<'a> {
13286    pub s_type: StructureType,
13287    pub p_next: *const c_void,
13288    pub handle_types: ExternalFenceHandleTypeFlags,
13289    pub _marker: PhantomData<&'a ()>,
13290}
13291unsafe impl Send for ExportFenceCreateInfo<'_> {}
13292unsafe impl Sync for ExportFenceCreateInfo<'_> {}
13293impl ::core::default::Default for ExportFenceCreateInfo<'_> {
13294    #[inline]
13295    fn default() -> Self {
13296        Self {
13297            s_type: Self::STRUCTURE_TYPE,
13298            p_next: ::core::ptr::null(),
13299            handle_types: ExternalFenceHandleTypeFlags::default(),
13300            _marker: PhantomData,
13301        }
13302    }
13303}
13304unsafe impl<'a> TaggedStructure for ExportFenceCreateInfo<'a> {
13305    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_FENCE_CREATE_INFO;
13306}
13307unsafe impl ExtendsFenceCreateInfo for ExportFenceCreateInfo<'_> {}
13308impl<'a> ExportFenceCreateInfo<'a> {
13309    #[inline]
13310    pub fn handle_types(mut self, handle_types: ExternalFenceHandleTypeFlags) -> Self {
13311        self.handle_types = handle_types;
13312        self
13313    }
13314}
13315#[repr(C)]
13316#[cfg_attr(feature = "debug", derive(Debug))]
13317#[derive(Copy, Clone)]
13318#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportFenceWin32HandleInfoKHR.html>"]
13319#[must_use]
13320pub struct ImportFenceWin32HandleInfoKHR<'a> {
13321    pub s_type: StructureType,
13322    pub p_next: *const c_void,
13323    pub fence: Fence,
13324    pub flags: FenceImportFlags,
13325    pub handle_type: ExternalFenceHandleTypeFlags,
13326    pub handle: HANDLE,
13327    pub name: LPCWSTR,
13328    pub _marker: PhantomData<&'a ()>,
13329}
13330unsafe impl Send for ImportFenceWin32HandleInfoKHR<'_> {}
13331unsafe impl Sync for ImportFenceWin32HandleInfoKHR<'_> {}
13332impl ::core::default::Default for ImportFenceWin32HandleInfoKHR<'_> {
13333    #[inline]
13334    fn default() -> Self {
13335        Self {
13336            s_type: Self::STRUCTURE_TYPE,
13337            p_next: ::core::ptr::null(),
13338            fence: Fence::default(),
13339            flags: FenceImportFlags::default(),
13340            handle_type: ExternalFenceHandleTypeFlags::default(),
13341            handle: unsafe { ::core::mem::zeroed() },
13342            name: unsafe { ::core::mem::zeroed() },
13343            _marker: PhantomData,
13344        }
13345    }
13346}
13347unsafe impl<'a> TaggedStructure for ImportFenceWin32HandleInfoKHR<'a> {
13348    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_FENCE_WIN32_HANDLE_INFO_KHR;
13349}
13350impl<'a> ImportFenceWin32HandleInfoKHR<'a> {
13351    #[inline]
13352    pub fn fence(mut self, fence: Fence) -> Self {
13353        self.fence = fence;
13354        self
13355    }
13356    #[inline]
13357    pub fn flags(mut self, flags: FenceImportFlags) -> Self {
13358        self.flags = flags;
13359        self
13360    }
13361    #[inline]
13362    pub fn handle_type(mut self, handle_type: ExternalFenceHandleTypeFlags) -> Self {
13363        self.handle_type = handle_type;
13364        self
13365    }
13366    #[inline]
13367    pub fn handle(mut self, handle: HANDLE) -> Self {
13368        self.handle = handle;
13369        self
13370    }
13371    #[inline]
13372    pub fn name(mut self, name: LPCWSTR) -> Self {
13373        self.name = name;
13374        self
13375    }
13376}
13377#[repr(C)]
13378#[cfg_attr(feature = "debug", derive(Debug))]
13379#[derive(Copy, Clone)]
13380#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportFenceWin32HandleInfoKHR.html>"]
13381#[must_use]
13382pub struct ExportFenceWin32HandleInfoKHR<'a> {
13383    pub s_type: StructureType,
13384    pub p_next: *const c_void,
13385    pub p_attributes: *const SECURITY_ATTRIBUTES,
13386    pub dw_access: DWORD,
13387    pub name: LPCWSTR,
13388    pub _marker: PhantomData<&'a ()>,
13389}
13390unsafe impl Send for ExportFenceWin32HandleInfoKHR<'_> {}
13391unsafe impl Sync for ExportFenceWin32HandleInfoKHR<'_> {}
13392impl ::core::default::Default for ExportFenceWin32HandleInfoKHR<'_> {
13393    #[inline]
13394    fn default() -> Self {
13395        Self {
13396            s_type: Self::STRUCTURE_TYPE,
13397            p_next: ::core::ptr::null(),
13398            p_attributes: ::core::ptr::null(),
13399            dw_access: DWORD::default(),
13400            name: unsafe { ::core::mem::zeroed() },
13401            _marker: PhantomData,
13402        }
13403    }
13404}
13405unsafe impl<'a> TaggedStructure for ExportFenceWin32HandleInfoKHR<'a> {
13406    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_FENCE_WIN32_HANDLE_INFO_KHR;
13407}
13408unsafe impl ExtendsFenceCreateInfo for ExportFenceWin32HandleInfoKHR<'_> {}
13409impl<'a> ExportFenceWin32HandleInfoKHR<'a> {
13410    #[inline]
13411    pub fn attributes(mut self, attributes: &'a SECURITY_ATTRIBUTES) -> Self {
13412        self.p_attributes = attributes;
13413        self
13414    }
13415    #[inline]
13416    pub fn dw_access(mut self, dw_access: DWORD) -> Self {
13417        self.dw_access = dw_access;
13418        self
13419    }
13420    #[inline]
13421    pub fn name(mut self, name: LPCWSTR) -> Self {
13422        self.name = name;
13423        self
13424    }
13425}
13426#[repr(C)]
13427#[cfg_attr(feature = "debug", derive(Debug))]
13428#[derive(Copy, Clone)]
13429#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFenceGetWin32HandleInfoKHR.html>"]
13430#[must_use]
13431pub struct FenceGetWin32HandleInfoKHR<'a> {
13432    pub s_type: StructureType,
13433    pub p_next: *const c_void,
13434    pub fence: Fence,
13435    pub handle_type: ExternalFenceHandleTypeFlags,
13436    pub _marker: PhantomData<&'a ()>,
13437}
13438unsafe impl Send for FenceGetWin32HandleInfoKHR<'_> {}
13439unsafe impl Sync for FenceGetWin32HandleInfoKHR<'_> {}
13440impl ::core::default::Default for FenceGetWin32HandleInfoKHR<'_> {
13441    #[inline]
13442    fn default() -> Self {
13443        Self {
13444            s_type: Self::STRUCTURE_TYPE,
13445            p_next: ::core::ptr::null(),
13446            fence: Fence::default(),
13447            handle_type: ExternalFenceHandleTypeFlags::default(),
13448            _marker: PhantomData,
13449        }
13450    }
13451}
13452unsafe impl<'a> TaggedStructure for FenceGetWin32HandleInfoKHR<'a> {
13453    const STRUCTURE_TYPE: StructureType = StructureType::FENCE_GET_WIN32_HANDLE_INFO_KHR;
13454}
13455impl<'a> FenceGetWin32HandleInfoKHR<'a> {
13456    #[inline]
13457    pub fn fence(mut self, fence: Fence) -> Self {
13458        self.fence = fence;
13459        self
13460    }
13461    #[inline]
13462    pub fn handle_type(mut self, handle_type: ExternalFenceHandleTypeFlags) -> Self {
13463        self.handle_type = handle_type;
13464        self
13465    }
13466}
13467#[repr(C)]
13468#[cfg_attr(feature = "debug", derive(Debug))]
13469#[derive(Copy, Clone)]
13470#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportFenceFdInfoKHR.html>"]
13471#[must_use]
13472pub struct ImportFenceFdInfoKHR<'a> {
13473    pub s_type: StructureType,
13474    pub p_next: *const c_void,
13475    pub fence: Fence,
13476    pub flags: FenceImportFlags,
13477    pub handle_type: ExternalFenceHandleTypeFlags,
13478    pub fd: c_int,
13479    pub _marker: PhantomData<&'a ()>,
13480}
13481unsafe impl Send for ImportFenceFdInfoKHR<'_> {}
13482unsafe impl Sync for ImportFenceFdInfoKHR<'_> {}
13483impl ::core::default::Default for ImportFenceFdInfoKHR<'_> {
13484    #[inline]
13485    fn default() -> Self {
13486        Self {
13487            s_type: Self::STRUCTURE_TYPE,
13488            p_next: ::core::ptr::null(),
13489            fence: Fence::default(),
13490            flags: FenceImportFlags::default(),
13491            handle_type: ExternalFenceHandleTypeFlags::default(),
13492            fd: c_int::default(),
13493            _marker: PhantomData,
13494        }
13495    }
13496}
13497unsafe impl<'a> TaggedStructure for ImportFenceFdInfoKHR<'a> {
13498    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_FENCE_FD_INFO_KHR;
13499}
13500impl<'a> ImportFenceFdInfoKHR<'a> {
13501    #[inline]
13502    pub fn fence(mut self, fence: Fence) -> Self {
13503        self.fence = fence;
13504        self
13505    }
13506    #[inline]
13507    pub fn flags(mut self, flags: FenceImportFlags) -> Self {
13508        self.flags = flags;
13509        self
13510    }
13511    #[inline]
13512    pub fn handle_type(mut self, handle_type: ExternalFenceHandleTypeFlags) -> Self {
13513        self.handle_type = handle_type;
13514        self
13515    }
13516    #[inline]
13517    pub fn fd(mut self, fd: c_int) -> Self {
13518        self.fd = fd;
13519        self
13520    }
13521}
13522#[repr(C)]
13523#[cfg_attr(feature = "debug", derive(Debug))]
13524#[derive(Copy, Clone)]
13525#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFenceGetFdInfoKHR.html>"]
13526#[must_use]
13527pub struct FenceGetFdInfoKHR<'a> {
13528    pub s_type: StructureType,
13529    pub p_next: *const c_void,
13530    pub fence: Fence,
13531    pub handle_type: ExternalFenceHandleTypeFlags,
13532    pub _marker: PhantomData<&'a ()>,
13533}
13534unsafe impl Send for FenceGetFdInfoKHR<'_> {}
13535unsafe impl Sync for FenceGetFdInfoKHR<'_> {}
13536impl ::core::default::Default for FenceGetFdInfoKHR<'_> {
13537    #[inline]
13538    fn default() -> Self {
13539        Self {
13540            s_type: Self::STRUCTURE_TYPE,
13541            p_next: ::core::ptr::null(),
13542            fence: Fence::default(),
13543            handle_type: ExternalFenceHandleTypeFlags::default(),
13544            _marker: PhantomData,
13545        }
13546    }
13547}
13548unsafe impl<'a> TaggedStructure for FenceGetFdInfoKHR<'a> {
13549    const STRUCTURE_TYPE: StructureType = StructureType::FENCE_GET_FD_INFO_KHR;
13550}
13551impl<'a> FenceGetFdInfoKHR<'a> {
13552    #[inline]
13553    pub fn fence(mut self, fence: Fence) -> Self {
13554        self.fence = fence;
13555        self
13556    }
13557    #[inline]
13558    pub fn handle_type(mut self, handle_type: ExternalFenceHandleTypeFlags) -> Self {
13559        self.handle_type = handle_type;
13560        self
13561    }
13562}
13563#[repr(C)]
13564#[cfg_attr(feature = "debug", derive(Debug))]
13565#[derive(Copy, Clone)]
13566#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiviewFeatures.html>"]
13567#[must_use]
13568pub struct PhysicalDeviceMultiviewFeatures<'a> {
13569    pub s_type: StructureType,
13570    pub p_next: *mut c_void,
13571    pub multiview: Bool32,
13572    pub multiview_geometry_shader: Bool32,
13573    pub multiview_tessellation_shader: Bool32,
13574    pub _marker: PhantomData<&'a ()>,
13575}
13576unsafe impl Send for PhysicalDeviceMultiviewFeatures<'_> {}
13577unsafe impl Sync for PhysicalDeviceMultiviewFeatures<'_> {}
13578impl ::core::default::Default for PhysicalDeviceMultiviewFeatures<'_> {
13579    #[inline]
13580    fn default() -> Self {
13581        Self {
13582            s_type: Self::STRUCTURE_TYPE,
13583            p_next: ::core::ptr::null_mut(),
13584            multiview: Bool32::default(),
13585            multiview_geometry_shader: Bool32::default(),
13586            multiview_tessellation_shader: Bool32::default(),
13587            _marker: PhantomData,
13588        }
13589    }
13590}
13591unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiviewFeatures<'a> {
13592    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MULTIVIEW_FEATURES;
13593}
13594unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMultiviewFeatures<'_> {}
13595unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMultiviewFeatures<'_> {}
13596impl<'a> PhysicalDeviceMultiviewFeatures<'a> {
13597    #[inline]
13598    pub fn multiview(mut self, multiview: bool) -> Self {
13599        self.multiview = multiview.into();
13600        self
13601    }
13602    #[inline]
13603    pub fn multiview_geometry_shader(mut self, multiview_geometry_shader: bool) -> Self {
13604        self.multiview_geometry_shader = multiview_geometry_shader.into();
13605        self
13606    }
13607    #[inline]
13608    pub fn multiview_tessellation_shader(mut self, multiview_tessellation_shader: bool) -> Self {
13609        self.multiview_tessellation_shader = multiview_tessellation_shader.into();
13610        self
13611    }
13612}
13613#[repr(C)]
13614#[cfg_attr(feature = "debug", derive(Debug))]
13615#[derive(Copy, Clone)]
13616#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiviewProperties.html>"]
13617#[must_use]
13618pub struct PhysicalDeviceMultiviewProperties<'a> {
13619    pub s_type: StructureType,
13620    pub p_next: *mut c_void,
13621    pub max_multiview_view_count: u32,
13622    pub max_multiview_instance_index: u32,
13623    pub _marker: PhantomData<&'a ()>,
13624}
13625unsafe impl Send for PhysicalDeviceMultiviewProperties<'_> {}
13626unsafe impl Sync for PhysicalDeviceMultiviewProperties<'_> {}
13627impl ::core::default::Default for PhysicalDeviceMultiviewProperties<'_> {
13628    #[inline]
13629    fn default() -> Self {
13630        Self {
13631            s_type: Self::STRUCTURE_TYPE,
13632            p_next: ::core::ptr::null_mut(),
13633            max_multiview_view_count: u32::default(),
13634            max_multiview_instance_index: u32::default(),
13635            _marker: PhantomData,
13636        }
13637    }
13638}
13639unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiviewProperties<'a> {
13640    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES;
13641}
13642unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMultiviewProperties<'_> {}
13643impl<'a> PhysicalDeviceMultiviewProperties<'a> {
13644    #[inline]
13645    pub fn max_multiview_view_count(mut self, max_multiview_view_count: u32) -> Self {
13646        self.max_multiview_view_count = max_multiview_view_count;
13647        self
13648    }
13649    #[inline]
13650    pub fn max_multiview_instance_index(mut self, max_multiview_instance_index: u32) -> Self {
13651        self.max_multiview_instance_index = max_multiview_instance_index;
13652        self
13653    }
13654}
13655#[repr(C)]
13656#[cfg_attr(feature = "debug", derive(Debug))]
13657#[derive(Copy, Clone)]
13658#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassMultiviewCreateInfo.html>"]
13659#[must_use]
13660pub struct RenderPassMultiviewCreateInfo<'a> {
13661    pub s_type: StructureType,
13662    pub p_next: *const c_void,
13663    pub subpass_count: u32,
13664    pub p_view_masks: *const u32,
13665    pub dependency_count: u32,
13666    pub p_view_offsets: *const i32,
13667    pub correlation_mask_count: u32,
13668    pub p_correlation_masks: *const u32,
13669    pub _marker: PhantomData<&'a ()>,
13670}
13671unsafe impl Send for RenderPassMultiviewCreateInfo<'_> {}
13672unsafe impl Sync for RenderPassMultiviewCreateInfo<'_> {}
13673impl ::core::default::Default for RenderPassMultiviewCreateInfo<'_> {
13674    #[inline]
13675    fn default() -> Self {
13676        Self {
13677            s_type: Self::STRUCTURE_TYPE,
13678            p_next: ::core::ptr::null(),
13679            subpass_count: u32::default(),
13680            p_view_masks: ::core::ptr::null(),
13681            dependency_count: u32::default(),
13682            p_view_offsets: ::core::ptr::null(),
13683            correlation_mask_count: u32::default(),
13684            p_correlation_masks: ::core::ptr::null(),
13685            _marker: PhantomData,
13686        }
13687    }
13688}
13689unsafe impl<'a> TaggedStructure for RenderPassMultiviewCreateInfo<'a> {
13690    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_MULTIVIEW_CREATE_INFO;
13691}
13692unsafe impl ExtendsRenderPassCreateInfo for RenderPassMultiviewCreateInfo<'_> {}
13693impl<'a> RenderPassMultiviewCreateInfo<'a> {
13694    #[inline]
13695    pub fn view_masks(mut self, view_masks: &'a [u32]) -> Self {
13696        self.subpass_count = view_masks.len() as _;
13697        self.p_view_masks = view_masks.as_ptr();
13698        self
13699    }
13700    #[inline]
13701    pub fn view_offsets(mut self, view_offsets: &'a [i32]) -> Self {
13702        self.dependency_count = view_offsets.len() as _;
13703        self.p_view_offsets = view_offsets.as_ptr();
13704        self
13705    }
13706    #[inline]
13707    pub fn correlation_masks(mut self, correlation_masks: &'a [u32]) -> Self {
13708        self.correlation_mask_count = correlation_masks.len() as _;
13709        self.p_correlation_masks = correlation_masks.as_ptr();
13710        self
13711    }
13712}
13713#[repr(C)]
13714#[cfg_attr(feature = "debug", derive(Debug))]
13715#[derive(Copy, Clone)]
13716#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceCapabilities2EXT.html>"]
13717#[must_use]
13718pub struct SurfaceCapabilities2EXT<'a> {
13719    pub s_type: StructureType,
13720    pub p_next: *mut c_void,
13721    pub min_image_count: u32,
13722    pub max_image_count: u32,
13723    pub current_extent: Extent2D,
13724    pub min_image_extent: Extent2D,
13725    pub max_image_extent: Extent2D,
13726    pub max_image_array_layers: u32,
13727    pub supported_transforms: SurfaceTransformFlagsKHR,
13728    pub current_transform: SurfaceTransformFlagsKHR,
13729    pub supported_composite_alpha: CompositeAlphaFlagsKHR,
13730    pub supported_usage_flags: ImageUsageFlags,
13731    pub supported_surface_counters: SurfaceCounterFlagsEXT,
13732    pub _marker: PhantomData<&'a ()>,
13733}
13734unsafe impl Send for SurfaceCapabilities2EXT<'_> {}
13735unsafe impl Sync for SurfaceCapabilities2EXT<'_> {}
13736impl ::core::default::Default for SurfaceCapabilities2EXT<'_> {
13737    #[inline]
13738    fn default() -> Self {
13739        Self {
13740            s_type: Self::STRUCTURE_TYPE,
13741            p_next: ::core::ptr::null_mut(),
13742            min_image_count: u32::default(),
13743            max_image_count: u32::default(),
13744            current_extent: Extent2D::default(),
13745            min_image_extent: Extent2D::default(),
13746            max_image_extent: Extent2D::default(),
13747            max_image_array_layers: u32::default(),
13748            supported_transforms: SurfaceTransformFlagsKHR::default(),
13749            current_transform: SurfaceTransformFlagsKHR::default(),
13750            supported_composite_alpha: CompositeAlphaFlagsKHR::default(),
13751            supported_usage_flags: ImageUsageFlags::default(),
13752            supported_surface_counters: SurfaceCounterFlagsEXT::default(),
13753            _marker: PhantomData,
13754        }
13755    }
13756}
13757unsafe impl<'a> TaggedStructure for SurfaceCapabilities2EXT<'a> {
13758    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_CAPABILITIES_2_EXT;
13759}
13760impl<'a> SurfaceCapabilities2EXT<'a> {
13761    #[inline]
13762    pub fn min_image_count(mut self, min_image_count: u32) -> Self {
13763        self.min_image_count = min_image_count;
13764        self
13765    }
13766    #[inline]
13767    pub fn max_image_count(mut self, max_image_count: u32) -> Self {
13768        self.max_image_count = max_image_count;
13769        self
13770    }
13771    #[inline]
13772    pub fn current_extent(mut self, current_extent: Extent2D) -> Self {
13773        self.current_extent = current_extent;
13774        self
13775    }
13776    #[inline]
13777    pub fn min_image_extent(mut self, min_image_extent: Extent2D) -> Self {
13778        self.min_image_extent = min_image_extent;
13779        self
13780    }
13781    #[inline]
13782    pub fn max_image_extent(mut self, max_image_extent: Extent2D) -> Self {
13783        self.max_image_extent = max_image_extent;
13784        self
13785    }
13786    #[inline]
13787    pub fn max_image_array_layers(mut self, max_image_array_layers: u32) -> Self {
13788        self.max_image_array_layers = max_image_array_layers;
13789        self
13790    }
13791    #[inline]
13792    pub fn supported_transforms(mut self, supported_transforms: SurfaceTransformFlagsKHR) -> Self {
13793        self.supported_transforms = supported_transforms;
13794        self
13795    }
13796    #[inline]
13797    pub fn current_transform(mut self, current_transform: SurfaceTransformFlagsKHR) -> Self {
13798        self.current_transform = current_transform;
13799        self
13800    }
13801    #[inline]
13802    pub fn supported_composite_alpha(
13803        mut self,
13804        supported_composite_alpha: CompositeAlphaFlagsKHR,
13805    ) -> Self {
13806        self.supported_composite_alpha = supported_composite_alpha;
13807        self
13808    }
13809    #[inline]
13810    pub fn supported_usage_flags(mut self, supported_usage_flags: ImageUsageFlags) -> Self {
13811        self.supported_usage_flags = supported_usage_flags;
13812        self
13813    }
13814    #[inline]
13815    pub fn supported_surface_counters(
13816        mut self,
13817        supported_surface_counters: SurfaceCounterFlagsEXT,
13818    ) -> Self {
13819        self.supported_surface_counters = supported_surface_counters;
13820        self
13821    }
13822}
13823#[repr(C)]
13824#[cfg_attr(feature = "debug", derive(Debug))]
13825#[derive(Copy, Clone)]
13826#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPowerInfoEXT.html>"]
13827#[must_use]
13828pub struct DisplayPowerInfoEXT<'a> {
13829    pub s_type: StructureType,
13830    pub p_next: *const c_void,
13831    pub power_state: DisplayPowerStateEXT,
13832    pub _marker: PhantomData<&'a ()>,
13833}
13834unsafe impl Send for DisplayPowerInfoEXT<'_> {}
13835unsafe impl Sync for DisplayPowerInfoEXT<'_> {}
13836impl ::core::default::Default for DisplayPowerInfoEXT<'_> {
13837    #[inline]
13838    fn default() -> Self {
13839        Self {
13840            s_type: Self::STRUCTURE_TYPE,
13841            p_next: ::core::ptr::null(),
13842            power_state: DisplayPowerStateEXT::default(),
13843            _marker: PhantomData,
13844        }
13845    }
13846}
13847unsafe impl<'a> TaggedStructure for DisplayPowerInfoEXT<'a> {
13848    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_POWER_INFO_EXT;
13849}
13850impl<'a> DisplayPowerInfoEXT<'a> {
13851    #[inline]
13852    pub fn power_state(mut self, power_state: DisplayPowerStateEXT) -> Self {
13853        self.power_state = power_state;
13854        self
13855    }
13856}
13857#[repr(C)]
13858#[cfg_attr(feature = "debug", derive(Debug))]
13859#[derive(Copy, Clone)]
13860#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceEventInfoEXT.html>"]
13861#[must_use]
13862pub struct DeviceEventInfoEXT<'a> {
13863    pub s_type: StructureType,
13864    pub p_next: *const c_void,
13865    pub device_event: DeviceEventTypeEXT,
13866    pub _marker: PhantomData<&'a ()>,
13867}
13868unsafe impl Send for DeviceEventInfoEXT<'_> {}
13869unsafe impl Sync for DeviceEventInfoEXT<'_> {}
13870impl ::core::default::Default for DeviceEventInfoEXT<'_> {
13871    #[inline]
13872    fn default() -> Self {
13873        Self {
13874            s_type: Self::STRUCTURE_TYPE,
13875            p_next: ::core::ptr::null(),
13876            device_event: DeviceEventTypeEXT::default(),
13877            _marker: PhantomData,
13878        }
13879    }
13880}
13881unsafe impl<'a> TaggedStructure for DeviceEventInfoEXT<'a> {
13882    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_EVENT_INFO_EXT;
13883}
13884impl<'a> DeviceEventInfoEXT<'a> {
13885    #[inline]
13886    pub fn device_event(mut self, device_event: DeviceEventTypeEXT) -> Self {
13887        self.device_event = device_event;
13888        self
13889    }
13890}
13891#[repr(C)]
13892#[cfg_attr(feature = "debug", derive(Debug))]
13893#[derive(Copy, Clone)]
13894#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayEventInfoEXT.html>"]
13895#[must_use]
13896pub struct DisplayEventInfoEXT<'a> {
13897    pub s_type: StructureType,
13898    pub p_next: *const c_void,
13899    pub display_event: DisplayEventTypeEXT,
13900    pub _marker: PhantomData<&'a ()>,
13901}
13902unsafe impl Send for DisplayEventInfoEXT<'_> {}
13903unsafe impl Sync for DisplayEventInfoEXT<'_> {}
13904impl ::core::default::Default for DisplayEventInfoEXT<'_> {
13905    #[inline]
13906    fn default() -> Self {
13907        Self {
13908            s_type: Self::STRUCTURE_TYPE,
13909            p_next: ::core::ptr::null(),
13910            display_event: DisplayEventTypeEXT::default(),
13911            _marker: PhantomData,
13912        }
13913    }
13914}
13915unsafe impl<'a> TaggedStructure for DisplayEventInfoEXT<'a> {
13916    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_EVENT_INFO_EXT;
13917}
13918impl<'a> DisplayEventInfoEXT<'a> {
13919    #[inline]
13920    pub fn display_event(mut self, display_event: DisplayEventTypeEXT) -> Self {
13921        self.display_event = display_event;
13922        self
13923    }
13924}
13925#[repr(C)]
13926#[cfg_attr(feature = "debug", derive(Debug))]
13927#[derive(Copy, Clone)]
13928#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainCounterCreateInfoEXT.html>"]
13929#[must_use]
13930pub struct SwapchainCounterCreateInfoEXT<'a> {
13931    pub s_type: StructureType,
13932    pub p_next: *const c_void,
13933    pub surface_counters: SurfaceCounterFlagsEXT,
13934    pub _marker: PhantomData<&'a ()>,
13935}
13936unsafe impl Send for SwapchainCounterCreateInfoEXT<'_> {}
13937unsafe impl Sync for SwapchainCounterCreateInfoEXT<'_> {}
13938impl ::core::default::Default for SwapchainCounterCreateInfoEXT<'_> {
13939    #[inline]
13940    fn default() -> Self {
13941        Self {
13942            s_type: Self::STRUCTURE_TYPE,
13943            p_next: ::core::ptr::null(),
13944            surface_counters: SurfaceCounterFlagsEXT::default(),
13945            _marker: PhantomData,
13946        }
13947    }
13948}
13949unsafe impl<'a> TaggedStructure for SwapchainCounterCreateInfoEXT<'a> {
13950    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_COUNTER_CREATE_INFO_EXT;
13951}
13952unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainCounterCreateInfoEXT<'_> {}
13953impl<'a> SwapchainCounterCreateInfoEXT<'a> {
13954    #[inline]
13955    pub fn surface_counters(mut self, surface_counters: SurfaceCounterFlagsEXT) -> Self {
13956        self.surface_counters = surface_counters;
13957        self
13958    }
13959}
13960#[repr(C)]
13961#[derive(Copy, Clone)]
13962#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceGroupProperties.html>"]
13963#[must_use]
13964pub struct PhysicalDeviceGroupProperties<'a> {
13965    pub s_type: StructureType,
13966    pub p_next: *mut c_void,
13967    pub physical_device_count: u32,
13968    pub physical_devices: [PhysicalDevice; MAX_DEVICE_GROUP_SIZE],
13969    pub subset_allocation: Bool32,
13970    pub _marker: PhantomData<&'a ()>,
13971}
13972unsafe impl Send for PhysicalDeviceGroupProperties<'_> {}
13973unsafe impl Sync for PhysicalDeviceGroupProperties<'_> {}
13974#[cfg(feature = "debug")]
13975impl fmt::Debug for PhysicalDeviceGroupProperties<'_> {
13976    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
13977        fmt.debug_struct("PhysicalDeviceGroupProperties")
13978            .field("s_type", &self.s_type)
13979            .field("p_next", &self.p_next)
13980            .field("physical_device_count", &self.physical_device_count)
13981            .field("physical_devices", &self.physical_devices_as_slice())
13982            .field("subset_allocation", &self.subset_allocation)
13983            .finish()
13984    }
13985}
13986impl ::core::default::Default for PhysicalDeviceGroupProperties<'_> {
13987    #[inline]
13988    fn default() -> Self {
13989        Self {
13990            s_type: Self::STRUCTURE_TYPE,
13991            p_next: ::core::ptr::null_mut(),
13992            physical_device_count: u32::default(),
13993            physical_devices: unsafe { ::core::mem::zeroed() },
13994            subset_allocation: Bool32::default(),
13995            _marker: PhantomData,
13996        }
13997    }
13998}
13999unsafe impl<'a> TaggedStructure for PhysicalDeviceGroupProperties<'a> {
14000    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_GROUP_PROPERTIES;
14001}
14002impl<'a> PhysicalDeviceGroupProperties<'a> {
14003    #[inline]
14004    pub fn physical_devices(mut self, physical_devices: &'_ [PhysicalDevice]) -> Self {
14005        self.physical_device_count = physical_devices.len() as _;
14006        self.physical_devices[..physical_devices.len()].copy_from_slice(physical_devices);
14007        self
14008    }
14009    #[inline]
14010    pub fn physical_devices_as_slice(&self) -> &[PhysicalDevice] {
14011        &self.physical_devices[..self.physical_device_count as _]
14012    }
14013    #[inline]
14014    pub fn subset_allocation(mut self, subset_allocation: bool) -> Self {
14015        self.subset_allocation = subset_allocation.into();
14016        self
14017    }
14018}
14019#[repr(C)]
14020#[cfg_attr(feature = "debug", derive(Debug))]
14021#[derive(Copy, Clone)]
14022#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryAllocateFlagsInfo.html>"]
14023#[must_use]
14024pub struct MemoryAllocateFlagsInfo<'a> {
14025    pub s_type: StructureType,
14026    pub p_next: *const c_void,
14027    pub flags: MemoryAllocateFlags,
14028    pub device_mask: u32,
14029    pub _marker: PhantomData<&'a ()>,
14030}
14031unsafe impl Send for MemoryAllocateFlagsInfo<'_> {}
14032unsafe impl Sync for MemoryAllocateFlagsInfo<'_> {}
14033impl ::core::default::Default for MemoryAllocateFlagsInfo<'_> {
14034    #[inline]
14035    fn default() -> Self {
14036        Self {
14037            s_type: Self::STRUCTURE_TYPE,
14038            p_next: ::core::ptr::null(),
14039            flags: MemoryAllocateFlags::default(),
14040            device_mask: u32::default(),
14041            _marker: PhantomData,
14042        }
14043    }
14044}
14045unsafe impl<'a> TaggedStructure for MemoryAllocateFlagsInfo<'a> {
14046    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_ALLOCATE_FLAGS_INFO;
14047}
14048unsafe impl ExtendsMemoryAllocateInfo for MemoryAllocateFlagsInfo<'_> {}
14049impl<'a> MemoryAllocateFlagsInfo<'a> {
14050    #[inline]
14051    pub fn flags(mut self, flags: MemoryAllocateFlags) -> Self {
14052        self.flags = flags;
14053        self
14054    }
14055    #[inline]
14056    pub fn device_mask(mut self, device_mask: u32) -> Self {
14057        self.device_mask = device_mask;
14058        self
14059    }
14060}
14061#[repr(C)]
14062#[cfg_attr(feature = "debug", derive(Debug))]
14063#[derive(Copy, Clone)]
14064#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindBufferMemoryInfo.html>"]
14065#[must_use]
14066pub struct BindBufferMemoryInfo<'a> {
14067    pub s_type: StructureType,
14068    pub p_next: *const c_void,
14069    pub buffer: Buffer,
14070    pub memory: DeviceMemory,
14071    pub memory_offset: DeviceSize,
14072    pub _marker: PhantomData<&'a ()>,
14073}
14074unsafe impl Send for BindBufferMemoryInfo<'_> {}
14075unsafe impl Sync for BindBufferMemoryInfo<'_> {}
14076impl ::core::default::Default for BindBufferMemoryInfo<'_> {
14077    #[inline]
14078    fn default() -> Self {
14079        Self {
14080            s_type: Self::STRUCTURE_TYPE,
14081            p_next: ::core::ptr::null(),
14082            buffer: Buffer::default(),
14083            memory: DeviceMemory::default(),
14084            memory_offset: DeviceSize::default(),
14085            _marker: PhantomData,
14086        }
14087    }
14088}
14089unsafe impl<'a> TaggedStructure for BindBufferMemoryInfo<'a> {
14090    const STRUCTURE_TYPE: StructureType = StructureType::BIND_BUFFER_MEMORY_INFO;
14091}
14092pub unsafe trait ExtendsBindBufferMemoryInfo {}
14093impl<'a> BindBufferMemoryInfo<'a> {
14094    #[inline]
14095    pub fn buffer(mut self, buffer: Buffer) -> Self {
14096        self.buffer = buffer;
14097        self
14098    }
14099    #[inline]
14100    pub fn memory(mut self, memory: DeviceMemory) -> Self {
14101        self.memory = memory;
14102        self
14103    }
14104    #[inline]
14105    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
14106        self.memory_offset = memory_offset;
14107        self
14108    }
14109    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
14110    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
14111    #[doc = r" valid extension structs can be pushed into the chain."]
14112    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
14113    #[doc = r" chain will look like `A -> D -> B -> C`."]
14114    pub fn push_next<T: ExtendsBindBufferMemoryInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
14115        unsafe {
14116            let next_ptr = <*const T>::cast(next);
14117            let last_next = ptr_chain_iter(next).last().unwrap();
14118            (*last_next).p_next = self.p_next as _;
14119            self.p_next = next_ptr;
14120        }
14121        self
14122    }
14123}
14124#[repr(C)]
14125#[cfg_attr(feature = "debug", derive(Debug))]
14126#[derive(Copy, Clone)]
14127#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindBufferMemoryDeviceGroupInfo.html>"]
14128#[must_use]
14129pub struct BindBufferMemoryDeviceGroupInfo<'a> {
14130    pub s_type: StructureType,
14131    pub p_next: *const c_void,
14132    pub device_index_count: u32,
14133    pub p_device_indices: *const u32,
14134    pub _marker: PhantomData<&'a ()>,
14135}
14136unsafe impl Send for BindBufferMemoryDeviceGroupInfo<'_> {}
14137unsafe impl Sync for BindBufferMemoryDeviceGroupInfo<'_> {}
14138impl ::core::default::Default for BindBufferMemoryDeviceGroupInfo<'_> {
14139    #[inline]
14140    fn default() -> Self {
14141        Self {
14142            s_type: Self::STRUCTURE_TYPE,
14143            p_next: ::core::ptr::null(),
14144            device_index_count: u32::default(),
14145            p_device_indices: ::core::ptr::null(),
14146            _marker: PhantomData,
14147        }
14148    }
14149}
14150unsafe impl<'a> TaggedStructure for BindBufferMemoryDeviceGroupInfo<'a> {
14151    const STRUCTURE_TYPE: StructureType = StructureType::BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO;
14152}
14153unsafe impl ExtendsBindBufferMemoryInfo for BindBufferMemoryDeviceGroupInfo<'_> {}
14154impl<'a> BindBufferMemoryDeviceGroupInfo<'a> {
14155    #[inline]
14156    pub fn device_indices(mut self, device_indices: &'a [u32]) -> Self {
14157        self.device_index_count = device_indices.len() as _;
14158        self.p_device_indices = device_indices.as_ptr();
14159        self
14160    }
14161}
14162#[repr(C)]
14163#[cfg_attr(feature = "debug", derive(Debug))]
14164#[derive(Copy, Clone)]
14165#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindImageMemoryInfo.html>"]
14166#[must_use]
14167pub struct BindImageMemoryInfo<'a> {
14168    pub s_type: StructureType,
14169    pub p_next: *const c_void,
14170    pub image: Image,
14171    pub memory: DeviceMemory,
14172    pub memory_offset: DeviceSize,
14173    pub _marker: PhantomData<&'a ()>,
14174}
14175unsafe impl Send for BindImageMemoryInfo<'_> {}
14176unsafe impl Sync for BindImageMemoryInfo<'_> {}
14177impl ::core::default::Default for BindImageMemoryInfo<'_> {
14178    #[inline]
14179    fn default() -> Self {
14180        Self {
14181            s_type: Self::STRUCTURE_TYPE,
14182            p_next: ::core::ptr::null(),
14183            image: Image::default(),
14184            memory: DeviceMemory::default(),
14185            memory_offset: DeviceSize::default(),
14186            _marker: PhantomData,
14187        }
14188    }
14189}
14190unsafe impl<'a> TaggedStructure for BindImageMemoryInfo<'a> {
14191    const STRUCTURE_TYPE: StructureType = StructureType::BIND_IMAGE_MEMORY_INFO;
14192}
14193pub unsafe trait ExtendsBindImageMemoryInfo {}
14194impl<'a> BindImageMemoryInfo<'a> {
14195    #[inline]
14196    pub fn image(mut self, image: Image) -> Self {
14197        self.image = image;
14198        self
14199    }
14200    #[inline]
14201    pub fn memory(mut self, memory: DeviceMemory) -> Self {
14202        self.memory = memory;
14203        self
14204    }
14205    #[inline]
14206    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
14207        self.memory_offset = memory_offset;
14208        self
14209    }
14210    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
14211    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
14212    #[doc = r" valid extension structs can be pushed into the chain."]
14213    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
14214    #[doc = r" chain will look like `A -> D -> B -> C`."]
14215    pub fn push_next<T: ExtendsBindImageMemoryInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
14216        unsafe {
14217            let next_ptr = <*const T>::cast(next);
14218            let last_next = ptr_chain_iter(next).last().unwrap();
14219            (*last_next).p_next = self.p_next as _;
14220            self.p_next = next_ptr;
14221        }
14222        self
14223    }
14224}
14225#[repr(C)]
14226#[cfg_attr(feature = "debug", derive(Debug))]
14227#[derive(Copy, Clone)]
14228#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindImageMemoryDeviceGroupInfo.html>"]
14229#[must_use]
14230pub struct BindImageMemoryDeviceGroupInfo<'a> {
14231    pub s_type: StructureType,
14232    pub p_next: *const c_void,
14233    pub device_index_count: u32,
14234    pub p_device_indices: *const u32,
14235    pub split_instance_bind_region_count: u32,
14236    pub p_split_instance_bind_regions: *const Rect2D,
14237    pub _marker: PhantomData<&'a ()>,
14238}
14239unsafe impl Send for BindImageMemoryDeviceGroupInfo<'_> {}
14240unsafe impl Sync for BindImageMemoryDeviceGroupInfo<'_> {}
14241impl ::core::default::Default for BindImageMemoryDeviceGroupInfo<'_> {
14242    #[inline]
14243    fn default() -> Self {
14244        Self {
14245            s_type: Self::STRUCTURE_TYPE,
14246            p_next: ::core::ptr::null(),
14247            device_index_count: u32::default(),
14248            p_device_indices: ::core::ptr::null(),
14249            split_instance_bind_region_count: u32::default(),
14250            p_split_instance_bind_regions: ::core::ptr::null(),
14251            _marker: PhantomData,
14252        }
14253    }
14254}
14255unsafe impl<'a> TaggedStructure for BindImageMemoryDeviceGroupInfo<'a> {
14256    const STRUCTURE_TYPE: StructureType = StructureType::BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO;
14257}
14258unsafe impl ExtendsBindImageMemoryInfo for BindImageMemoryDeviceGroupInfo<'_> {}
14259impl<'a> BindImageMemoryDeviceGroupInfo<'a> {
14260    #[inline]
14261    pub fn device_indices(mut self, device_indices: &'a [u32]) -> Self {
14262        self.device_index_count = device_indices.len() as _;
14263        self.p_device_indices = device_indices.as_ptr();
14264        self
14265    }
14266    #[inline]
14267    pub fn split_instance_bind_regions(
14268        mut self,
14269        split_instance_bind_regions: &'a [Rect2D],
14270    ) -> Self {
14271        self.split_instance_bind_region_count = split_instance_bind_regions.len() as _;
14272        self.p_split_instance_bind_regions = split_instance_bind_regions.as_ptr();
14273        self
14274    }
14275}
14276#[repr(C)]
14277#[cfg_attr(feature = "debug", derive(Debug))]
14278#[derive(Copy, Clone)]
14279#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupRenderPassBeginInfo.html>"]
14280#[must_use]
14281pub struct DeviceGroupRenderPassBeginInfo<'a> {
14282    pub s_type: StructureType,
14283    pub p_next: *const c_void,
14284    pub device_mask: u32,
14285    pub device_render_area_count: u32,
14286    pub p_device_render_areas: *const Rect2D,
14287    pub _marker: PhantomData<&'a ()>,
14288}
14289unsafe impl Send for DeviceGroupRenderPassBeginInfo<'_> {}
14290unsafe impl Sync for DeviceGroupRenderPassBeginInfo<'_> {}
14291impl ::core::default::Default for DeviceGroupRenderPassBeginInfo<'_> {
14292    #[inline]
14293    fn default() -> Self {
14294        Self {
14295            s_type: Self::STRUCTURE_TYPE,
14296            p_next: ::core::ptr::null(),
14297            device_mask: u32::default(),
14298            device_render_area_count: u32::default(),
14299            p_device_render_areas: ::core::ptr::null(),
14300            _marker: PhantomData,
14301        }
14302    }
14303}
14304unsafe impl<'a> TaggedStructure for DeviceGroupRenderPassBeginInfo<'a> {
14305    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_RENDER_PASS_BEGIN_INFO;
14306}
14307unsafe impl ExtendsRenderPassBeginInfo for DeviceGroupRenderPassBeginInfo<'_> {}
14308unsafe impl ExtendsRenderingInfo for DeviceGroupRenderPassBeginInfo<'_> {}
14309impl<'a> DeviceGroupRenderPassBeginInfo<'a> {
14310    #[inline]
14311    pub fn device_mask(mut self, device_mask: u32) -> Self {
14312        self.device_mask = device_mask;
14313        self
14314    }
14315    #[inline]
14316    pub fn device_render_areas(mut self, device_render_areas: &'a [Rect2D]) -> Self {
14317        self.device_render_area_count = device_render_areas.len() as _;
14318        self.p_device_render_areas = device_render_areas.as_ptr();
14319        self
14320    }
14321}
14322#[repr(C)]
14323#[cfg_attr(feature = "debug", derive(Debug))]
14324#[derive(Copy, Clone)]
14325#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupCommandBufferBeginInfo.html>"]
14326#[must_use]
14327pub struct DeviceGroupCommandBufferBeginInfo<'a> {
14328    pub s_type: StructureType,
14329    pub p_next: *const c_void,
14330    pub device_mask: u32,
14331    pub _marker: PhantomData<&'a ()>,
14332}
14333unsafe impl Send for DeviceGroupCommandBufferBeginInfo<'_> {}
14334unsafe impl Sync for DeviceGroupCommandBufferBeginInfo<'_> {}
14335impl ::core::default::Default for DeviceGroupCommandBufferBeginInfo<'_> {
14336    #[inline]
14337    fn default() -> Self {
14338        Self {
14339            s_type: Self::STRUCTURE_TYPE,
14340            p_next: ::core::ptr::null(),
14341            device_mask: u32::default(),
14342            _marker: PhantomData,
14343        }
14344    }
14345}
14346unsafe impl<'a> TaggedStructure for DeviceGroupCommandBufferBeginInfo<'a> {
14347    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO;
14348}
14349unsafe impl ExtendsCommandBufferBeginInfo for DeviceGroupCommandBufferBeginInfo<'_> {}
14350impl<'a> DeviceGroupCommandBufferBeginInfo<'a> {
14351    #[inline]
14352    pub fn device_mask(mut self, device_mask: u32) -> Self {
14353        self.device_mask = device_mask;
14354        self
14355    }
14356}
14357#[repr(C)]
14358#[cfg_attr(feature = "debug", derive(Debug))]
14359#[derive(Copy, Clone)]
14360#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupSubmitInfo.html>"]
14361#[must_use]
14362pub struct DeviceGroupSubmitInfo<'a> {
14363    pub s_type: StructureType,
14364    pub p_next: *const c_void,
14365    pub wait_semaphore_count: u32,
14366    pub p_wait_semaphore_device_indices: *const u32,
14367    pub command_buffer_count: u32,
14368    pub p_command_buffer_device_masks: *const u32,
14369    pub signal_semaphore_count: u32,
14370    pub p_signal_semaphore_device_indices: *const u32,
14371    pub _marker: PhantomData<&'a ()>,
14372}
14373unsafe impl Send for DeviceGroupSubmitInfo<'_> {}
14374unsafe impl Sync for DeviceGroupSubmitInfo<'_> {}
14375impl ::core::default::Default for DeviceGroupSubmitInfo<'_> {
14376    #[inline]
14377    fn default() -> Self {
14378        Self {
14379            s_type: Self::STRUCTURE_TYPE,
14380            p_next: ::core::ptr::null(),
14381            wait_semaphore_count: u32::default(),
14382            p_wait_semaphore_device_indices: ::core::ptr::null(),
14383            command_buffer_count: u32::default(),
14384            p_command_buffer_device_masks: ::core::ptr::null(),
14385            signal_semaphore_count: u32::default(),
14386            p_signal_semaphore_device_indices: ::core::ptr::null(),
14387            _marker: PhantomData,
14388        }
14389    }
14390}
14391unsafe impl<'a> TaggedStructure for DeviceGroupSubmitInfo<'a> {
14392    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_SUBMIT_INFO;
14393}
14394unsafe impl ExtendsSubmitInfo for DeviceGroupSubmitInfo<'_> {}
14395impl<'a> DeviceGroupSubmitInfo<'a> {
14396    #[inline]
14397    pub fn wait_semaphore_device_indices(
14398        mut self,
14399        wait_semaphore_device_indices: &'a [u32],
14400    ) -> Self {
14401        self.wait_semaphore_count = wait_semaphore_device_indices.len() as _;
14402        self.p_wait_semaphore_device_indices = wait_semaphore_device_indices.as_ptr();
14403        self
14404    }
14405    #[inline]
14406    pub fn command_buffer_device_masks(mut self, command_buffer_device_masks: &'a [u32]) -> Self {
14407        self.command_buffer_count = command_buffer_device_masks.len() as _;
14408        self.p_command_buffer_device_masks = command_buffer_device_masks.as_ptr();
14409        self
14410    }
14411    #[inline]
14412    pub fn signal_semaphore_device_indices(
14413        mut self,
14414        signal_semaphore_device_indices: &'a [u32],
14415    ) -> Self {
14416        self.signal_semaphore_count = signal_semaphore_device_indices.len() as _;
14417        self.p_signal_semaphore_device_indices = signal_semaphore_device_indices.as_ptr();
14418        self
14419    }
14420}
14421#[repr(C)]
14422#[cfg_attr(feature = "debug", derive(Debug))]
14423#[derive(Copy, Clone)]
14424#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupBindSparseInfo.html>"]
14425#[must_use]
14426pub struct DeviceGroupBindSparseInfo<'a> {
14427    pub s_type: StructureType,
14428    pub p_next: *const c_void,
14429    pub resource_device_index: u32,
14430    pub memory_device_index: u32,
14431    pub _marker: PhantomData<&'a ()>,
14432}
14433unsafe impl Send for DeviceGroupBindSparseInfo<'_> {}
14434unsafe impl Sync for DeviceGroupBindSparseInfo<'_> {}
14435impl ::core::default::Default for DeviceGroupBindSparseInfo<'_> {
14436    #[inline]
14437    fn default() -> Self {
14438        Self {
14439            s_type: Self::STRUCTURE_TYPE,
14440            p_next: ::core::ptr::null(),
14441            resource_device_index: u32::default(),
14442            memory_device_index: u32::default(),
14443            _marker: PhantomData,
14444        }
14445    }
14446}
14447unsafe impl<'a> TaggedStructure for DeviceGroupBindSparseInfo<'a> {
14448    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_BIND_SPARSE_INFO;
14449}
14450unsafe impl ExtendsBindSparseInfo for DeviceGroupBindSparseInfo<'_> {}
14451impl<'a> DeviceGroupBindSparseInfo<'a> {
14452    #[inline]
14453    pub fn resource_device_index(mut self, resource_device_index: u32) -> Self {
14454        self.resource_device_index = resource_device_index;
14455        self
14456    }
14457    #[inline]
14458    pub fn memory_device_index(mut self, memory_device_index: u32) -> Self {
14459        self.memory_device_index = memory_device_index;
14460        self
14461    }
14462}
14463#[repr(C)]
14464#[cfg_attr(feature = "debug", derive(Debug))]
14465#[derive(Copy, Clone)]
14466#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupPresentCapabilitiesKHR.html>"]
14467#[must_use]
14468pub struct DeviceGroupPresentCapabilitiesKHR<'a> {
14469    pub s_type: StructureType,
14470    pub p_next: *mut c_void,
14471    pub present_mask: [u32; MAX_DEVICE_GROUP_SIZE],
14472    pub modes: DeviceGroupPresentModeFlagsKHR,
14473    pub _marker: PhantomData<&'a ()>,
14474}
14475unsafe impl Send for DeviceGroupPresentCapabilitiesKHR<'_> {}
14476unsafe impl Sync for DeviceGroupPresentCapabilitiesKHR<'_> {}
14477impl ::core::default::Default for DeviceGroupPresentCapabilitiesKHR<'_> {
14478    #[inline]
14479    fn default() -> Self {
14480        Self {
14481            s_type: Self::STRUCTURE_TYPE,
14482            p_next: ::core::ptr::null_mut(),
14483            present_mask: unsafe { ::core::mem::zeroed() },
14484            modes: DeviceGroupPresentModeFlagsKHR::default(),
14485            _marker: PhantomData,
14486        }
14487    }
14488}
14489unsafe impl<'a> TaggedStructure for DeviceGroupPresentCapabilitiesKHR<'a> {
14490    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_PRESENT_CAPABILITIES_KHR;
14491}
14492impl<'a> DeviceGroupPresentCapabilitiesKHR<'a> {
14493    #[inline]
14494    pub fn present_mask(mut self, present_mask: [u32; MAX_DEVICE_GROUP_SIZE]) -> Self {
14495        self.present_mask = present_mask;
14496        self
14497    }
14498    #[inline]
14499    pub fn modes(mut self, modes: DeviceGroupPresentModeFlagsKHR) -> Self {
14500        self.modes = modes;
14501        self
14502    }
14503}
14504#[repr(C)]
14505#[cfg_attr(feature = "debug", derive(Debug))]
14506#[derive(Copy, Clone)]
14507#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSwapchainCreateInfoKHR.html>"]
14508#[must_use]
14509pub struct ImageSwapchainCreateInfoKHR<'a> {
14510    pub s_type: StructureType,
14511    pub p_next: *const c_void,
14512    pub swapchain: SwapchainKHR,
14513    pub _marker: PhantomData<&'a ()>,
14514}
14515unsafe impl Send for ImageSwapchainCreateInfoKHR<'_> {}
14516unsafe impl Sync for ImageSwapchainCreateInfoKHR<'_> {}
14517impl ::core::default::Default for ImageSwapchainCreateInfoKHR<'_> {
14518    #[inline]
14519    fn default() -> Self {
14520        Self {
14521            s_type: Self::STRUCTURE_TYPE,
14522            p_next: ::core::ptr::null(),
14523            swapchain: SwapchainKHR::default(),
14524            _marker: PhantomData,
14525        }
14526    }
14527}
14528unsafe impl<'a> TaggedStructure for ImageSwapchainCreateInfoKHR<'a> {
14529    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_SWAPCHAIN_CREATE_INFO_KHR;
14530}
14531unsafe impl ExtendsImageCreateInfo for ImageSwapchainCreateInfoKHR<'_> {}
14532impl<'a> ImageSwapchainCreateInfoKHR<'a> {
14533    #[inline]
14534    pub fn swapchain(mut self, swapchain: SwapchainKHR) -> Self {
14535        self.swapchain = swapchain;
14536        self
14537    }
14538}
14539#[repr(C)]
14540#[cfg_attr(feature = "debug", derive(Debug))]
14541#[derive(Copy, Clone)]
14542#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindImageMemorySwapchainInfoKHR.html>"]
14543#[must_use]
14544pub struct BindImageMemorySwapchainInfoKHR<'a> {
14545    pub s_type: StructureType,
14546    pub p_next: *const c_void,
14547    pub swapchain: SwapchainKHR,
14548    pub image_index: u32,
14549    pub _marker: PhantomData<&'a ()>,
14550}
14551unsafe impl Send for BindImageMemorySwapchainInfoKHR<'_> {}
14552unsafe impl Sync for BindImageMemorySwapchainInfoKHR<'_> {}
14553impl ::core::default::Default for BindImageMemorySwapchainInfoKHR<'_> {
14554    #[inline]
14555    fn default() -> Self {
14556        Self {
14557            s_type: Self::STRUCTURE_TYPE,
14558            p_next: ::core::ptr::null(),
14559            swapchain: SwapchainKHR::default(),
14560            image_index: u32::default(),
14561            _marker: PhantomData,
14562        }
14563    }
14564}
14565unsafe impl<'a> TaggedStructure for BindImageMemorySwapchainInfoKHR<'a> {
14566    const STRUCTURE_TYPE: StructureType = StructureType::BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR;
14567}
14568unsafe impl ExtendsBindImageMemoryInfo for BindImageMemorySwapchainInfoKHR<'_> {}
14569impl<'a> BindImageMemorySwapchainInfoKHR<'a> {
14570    #[inline]
14571    pub fn swapchain(mut self, swapchain: SwapchainKHR) -> Self {
14572        self.swapchain = swapchain;
14573        self
14574    }
14575    #[inline]
14576    pub fn image_index(mut self, image_index: u32) -> Self {
14577        self.image_index = image_index;
14578        self
14579    }
14580}
14581#[repr(C)]
14582#[cfg_attr(feature = "debug", derive(Debug))]
14583#[derive(Copy, Clone)]
14584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAcquireNextImageInfoKHR.html>"]
14585#[must_use]
14586pub struct AcquireNextImageInfoKHR<'a> {
14587    pub s_type: StructureType,
14588    pub p_next: *const c_void,
14589    pub swapchain: SwapchainKHR,
14590    pub timeout: u64,
14591    pub semaphore: Semaphore,
14592    pub fence: Fence,
14593    pub device_mask: u32,
14594    pub _marker: PhantomData<&'a ()>,
14595}
14596unsafe impl Send for AcquireNextImageInfoKHR<'_> {}
14597unsafe impl Sync for AcquireNextImageInfoKHR<'_> {}
14598impl ::core::default::Default for AcquireNextImageInfoKHR<'_> {
14599    #[inline]
14600    fn default() -> Self {
14601        Self {
14602            s_type: Self::STRUCTURE_TYPE,
14603            p_next: ::core::ptr::null(),
14604            swapchain: SwapchainKHR::default(),
14605            timeout: u64::default(),
14606            semaphore: Semaphore::default(),
14607            fence: Fence::default(),
14608            device_mask: u32::default(),
14609            _marker: PhantomData,
14610        }
14611    }
14612}
14613unsafe impl<'a> TaggedStructure for AcquireNextImageInfoKHR<'a> {
14614    const STRUCTURE_TYPE: StructureType = StructureType::ACQUIRE_NEXT_IMAGE_INFO_KHR;
14615}
14616impl<'a> AcquireNextImageInfoKHR<'a> {
14617    #[inline]
14618    pub fn swapchain(mut self, swapchain: SwapchainKHR) -> Self {
14619        self.swapchain = swapchain;
14620        self
14621    }
14622    #[inline]
14623    pub fn timeout(mut self, timeout: u64) -> Self {
14624        self.timeout = timeout;
14625        self
14626    }
14627    #[inline]
14628    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
14629        self.semaphore = semaphore;
14630        self
14631    }
14632    #[inline]
14633    pub fn fence(mut self, fence: Fence) -> Self {
14634        self.fence = fence;
14635        self
14636    }
14637    #[inline]
14638    pub fn device_mask(mut self, device_mask: u32) -> Self {
14639        self.device_mask = device_mask;
14640        self
14641    }
14642}
14643#[repr(C)]
14644#[cfg_attr(feature = "debug", derive(Debug))]
14645#[derive(Copy, Clone)]
14646#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupPresentInfoKHR.html>"]
14647#[must_use]
14648pub struct DeviceGroupPresentInfoKHR<'a> {
14649    pub s_type: StructureType,
14650    pub p_next: *const c_void,
14651    pub swapchain_count: u32,
14652    pub p_device_masks: *const u32,
14653    pub mode: DeviceGroupPresentModeFlagsKHR,
14654    pub _marker: PhantomData<&'a ()>,
14655}
14656unsafe impl Send for DeviceGroupPresentInfoKHR<'_> {}
14657unsafe impl Sync for DeviceGroupPresentInfoKHR<'_> {}
14658impl ::core::default::Default for DeviceGroupPresentInfoKHR<'_> {
14659    #[inline]
14660    fn default() -> Self {
14661        Self {
14662            s_type: Self::STRUCTURE_TYPE,
14663            p_next: ::core::ptr::null(),
14664            swapchain_count: u32::default(),
14665            p_device_masks: ::core::ptr::null(),
14666            mode: DeviceGroupPresentModeFlagsKHR::default(),
14667            _marker: PhantomData,
14668        }
14669    }
14670}
14671unsafe impl<'a> TaggedStructure for DeviceGroupPresentInfoKHR<'a> {
14672    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_PRESENT_INFO_KHR;
14673}
14674unsafe impl ExtendsPresentInfoKHR for DeviceGroupPresentInfoKHR<'_> {}
14675impl<'a> DeviceGroupPresentInfoKHR<'a> {
14676    #[inline]
14677    pub fn device_masks(mut self, device_masks: &'a [u32]) -> Self {
14678        self.swapchain_count = device_masks.len() as _;
14679        self.p_device_masks = device_masks.as_ptr();
14680        self
14681    }
14682    #[inline]
14683    pub fn mode(mut self, mode: DeviceGroupPresentModeFlagsKHR) -> Self {
14684        self.mode = mode;
14685        self
14686    }
14687}
14688#[repr(C)]
14689#[cfg_attr(feature = "debug", derive(Debug))]
14690#[derive(Copy, Clone)]
14691#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupDeviceCreateInfo.html>"]
14692#[must_use]
14693pub struct DeviceGroupDeviceCreateInfo<'a> {
14694    pub s_type: StructureType,
14695    pub p_next: *const c_void,
14696    pub physical_device_count: u32,
14697    pub p_physical_devices: *const PhysicalDevice,
14698    pub _marker: PhantomData<&'a ()>,
14699}
14700unsafe impl Send for DeviceGroupDeviceCreateInfo<'_> {}
14701unsafe impl Sync for DeviceGroupDeviceCreateInfo<'_> {}
14702impl ::core::default::Default for DeviceGroupDeviceCreateInfo<'_> {
14703    #[inline]
14704    fn default() -> Self {
14705        Self {
14706            s_type: Self::STRUCTURE_TYPE,
14707            p_next: ::core::ptr::null(),
14708            physical_device_count: u32::default(),
14709            p_physical_devices: ::core::ptr::null(),
14710            _marker: PhantomData,
14711        }
14712    }
14713}
14714unsafe impl<'a> TaggedStructure for DeviceGroupDeviceCreateInfo<'a> {
14715    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_DEVICE_CREATE_INFO;
14716}
14717unsafe impl ExtendsDeviceCreateInfo for DeviceGroupDeviceCreateInfo<'_> {}
14718impl<'a> DeviceGroupDeviceCreateInfo<'a> {
14719    #[inline]
14720    pub fn physical_devices(mut self, physical_devices: &'a [PhysicalDevice]) -> Self {
14721        self.physical_device_count = physical_devices.len() as _;
14722        self.p_physical_devices = physical_devices.as_ptr();
14723        self
14724    }
14725}
14726#[repr(C)]
14727#[cfg_attr(feature = "debug", derive(Debug))]
14728#[derive(Copy, Clone)]
14729#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceGroupSwapchainCreateInfoKHR.html>"]
14730#[must_use]
14731pub struct DeviceGroupSwapchainCreateInfoKHR<'a> {
14732    pub s_type: StructureType,
14733    pub p_next: *const c_void,
14734    pub modes: DeviceGroupPresentModeFlagsKHR,
14735    pub _marker: PhantomData<&'a ()>,
14736}
14737unsafe impl Send for DeviceGroupSwapchainCreateInfoKHR<'_> {}
14738unsafe impl Sync for DeviceGroupSwapchainCreateInfoKHR<'_> {}
14739impl ::core::default::Default for DeviceGroupSwapchainCreateInfoKHR<'_> {
14740    #[inline]
14741    fn default() -> Self {
14742        Self {
14743            s_type: Self::STRUCTURE_TYPE,
14744            p_next: ::core::ptr::null(),
14745            modes: DeviceGroupPresentModeFlagsKHR::default(),
14746            _marker: PhantomData,
14747        }
14748    }
14749}
14750unsafe impl<'a> TaggedStructure for DeviceGroupSwapchainCreateInfoKHR<'a> {
14751    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR;
14752}
14753unsafe impl ExtendsSwapchainCreateInfoKHR for DeviceGroupSwapchainCreateInfoKHR<'_> {}
14754impl<'a> DeviceGroupSwapchainCreateInfoKHR<'a> {
14755    #[inline]
14756    pub fn modes(mut self, modes: DeviceGroupPresentModeFlagsKHR) -> Self {
14757        self.modes = modes;
14758        self
14759    }
14760}
14761#[repr(C)]
14762#[cfg_attr(feature = "debug", derive(Debug))]
14763#[derive(Copy, Clone, Default)]
14764#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorUpdateTemplateEntry.html>"]
14765#[must_use]
14766pub struct DescriptorUpdateTemplateEntry {
14767    pub dst_binding: u32,
14768    pub dst_array_element: u32,
14769    pub descriptor_count: u32,
14770    pub descriptor_type: DescriptorType,
14771    pub offset: usize,
14772    pub stride: usize,
14773}
14774impl DescriptorUpdateTemplateEntry {
14775    #[inline]
14776    pub fn dst_binding(mut self, dst_binding: u32) -> Self {
14777        self.dst_binding = dst_binding;
14778        self
14779    }
14780    #[inline]
14781    pub fn dst_array_element(mut self, dst_array_element: u32) -> Self {
14782        self.dst_array_element = dst_array_element;
14783        self
14784    }
14785    #[inline]
14786    pub fn descriptor_count(mut self, descriptor_count: u32) -> Self {
14787        self.descriptor_count = descriptor_count;
14788        self
14789    }
14790    #[inline]
14791    pub fn descriptor_type(mut self, descriptor_type: DescriptorType) -> Self {
14792        self.descriptor_type = descriptor_type;
14793        self
14794    }
14795    #[inline]
14796    pub fn offset(mut self, offset: usize) -> Self {
14797        self.offset = offset;
14798        self
14799    }
14800    #[inline]
14801    pub fn stride(mut self, stride: usize) -> Self {
14802        self.stride = stride;
14803        self
14804    }
14805}
14806#[repr(C)]
14807#[cfg_attr(feature = "debug", derive(Debug))]
14808#[derive(Copy, Clone)]
14809#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorUpdateTemplateCreateInfo.html>"]
14810#[must_use]
14811pub struct DescriptorUpdateTemplateCreateInfo<'a> {
14812    pub s_type: StructureType,
14813    pub p_next: *const c_void,
14814    pub flags: DescriptorUpdateTemplateCreateFlags,
14815    pub descriptor_update_entry_count: u32,
14816    pub p_descriptor_update_entries: *const DescriptorUpdateTemplateEntry,
14817    pub template_type: DescriptorUpdateTemplateType,
14818    pub descriptor_set_layout: DescriptorSetLayout,
14819    pub pipeline_bind_point: PipelineBindPoint,
14820    pub pipeline_layout: PipelineLayout,
14821    pub set: u32,
14822    pub _marker: PhantomData<&'a ()>,
14823}
14824unsafe impl Send for DescriptorUpdateTemplateCreateInfo<'_> {}
14825unsafe impl Sync for DescriptorUpdateTemplateCreateInfo<'_> {}
14826impl ::core::default::Default for DescriptorUpdateTemplateCreateInfo<'_> {
14827    #[inline]
14828    fn default() -> Self {
14829        Self {
14830            s_type: Self::STRUCTURE_TYPE,
14831            p_next: ::core::ptr::null(),
14832            flags: DescriptorUpdateTemplateCreateFlags::default(),
14833            descriptor_update_entry_count: u32::default(),
14834            p_descriptor_update_entries: ::core::ptr::null(),
14835            template_type: DescriptorUpdateTemplateType::default(),
14836            descriptor_set_layout: DescriptorSetLayout::default(),
14837            pipeline_bind_point: PipelineBindPoint::default(),
14838            pipeline_layout: PipelineLayout::default(),
14839            set: u32::default(),
14840            _marker: PhantomData,
14841        }
14842    }
14843}
14844unsafe impl<'a> TaggedStructure for DescriptorUpdateTemplateCreateInfo<'a> {
14845    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO;
14846}
14847impl<'a> DescriptorUpdateTemplateCreateInfo<'a> {
14848    #[inline]
14849    pub fn flags(mut self, flags: DescriptorUpdateTemplateCreateFlags) -> Self {
14850        self.flags = flags;
14851        self
14852    }
14853    #[inline]
14854    pub fn descriptor_update_entries(
14855        mut self,
14856        descriptor_update_entries: &'a [DescriptorUpdateTemplateEntry],
14857    ) -> Self {
14858        self.descriptor_update_entry_count = descriptor_update_entries.len() as _;
14859        self.p_descriptor_update_entries = descriptor_update_entries.as_ptr();
14860        self
14861    }
14862    #[inline]
14863    pub fn template_type(mut self, template_type: DescriptorUpdateTemplateType) -> Self {
14864        self.template_type = template_type;
14865        self
14866    }
14867    #[inline]
14868    pub fn descriptor_set_layout(mut self, descriptor_set_layout: DescriptorSetLayout) -> Self {
14869        self.descriptor_set_layout = descriptor_set_layout;
14870        self
14871    }
14872    #[inline]
14873    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
14874        self.pipeline_bind_point = pipeline_bind_point;
14875        self
14876    }
14877    #[inline]
14878    pub fn pipeline_layout(mut self, pipeline_layout: PipelineLayout) -> Self {
14879        self.pipeline_layout = pipeline_layout;
14880        self
14881    }
14882    #[inline]
14883    pub fn set(mut self, set: u32) -> Self {
14884        self.set = set;
14885        self
14886    }
14887}
14888#[repr(C)]
14889#[cfg_attr(feature = "debug", derive(Debug))]
14890#[derive(Copy, Clone, Default)]
14891#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkXYColorEXT.html>"]
14892#[must_use]
14893pub struct XYColorEXT {
14894    pub x: f32,
14895    pub y: f32,
14896}
14897impl XYColorEXT {
14898    #[inline]
14899    pub fn x(mut self, x: f32) -> Self {
14900        self.x = x;
14901        self
14902    }
14903    #[inline]
14904    pub fn y(mut self, y: f32) -> Self {
14905        self.y = y;
14906        self
14907    }
14908}
14909#[repr(C)]
14910#[cfg_attr(feature = "debug", derive(Debug))]
14911#[derive(Copy, Clone)]
14912#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePresentIdFeaturesKHR.html>"]
14913#[must_use]
14914pub struct PhysicalDevicePresentIdFeaturesKHR<'a> {
14915    pub s_type: StructureType,
14916    pub p_next: *mut c_void,
14917    pub present_id: Bool32,
14918    pub _marker: PhantomData<&'a ()>,
14919}
14920unsafe impl Send for PhysicalDevicePresentIdFeaturesKHR<'_> {}
14921unsafe impl Sync for PhysicalDevicePresentIdFeaturesKHR<'_> {}
14922impl ::core::default::Default for PhysicalDevicePresentIdFeaturesKHR<'_> {
14923    #[inline]
14924    fn default() -> Self {
14925        Self {
14926            s_type: Self::STRUCTURE_TYPE,
14927            p_next: ::core::ptr::null_mut(),
14928            present_id: Bool32::default(),
14929            _marker: PhantomData,
14930        }
14931    }
14932}
14933unsafe impl<'a> TaggedStructure for PhysicalDevicePresentIdFeaturesKHR<'a> {
14934    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR;
14935}
14936unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePresentIdFeaturesKHR<'_> {}
14937unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePresentIdFeaturesKHR<'_> {}
14938impl<'a> PhysicalDevicePresentIdFeaturesKHR<'a> {
14939    #[inline]
14940    pub fn present_id(mut self, present_id: bool) -> Self {
14941        self.present_id = present_id.into();
14942        self
14943    }
14944}
14945#[repr(C)]
14946#[cfg_attr(feature = "debug", derive(Debug))]
14947#[derive(Copy, Clone)]
14948#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentIdKHR.html>"]
14949#[must_use]
14950pub struct PresentIdKHR<'a> {
14951    pub s_type: StructureType,
14952    pub p_next: *const c_void,
14953    pub swapchain_count: u32,
14954    pub p_present_ids: *const u64,
14955    pub _marker: PhantomData<&'a ()>,
14956}
14957unsafe impl Send for PresentIdKHR<'_> {}
14958unsafe impl Sync for PresentIdKHR<'_> {}
14959impl ::core::default::Default for PresentIdKHR<'_> {
14960    #[inline]
14961    fn default() -> Self {
14962        Self {
14963            s_type: Self::STRUCTURE_TYPE,
14964            p_next: ::core::ptr::null(),
14965            swapchain_count: u32::default(),
14966            p_present_ids: ::core::ptr::null(),
14967            _marker: PhantomData,
14968        }
14969    }
14970}
14971unsafe impl<'a> TaggedStructure for PresentIdKHR<'a> {
14972    const STRUCTURE_TYPE: StructureType = StructureType::PRESENT_ID_KHR;
14973}
14974unsafe impl ExtendsPresentInfoKHR for PresentIdKHR<'_> {}
14975impl<'a> PresentIdKHR<'a> {
14976    #[inline]
14977    pub fn present_ids(mut self, present_ids: &'a [u64]) -> Self {
14978        self.swapchain_count = present_ids.len() as _;
14979        self.p_present_ids = present_ids.as_ptr();
14980        self
14981    }
14982}
14983#[repr(C)]
14984#[cfg_attr(feature = "debug", derive(Debug))]
14985#[derive(Copy, Clone)]
14986#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePresentWaitFeaturesKHR.html>"]
14987#[must_use]
14988pub struct PhysicalDevicePresentWaitFeaturesKHR<'a> {
14989    pub s_type: StructureType,
14990    pub p_next: *mut c_void,
14991    pub present_wait: Bool32,
14992    pub _marker: PhantomData<&'a ()>,
14993}
14994unsafe impl Send for PhysicalDevicePresentWaitFeaturesKHR<'_> {}
14995unsafe impl Sync for PhysicalDevicePresentWaitFeaturesKHR<'_> {}
14996impl ::core::default::Default for PhysicalDevicePresentWaitFeaturesKHR<'_> {
14997    #[inline]
14998    fn default() -> Self {
14999        Self {
15000            s_type: Self::STRUCTURE_TYPE,
15001            p_next: ::core::ptr::null_mut(),
15002            present_wait: Bool32::default(),
15003            _marker: PhantomData,
15004        }
15005    }
15006}
15007unsafe impl<'a> TaggedStructure for PhysicalDevicePresentWaitFeaturesKHR<'a> {
15008    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR;
15009}
15010unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePresentWaitFeaturesKHR<'_> {}
15011unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePresentWaitFeaturesKHR<'_> {}
15012impl<'a> PhysicalDevicePresentWaitFeaturesKHR<'a> {
15013    #[inline]
15014    pub fn present_wait(mut self, present_wait: bool) -> Self {
15015        self.present_wait = present_wait.into();
15016        self
15017    }
15018}
15019#[repr(C)]
15020#[cfg_attr(feature = "debug", derive(Debug))]
15021#[derive(Copy, Clone)]
15022#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkHdrMetadataEXT.html>"]
15023#[must_use]
15024pub struct HdrMetadataEXT<'a> {
15025    pub s_type: StructureType,
15026    pub p_next: *const c_void,
15027    pub display_primary_red: XYColorEXT,
15028    pub display_primary_green: XYColorEXT,
15029    pub display_primary_blue: XYColorEXT,
15030    pub white_point: XYColorEXT,
15031    pub max_luminance: f32,
15032    pub min_luminance: f32,
15033    pub max_content_light_level: f32,
15034    pub max_frame_average_light_level: f32,
15035    pub _marker: PhantomData<&'a ()>,
15036}
15037unsafe impl Send for HdrMetadataEXT<'_> {}
15038unsafe impl Sync for HdrMetadataEXT<'_> {}
15039impl ::core::default::Default for HdrMetadataEXT<'_> {
15040    #[inline]
15041    fn default() -> Self {
15042        Self {
15043            s_type: Self::STRUCTURE_TYPE,
15044            p_next: ::core::ptr::null(),
15045            display_primary_red: XYColorEXT::default(),
15046            display_primary_green: XYColorEXT::default(),
15047            display_primary_blue: XYColorEXT::default(),
15048            white_point: XYColorEXT::default(),
15049            max_luminance: f32::default(),
15050            min_luminance: f32::default(),
15051            max_content_light_level: f32::default(),
15052            max_frame_average_light_level: f32::default(),
15053            _marker: PhantomData,
15054        }
15055    }
15056}
15057unsafe impl<'a> TaggedStructure for HdrMetadataEXT<'a> {
15058    const STRUCTURE_TYPE: StructureType = StructureType::HDR_METADATA_EXT;
15059}
15060impl<'a> HdrMetadataEXT<'a> {
15061    #[inline]
15062    pub fn display_primary_red(mut self, display_primary_red: XYColorEXT) -> Self {
15063        self.display_primary_red = display_primary_red;
15064        self
15065    }
15066    #[inline]
15067    pub fn display_primary_green(mut self, display_primary_green: XYColorEXT) -> Self {
15068        self.display_primary_green = display_primary_green;
15069        self
15070    }
15071    #[inline]
15072    pub fn display_primary_blue(mut self, display_primary_blue: XYColorEXT) -> Self {
15073        self.display_primary_blue = display_primary_blue;
15074        self
15075    }
15076    #[inline]
15077    pub fn white_point(mut self, white_point: XYColorEXT) -> Self {
15078        self.white_point = white_point;
15079        self
15080    }
15081    #[inline]
15082    pub fn max_luminance(mut self, max_luminance: f32) -> Self {
15083        self.max_luminance = max_luminance;
15084        self
15085    }
15086    #[inline]
15087    pub fn min_luminance(mut self, min_luminance: f32) -> Self {
15088        self.min_luminance = min_luminance;
15089        self
15090    }
15091    #[inline]
15092    pub fn max_content_light_level(mut self, max_content_light_level: f32) -> Self {
15093        self.max_content_light_level = max_content_light_level;
15094        self
15095    }
15096    #[inline]
15097    pub fn max_frame_average_light_level(mut self, max_frame_average_light_level: f32) -> Self {
15098        self.max_frame_average_light_level = max_frame_average_light_level;
15099        self
15100    }
15101}
15102#[repr(C)]
15103#[cfg_attr(feature = "debug", derive(Debug))]
15104#[derive(Copy, Clone)]
15105#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayNativeHdrSurfaceCapabilitiesAMD.html>"]
15106#[must_use]
15107pub struct DisplayNativeHdrSurfaceCapabilitiesAMD<'a> {
15108    pub s_type: StructureType,
15109    pub p_next: *mut c_void,
15110    pub local_dimming_support: Bool32,
15111    pub _marker: PhantomData<&'a ()>,
15112}
15113unsafe impl Send for DisplayNativeHdrSurfaceCapabilitiesAMD<'_> {}
15114unsafe impl Sync for DisplayNativeHdrSurfaceCapabilitiesAMD<'_> {}
15115impl ::core::default::Default for DisplayNativeHdrSurfaceCapabilitiesAMD<'_> {
15116    #[inline]
15117    fn default() -> Self {
15118        Self {
15119            s_type: Self::STRUCTURE_TYPE,
15120            p_next: ::core::ptr::null_mut(),
15121            local_dimming_support: Bool32::default(),
15122            _marker: PhantomData,
15123        }
15124    }
15125}
15126unsafe impl<'a> TaggedStructure for DisplayNativeHdrSurfaceCapabilitiesAMD<'a> {
15127    const STRUCTURE_TYPE: StructureType =
15128        StructureType::DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD;
15129}
15130unsafe impl ExtendsSurfaceCapabilities2KHR for DisplayNativeHdrSurfaceCapabilitiesAMD<'_> {}
15131impl<'a> DisplayNativeHdrSurfaceCapabilitiesAMD<'a> {
15132    #[inline]
15133    pub fn local_dimming_support(mut self, local_dimming_support: bool) -> Self {
15134        self.local_dimming_support = local_dimming_support.into();
15135        self
15136    }
15137}
15138#[repr(C)]
15139#[cfg_attr(feature = "debug", derive(Debug))]
15140#[derive(Copy, Clone)]
15141#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainDisplayNativeHdrCreateInfoAMD.html>"]
15142#[must_use]
15143pub struct SwapchainDisplayNativeHdrCreateInfoAMD<'a> {
15144    pub s_type: StructureType,
15145    pub p_next: *const c_void,
15146    pub local_dimming_enable: Bool32,
15147    pub _marker: PhantomData<&'a ()>,
15148}
15149unsafe impl Send for SwapchainDisplayNativeHdrCreateInfoAMD<'_> {}
15150unsafe impl Sync for SwapchainDisplayNativeHdrCreateInfoAMD<'_> {}
15151impl ::core::default::Default for SwapchainDisplayNativeHdrCreateInfoAMD<'_> {
15152    #[inline]
15153    fn default() -> Self {
15154        Self {
15155            s_type: Self::STRUCTURE_TYPE,
15156            p_next: ::core::ptr::null(),
15157            local_dimming_enable: Bool32::default(),
15158            _marker: PhantomData,
15159        }
15160    }
15161}
15162unsafe impl<'a> TaggedStructure for SwapchainDisplayNativeHdrCreateInfoAMD<'a> {
15163    const STRUCTURE_TYPE: StructureType =
15164        StructureType::SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD;
15165}
15166unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainDisplayNativeHdrCreateInfoAMD<'_> {}
15167impl<'a> SwapchainDisplayNativeHdrCreateInfoAMD<'a> {
15168    #[inline]
15169    pub fn local_dimming_enable(mut self, local_dimming_enable: bool) -> Self {
15170        self.local_dimming_enable = local_dimming_enable.into();
15171        self
15172    }
15173}
15174#[repr(C)]
15175#[cfg_attr(feature = "debug", derive(Debug))]
15176#[derive(Copy, Clone, Default)]
15177#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRefreshCycleDurationGOOGLE.html>"]
15178#[must_use]
15179pub struct RefreshCycleDurationGOOGLE {
15180    pub refresh_duration: u64,
15181}
15182impl RefreshCycleDurationGOOGLE {
15183    #[inline]
15184    pub fn refresh_duration(mut self, refresh_duration: u64) -> Self {
15185        self.refresh_duration = refresh_duration;
15186        self
15187    }
15188}
15189#[repr(C)]
15190#[cfg_attr(feature = "debug", derive(Debug))]
15191#[derive(Copy, Clone, Default)]
15192#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPastPresentationTimingGOOGLE.html>"]
15193#[must_use]
15194pub struct PastPresentationTimingGOOGLE {
15195    pub present_id: u32,
15196    pub desired_present_time: u64,
15197    pub actual_present_time: u64,
15198    pub earliest_present_time: u64,
15199    pub present_margin: u64,
15200}
15201impl PastPresentationTimingGOOGLE {
15202    #[inline]
15203    pub fn present_id(mut self, present_id: u32) -> Self {
15204        self.present_id = present_id;
15205        self
15206    }
15207    #[inline]
15208    pub fn desired_present_time(mut self, desired_present_time: u64) -> Self {
15209        self.desired_present_time = desired_present_time;
15210        self
15211    }
15212    #[inline]
15213    pub fn actual_present_time(mut self, actual_present_time: u64) -> Self {
15214        self.actual_present_time = actual_present_time;
15215        self
15216    }
15217    #[inline]
15218    pub fn earliest_present_time(mut self, earliest_present_time: u64) -> Self {
15219        self.earliest_present_time = earliest_present_time;
15220        self
15221    }
15222    #[inline]
15223    pub fn present_margin(mut self, present_margin: u64) -> Self {
15224        self.present_margin = present_margin;
15225        self
15226    }
15227}
15228#[repr(C)]
15229#[cfg_attr(feature = "debug", derive(Debug))]
15230#[derive(Copy, Clone)]
15231#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentTimesInfoGOOGLE.html>"]
15232#[must_use]
15233pub struct PresentTimesInfoGOOGLE<'a> {
15234    pub s_type: StructureType,
15235    pub p_next: *const c_void,
15236    pub swapchain_count: u32,
15237    pub p_times: *const PresentTimeGOOGLE,
15238    pub _marker: PhantomData<&'a ()>,
15239}
15240unsafe impl Send for PresentTimesInfoGOOGLE<'_> {}
15241unsafe impl Sync for PresentTimesInfoGOOGLE<'_> {}
15242impl ::core::default::Default for PresentTimesInfoGOOGLE<'_> {
15243    #[inline]
15244    fn default() -> Self {
15245        Self {
15246            s_type: Self::STRUCTURE_TYPE,
15247            p_next: ::core::ptr::null(),
15248            swapchain_count: u32::default(),
15249            p_times: ::core::ptr::null(),
15250            _marker: PhantomData,
15251        }
15252    }
15253}
15254unsafe impl<'a> TaggedStructure for PresentTimesInfoGOOGLE<'a> {
15255    const STRUCTURE_TYPE: StructureType = StructureType::PRESENT_TIMES_INFO_GOOGLE;
15256}
15257unsafe impl ExtendsPresentInfoKHR for PresentTimesInfoGOOGLE<'_> {}
15258impl<'a> PresentTimesInfoGOOGLE<'a> {
15259    #[inline]
15260    pub fn times(mut self, times: &'a [PresentTimeGOOGLE]) -> Self {
15261        self.swapchain_count = times.len() as _;
15262        self.p_times = times.as_ptr();
15263        self
15264    }
15265}
15266#[repr(C)]
15267#[cfg_attr(feature = "debug", derive(Debug))]
15268#[derive(Copy, Clone, Default)]
15269#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentTimeGOOGLE.html>"]
15270#[must_use]
15271pub struct PresentTimeGOOGLE {
15272    pub present_id: u32,
15273    pub desired_present_time: u64,
15274}
15275impl PresentTimeGOOGLE {
15276    #[inline]
15277    pub fn present_id(mut self, present_id: u32) -> Self {
15278        self.present_id = present_id;
15279        self
15280    }
15281    #[inline]
15282    pub fn desired_present_time(mut self, desired_present_time: u64) -> Self {
15283        self.desired_present_time = desired_present_time;
15284        self
15285    }
15286}
15287#[repr(C)]
15288#[cfg_attr(feature = "debug", derive(Debug))]
15289#[derive(Copy, Clone)]
15290#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkIOSSurfaceCreateInfoMVK.html>"]
15291#[must_use]
15292pub struct IOSSurfaceCreateInfoMVK<'a> {
15293    pub s_type: StructureType,
15294    pub p_next: *const c_void,
15295    pub flags: IOSSurfaceCreateFlagsMVK,
15296    pub p_view: *const c_void,
15297    pub _marker: PhantomData<&'a ()>,
15298}
15299unsafe impl Send for IOSSurfaceCreateInfoMVK<'_> {}
15300unsafe impl Sync for IOSSurfaceCreateInfoMVK<'_> {}
15301impl ::core::default::Default for IOSSurfaceCreateInfoMVK<'_> {
15302    #[inline]
15303    fn default() -> Self {
15304        Self {
15305            s_type: Self::STRUCTURE_TYPE,
15306            p_next: ::core::ptr::null(),
15307            flags: IOSSurfaceCreateFlagsMVK::default(),
15308            p_view: ::core::ptr::null(),
15309            _marker: PhantomData,
15310        }
15311    }
15312}
15313unsafe impl<'a> TaggedStructure for IOSSurfaceCreateInfoMVK<'a> {
15314    const STRUCTURE_TYPE: StructureType = StructureType::IOS_SURFACE_CREATE_INFO_MVK;
15315}
15316impl<'a> IOSSurfaceCreateInfoMVK<'a> {
15317    #[inline]
15318    pub fn flags(mut self, flags: IOSSurfaceCreateFlagsMVK) -> Self {
15319        self.flags = flags;
15320        self
15321    }
15322    #[inline]
15323    pub fn view(mut self, view: *const c_void) -> Self {
15324        self.p_view = view;
15325        self
15326    }
15327}
15328#[repr(C)]
15329#[cfg_attr(feature = "debug", derive(Debug))]
15330#[derive(Copy, Clone)]
15331#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMacOSSurfaceCreateInfoMVK.html>"]
15332#[must_use]
15333pub struct MacOSSurfaceCreateInfoMVK<'a> {
15334    pub s_type: StructureType,
15335    pub p_next: *const c_void,
15336    pub flags: MacOSSurfaceCreateFlagsMVK,
15337    pub p_view: *const c_void,
15338    pub _marker: PhantomData<&'a ()>,
15339}
15340unsafe impl Send for MacOSSurfaceCreateInfoMVK<'_> {}
15341unsafe impl Sync for MacOSSurfaceCreateInfoMVK<'_> {}
15342impl ::core::default::Default for MacOSSurfaceCreateInfoMVK<'_> {
15343    #[inline]
15344    fn default() -> Self {
15345        Self {
15346            s_type: Self::STRUCTURE_TYPE,
15347            p_next: ::core::ptr::null(),
15348            flags: MacOSSurfaceCreateFlagsMVK::default(),
15349            p_view: ::core::ptr::null(),
15350            _marker: PhantomData,
15351        }
15352    }
15353}
15354unsafe impl<'a> TaggedStructure for MacOSSurfaceCreateInfoMVK<'a> {
15355    const STRUCTURE_TYPE: StructureType = StructureType::MACOS_SURFACE_CREATE_INFO_MVK;
15356}
15357impl<'a> MacOSSurfaceCreateInfoMVK<'a> {
15358    #[inline]
15359    pub fn flags(mut self, flags: MacOSSurfaceCreateFlagsMVK) -> Self {
15360        self.flags = flags;
15361        self
15362    }
15363    #[inline]
15364    pub fn view(mut self, view: *const c_void) -> Self {
15365        self.p_view = view;
15366        self
15367    }
15368}
15369#[repr(C)]
15370#[cfg_attr(feature = "debug", derive(Debug))]
15371#[derive(Copy, Clone)]
15372#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMetalSurfaceCreateInfoEXT.html>"]
15373#[must_use]
15374pub struct MetalSurfaceCreateInfoEXT<'a> {
15375    pub s_type: StructureType,
15376    pub p_next: *const c_void,
15377    pub flags: MetalSurfaceCreateFlagsEXT,
15378    pub p_layer: *const CAMetalLayer,
15379    pub _marker: PhantomData<&'a ()>,
15380}
15381unsafe impl Send for MetalSurfaceCreateInfoEXT<'_> {}
15382unsafe impl Sync for MetalSurfaceCreateInfoEXT<'_> {}
15383impl ::core::default::Default for MetalSurfaceCreateInfoEXT<'_> {
15384    #[inline]
15385    fn default() -> Self {
15386        Self {
15387            s_type: Self::STRUCTURE_TYPE,
15388            p_next: ::core::ptr::null(),
15389            flags: MetalSurfaceCreateFlagsEXT::default(),
15390            p_layer: ::core::ptr::null(),
15391            _marker: PhantomData,
15392        }
15393    }
15394}
15395unsafe impl<'a> TaggedStructure for MetalSurfaceCreateInfoEXT<'a> {
15396    const STRUCTURE_TYPE: StructureType = StructureType::METAL_SURFACE_CREATE_INFO_EXT;
15397}
15398impl<'a> MetalSurfaceCreateInfoEXT<'a> {
15399    #[inline]
15400    pub fn flags(mut self, flags: MetalSurfaceCreateFlagsEXT) -> Self {
15401        self.flags = flags;
15402        self
15403    }
15404    #[inline]
15405    pub fn layer(mut self, layer: *const CAMetalLayer) -> Self {
15406        self.p_layer = layer;
15407        self
15408    }
15409}
15410#[repr(C)]
15411#[cfg_attr(feature = "debug", derive(Debug))]
15412#[derive(Copy, Clone, Default)]
15413#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkViewportWScalingNV.html>"]
15414#[must_use]
15415pub struct ViewportWScalingNV {
15416    pub xcoeff: f32,
15417    pub ycoeff: f32,
15418}
15419impl ViewportWScalingNV {
15420    #[inline]
15421    pub fn xcoeff(mut self, xcoeff: f32) -> Self {
15422        self.xcoeff = xcoeff;
15423        self
15424    }
15425    #[inline]
15426    pub fn ycoeff(mut self, ycoeff: f32) -> Self {
15427        self.ycoeff = ycoeff;
15428        self
15429    }
15430}
15431#[repr(C)]
15432#[cfg_attr(feature = "debug", derive(Debug))]
15433#[derive(Copy, Clone)]
15434#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportWScalingStateCreateInfoNV.html>"]
15435#[must_use]
15436pub struct PipelineViewportWScalingStateCreateInfoNV<'a> {
15437    pub s_type: StructureType,
15438    pub p_next: *const c_void,
15439    pub viewport_w_scaling_enable: Bool32,
15440    pub viewport_count: u32,
15441    pub p_viewport_w_scalings: *const ViewportWScalingNV,
15442    pub _marker: PhantomData<&'a ()>,
15443}
15444unsafe impl Send for PipelineViewportWScalingStateCreateInfoNV<'_> {}
15445unsafe impl Sync for PipelineViewportWScalingStateCreateInfoNV<'_> {}
15446impl ::core::default::Default for PipelineViewportWScalingStateCreateInfoNV<'_> {
15447    #[inline]
15448    fn default() -> Self {
15449        Self {
15450            s_type: Self::STRUCTURE_TYPE,
15451            p_next: ::core::ptr::null(),
15452            viewport_w_scaling_enable: Bool32::default(),
15453            viewport_count: u32::default(),
15454            p_viewport_w_scalings: ::core::ptr::null(),
15455            _marker: PhantomData,
15456        }
15457    }
15458}
15459unsafe impl<'a> TaggedStructure for PipelineViewportWScalingStateCreateInfoNV<'a> {
15460    const STRUCTURE_TYPE: StructureType =
15461        StructureType::PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV;
15462}
15463unsafe impl ExtendsPipelineViewportStateCreateInfo
15464    for PipelineViewportWScalingStateCreateInfoNV<'_>
15465{
15466}
15467impl<'a> PipelineViewportWScalingStateCreateInfoNV<'a> {
15468    #[inline]
15469    pub fn viewport_w_scaling_enable(mut self, viewport_w_scaling_enable: bool) -> Self {
15470        self.viewport_w_scaling_enable = viewport_w_scaling_enable.into();
15471        self
15472    }
15473    #[inline]
15474    pub fn viewport_w_scalings(mut self, viewport_w_scalings: &'a [ViewportWScalingNV]) -> Self {
15475        self.viewport_count = viewport_w_scalings.len() as _;
15476        self.p_viewport_w_scalings = viewport_w_scalings.as_ptr();
15477        self
15478    }
15479}
15480#[repr(C)]
15481#[cfg_attr(feature = "debug", derive(Debug))]
15482#[derive(Copy, Clone, Default)]
15483#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkViewportSwizzleNV.html>"]
15484#[must_use]
15485pub struct ViewportSwizzleNV {
15486    pub x: ViewportCoordinateSwizzleNV,
15487    pub y: ViewportCoordinateSwizzleNV,
15488    pub z: ViewportCoordinateSwizzleNV,
15489    pub w: ViewportCoordinateSwizzleNV,
15490}
15491impl ViewportSwizzleNV {
15492    #[inline]
15493    pub fn x(mut self, x: ViewportCoordinateSwizzleNV) -> Self {
15494        self.x = x;
15495        self
15496    }
15497    #[inline]
15498    pub fn y(mut self, y: ViewportCoordinateSwizzleNV) -> Self {
15499        self.y = y;
15500        self
15501    }
15502    #[inline]
15503    pub fn z(mut self, z: ViewportCoordinateSwizzleNV) -> Self {
15504        self.z = z;
15505        self
15506    }
15507    #[inline]
15508    pub fn w(mut self, w: ViewportCoordinateSwizzleNV) -> Self {
15509        self.w = w;
15510        self
15511    }
15512}
15513#[repr(C)]
15514#[cfg_attr(feature = "debug", derive(Debug))]
15515#[derive(Copy, Clone)]
15516#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportSwizzleStateCreateInfoNV.html>"]
15517#[must_use]
15518pub struct PipelineViewportSwizzleStateCreateInfoNV<'a> {
15519    pub s_type: StructureType,
15520    pub p_next: *const c_void,
15521    pub flags: PipelineViewportSwizzleStateCreateFlagsNV,
15522    pub viewport_count: u32,
15523    pub p_viewport_swizzles: *const ViewportSwizzleNV,
15524    pub _marker: PhantomData<&'a ()>,
15525}
15526unsafe impl Send for PipelineViewportSwizzleStateCreateInfoNV<'_> {}
15527unsafe impl Sync for PipelineViewportSwizzleStateCreateInfoNV<'_> {}
15528impl ::core::default::Default for PipelineViewportSwizzleStateCreateInfoNV<'_> {
15529    #[inline]
15530    fn default() -> Self {
15531        Self {
15532            s_type: Self::STRUCTURE_TYPE,
15533            p_next: ::core::ptr::null(),
15534            flags: PipelineViewportSwizzleStateCreateFlagsNV::default(),
15535            viewport_count: u32::default(),
15536            p_viewport_swizzles: ::core::ptr::null(),
15537            _marker: PhantomData,
15538        }
15539    }
15540}
15541unsafe impl<'a> TaggedStructure for PipelineViewportSwizzleStateCreateInfoNV<'a> {
15542    const STRUCTURE_TYPE: StructureType =
15543        StructureType::PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV;
15544}
15545unsafe impl ExtendsPipelineViewportStateCreateInfo
15546    for PipelineViewportSwizzleStateCreateInfoNV<'_>
15547{
15548}
15549impl<'a> PipelineViewportSwizzleStateCreateInfoNV<'a> {
15550    #[inline]
15551    pub fn flags(mut self, flags: PipelineViewportSwizzleStateCreateFlagsNV) -> Self {
15552        self.flags = flags;
15553        self
15554    }
15555    #[inline]
15556    pub fn viewport_swizzles(mut self, viewport_swizzles: &'a [ViewportSwizzleNV]) -> Self {
15557        self.viewport_count = viewport_swizzles.len() as _;
15558        self.p_viewport_swizzles = viewport_swizzles.as_ptr();
15559        self
15560    }
15561}
15562#[repr(C)]
15563#[cfg_attr(feature = "debug", derive(Debug))]
15564#[derive(Copy, Clone)]
15565#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDiscardRectanglePropertiesEXT.html>"]
15566#[must_use]
15567pub struct PhysicalDeviceDiscardRectanglePropertiesEXT<'a> {
15568    pub s_type: StructureType,
15569    pub p_next: *mut c_void,
15570    pub max_discard_rectangles: u32,
15571    pub _marker: PhantomData<&'a ()>,
15572}
15573unsafe impl Send for PhysicalDeviceDiscardRectanglePropertiesEXT<'_> {}
15574unsafe impl Sync for PhysicalDeviceDiscardRectanglePropertiesEXT<'_> {}
15575impl ::core::default::Default for PhysicalDeviceDiscardRectanglePropertiesEXT<'_> {
15576    #[inline]
15577    fn default() -> Self {
15578        Self {
15579            s_type: Self::STRUCTURE_TYPE,
15580            p_next: ::core::ptr::null_mut(),
15581            max_discard_rectangles: u32::default(),
15582            _marker: PhantomData,
15583        }
15584    }
15585}
15586unsafe impl<'a> TaggedStructure for PhysicalDeviceDiscardRectanglePropertiesEXT<'a> {
15587    const STRUCTURE_TYPE: StructureType =
15588        StructureType::PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT;
15589}
15590unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDiscardRectanglePropertiesEXT<'_> {}
15591impl<'a> PhysicalDeviceDiscardRectanglePropertiesEXT<'a> {
15592    #[inline]
15593    pub fn max_discard_rectangles(mut self, max_discard_rectangles: u32) -> Self {
15594        self.max_discard_rectangles = max_discard_rectangles;
15595        self
15596    }
15597}
15598#[repr(C)]
15599#[cfg_attr(feature = "debug", derive(Debug))]
15600#[derive(Copy, Clone)]
15601#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineDiscardRectangleStateCreateInfoEXT.html>"]
15602#[must_use]
15603pub struct PipelineDiscardRectangleStateCreateInfoEXT<'a> {
15604    pub s_type: StructureType,
15605    pub p_next: *const c_void,
15606    pub flags: PipelineDiscardRectangleStateCreateFlagsEXT,
15607    pub discard_rectangle_mode: DiscardRectangleModeEXT,
15608    pub discard_rectangle_count: u32,
15609    pub p_discard_rectangles: *const Rect2D,
15610    pub _marker: PhantomData<&'a ()>,
15611}
15612unsafe impl Send for PipelineDiscardRectangleStateCreateInfoEXT<'_> {}
15613unsafe impl Sync for PipelineDiscardRectangleStateCreateInfoEXT<'_> {}
15614impl ::core::default::Default for PipelineDiscardRectangleStateCreateInfoEXT<'_> {
15615    #[inline]
15616    fn default() -> Self {
15617        Self {
15618            s_type: Self::STRUCTURE_TYPE,
15619            p_next: ::core::ptr::null(),
15620            flags: PipelineDiscardRectangleStateCreateFlagsEXT::default(),
15621            discard_rectangle_mode: DiscardRectangleModeEXT::default(),
15622            discard_rectangle_count: u32::default(),
15623            p_discard_rectangles: ::core::ptr::null(),
15624            _marker: PhantomData,
15625        }
15626    }
15627}
15628unsafe impl<'a> TaggedStructure for PipelineDiscardRectangleStateCreateInfoEXT<'a> {
15629    const STRUCTURE_TYPE: StructureType =
15630        StructureType::PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT;
15631}
15632unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineDiscardRectangleStateCreateInfoEXT<'_> {}
15633impl<'a> PipelineDiscardRectangleStateCreateInfoEXT<'a> {
15634    #[inline]
15635    pub fn flags(mut self, flags: PipelineDiscardRectangleStateCreateFlagsEXT) -> Self {
15636        self.flags = flags;
15637        self
15638    }
15639    #[inline]
15640    pub fn discard_rectangle_mode(
15641        mut self,
15642        discard_rectangle_mode: DiscardRectangleModeEXT,
15643    ) -> Self {
15644        self.discard_rectangle_mode = discard_rectangle_mode;
15645        self
15646    }
15647    #[inline]
15648    pub fn discard_rectangles(mut self, discard_rectangles: &'a [Rect2D]) -> Self {
15649        self.discard_rectangle_count = discard_rectangles.len() as _;
15650        self.p_discard_rectangles = discard_rectangles.as_ptr();
15651        self
15652    }
15653}
15654#[repr(C)]
15655#[cfg_attr(feature = "debug", derive(Debug))]
15656#[derive(Copy, Clone)]
15657#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX.html>"]
15658#[must_use]
15659pub struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'a> {
15660    pub s_type: StructureType,
15661    pub p_next: *mut c_void,
15662    pub per_view_position_all_components: Bool32,
15663    pub _marker: PhantomData<&'a ()>,
15664}
15665unsafe impl Send for PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'_> {}
15666unsafe impl Sync for PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'_> {}
15667impl ::core::default::Default for PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'_> {
15668    #[inline]
15669    fn default() -> Self {
15670        Self {
15671            s_type: Self::STRUCTURE_TYPE,
15672            p_next: ::core::ptr::null_mut(),
15673            per_view_position_all_components: Bool32::default(),
15674            _marker: PhantomData,
15675        }
15676    }
15677}
15678unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'a> {
15679    const STRUCTURE_TYPE: StructureType =
15680        StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX;
15681}
15682unsafe impl ExtendsPhysicalDeviceProperties2
15683    for PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'_>
15684{
15685}
15686impl<'a> PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX<'a> {
15687    #[inline]
15688    pub fn per_view_position_all_components(
15689        mut self,
15690        per_view_position_all_components: bool,
15691    ) -> Self {
15692        self.per_view_position_all_components = per_view_position_all_components.into();
15693        self
15694    }
15695}
15696#[repr(C)]
15697#[cfg_attr(feature = "debug", derive(Debug))]
15698#[derive(Copy, Clone, Default)]
15699#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInputAttachmentAspectReference.html>"]
15700#[must_use]
15701pub struct InputAttachmentAspectReference {
15702    pub subpass: u32,
15703    pub input_attachment_index: u32,
15704    pub aspect_mask: ImageAspectFlags,
15705}
15706impl InputAttachmentAspectReference {
15707    #[inline]
15708    pub fn subpass(mut self, subpass: u32) -> Self {
15709        self.subpass = subpass;
15710        self
15711    }
15712    #[inline]
15713    pub fn input_attachment_index(mut self, input_attachment_index: u32) -> Self {
15714        self.input_attachment_index = input_attachment_index;
15715        self
15716    }
15717    #[inline]
15718    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
15719        self.aspect_mask = aspect_mask;
15720        self
15721    }
15722}
15723#[repr(C)]
15724#[cfg_attr(feature = "debug", derive(Debug))]
15725#[derive(Copy, Clone)]
15726#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassInputAttachmentAspectCreateInfo.html>"]
15727#[must_use]
15728pub struct RenderPassInputAttachmentAspectCreateInfo<'a> {
15729    pub s_type: StructureType,
15730    pub p_next: *const c_void,
15731    pub aspect_reference_count: u32,
15732    pub p_aspect_references: *const InputAttachmentAspectReference,
15733    pub _marker: PhantomData<&'a ()>,
15734}
15735unsafe impl Send for RenderPassInputAttachmentAspectCreateInfo<'_> {}
15736unsafe impl Sync for RenderPassInputAttachmentAspectCreateInfo<'_> {}
15737impl ::core::default::Default for RenderPassInputAttachmentAspectCreateInfo<'_> {
15738    #[inline]
15739    fn default() -> Self {
15740        Self {
15741            s_type: Self::STRUCTURE_TYPE,
15742            p_next: ::core::ptr::null(),
15743            aspect_reference_count: u32::default(),
15744            p_aspect_references: ::core::ptr::null(),
15745            _marker: PhantomData,
15746        }
15747    }
15748}
15749unsafe impl<'a> TaggedStructure for RenderPassInputAttachmentAspectCreateInfo<'a> {
15750    const STRUCTURE_TYPE: StructureType =
15751        StructureType::RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO;
15752}
15753unsafe impl ExtendsRenderPassCreateInfo for RenderPassInputAttachmentAspectCreateInfo<'_> {}
15754impl<'a> RenderPassInputAttachmentAspectCreateInfo<'a> {
15755    #[inline]
15756    pub fn aspect_references(
15757        mut self,
15758        aspect_references: &'a [InputAttachmentAspectReference],
15759    ) -> Self {
15760        self.aspect_reference_count = aspect_references.len() as _;
15761        self.p_aspect_references = aspect_references.as_ptr();
15762        self
15763    }
15764}
15765#[repr(C)]
15766#[cfg_attr(feature = "debug", derive(Debug))]
15767#[derive(Copy, Clone)]
15768#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSurfaceInfo2KHR.html>"]
15769#[must_use]
15770pub struct PhysicalDeviceSurfaceInfo2KHR<'a> {
15771    pub s_type: StructureType,
15772    pub p_next: *const c_void,
15773    pub surface: SurfaceKHR,
15774    pub _marker: PhantomData<&'a ()>,
15775}
15776unsafe impl Send for PhysicalDeviceSurfaceInfo2KHR<'_> {}
15777unsafe impl Sync for PhysicalDeviceSurfaceInfo2KHR<'_> {}
15778impl ::core::default::Default for PhysicalDeviceSurfaceInfo2KHR<'_> {
15779    #[inline]
15780    fn default() -> Self {
15781        Self {
15782            s_type: Self::STRUCTURE_TYPE,
15783            p_next: ::core::ptr::null(),
15784            surface: SurfaceKHR::default(),
15785            _marker: PhantomData,
15786        }
15787    }
15788}
15789unsafe impl<'a> TaggedStructure for PhysicalDeviceSurfaceInfo2KHR<'a> {
15790    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SURFACE_INFO_2_KHR;
15791}
15792pub unsafe trait ExtendsPhysicalDeviceSurfaceInfo2KHR {}
15793impl<'a> PhysicalDeviceSurfaceInfo2KHR<'a> {
15794    #[inline]
15795    pub fn surface(mut self, surface: SurfaceKHR) -> Self {
15796        self.surface = surface;
15797        self
15798    }
15799    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
15800    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
15801    #[doc = r" valid extension structs can be pushed into the chain."]
15802    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
15803    #[doc = r" chain will look like `A -> D -> B -> C`."]
15804    pub fn push_next<T: ExtendsPhysicalDeviceSurfaceInfo2KHR + ?Sized>(
15805        mut self,
15806        next: &'a mut T,
15807    ) -> Self {
15808        unsafe {
15809            let next_ptr = <*const T>::cast(next);
15810            let last_next = ptr_chain_iter(next).last().unwrap();
15811            (*last_next).p_next = self.p_next as _;
15812            self.p_next = next_ptr;
15813        }
15814        self
15815    }
15816}
15817#[repr(C)]
15818#[cfg_attr(feature = "debug", derive(Debug))]
15819#[derive(Copy, Clone)]
15820#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceCapabilities2KHR.html>"]
15821#[must_use]
15822pub struct SurfaceCapabilities2KHR<'a> {
15823    pub s_type: StructureType,
15824    pub p_next: *mut c_void,
15825    pub surface_capabilities: SurfaceCapabilitiesKHR,
15826    pub _marker: PhantomData<&'a ()>,
15827}
15828unsafe impl Send for SurfaceCapabilities2KHR<'_> {}
15829unsafe impl Sync for SurfaceCapabilities2KHR<'_> {}
15830impl ::core::default::Default for SurfaceCapabilities2KHR<'_> {
15831    #[inline]
15832    fn default() -> Self {
15833        Self {
15834            s_type: Self::STRUCTURE_TYPE,
15835            p_next: ::core::ptr::null_mut(),
15836            surface_capabilities: SurfaceCapabilitiesKHR::default(),
15837            _marker: PhantomData,
15838        }
15839    }
15840}
15841unsafe impl<'a> TaggedStructure for SurfaceCapabilities2KHR<'a> {
15842    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_CAPABILITIES_2_KHR;
15843}
15844pub unsafe trait ExtendsSurfaceCapabilities2KHR {}
15845impl<'a> SurfaceCapabilities2KHR<'a> {
15846    #[inline]
15847    pub fn surface_capabilities(mut self, surface_capabilities: SurfaceCapabilitiesKHR) -> Self {
15848        self.surface_capabilities = surface_capabilities;
15849        self
15850    }
15851    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
15852    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
15853    #[doc = r" valid extension structs can be pushed into the chain."]
15854    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
15855    #[doc = r" chain will look like `A -> D -> B -> C`."]
15856    pub fn push_next<T: ExtendsSurfaceCapabilities2KHR + ?Sized>(
15857        mut self,
15858        next: &'a mut T,
15859    ) -> Self {
15860        unsafe {
15861            let next_ptr = <*mut T>::cast(next);
15862            let last_next = ptr_chain_iter(next).last().unwrap();
15863            (*last_next).p_next = self.p_next as _;
15864            self.p_next = next_ptr;
15865        }
15866        self
15867    }
15868}
15869#[repr(C)]
15870#[cfg_attr(feature = "debug", derive(Debug))]
15871#[derive(Copy, Clone)]
15872#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceFormat2KHR.html>"]
15873#[must_use]
15874pub struct SurfaceFormat2KHR<'a> {
15875    pub s_type: StructureType,
15876    pub p_next: *mut c_void,
15877    pub surface_format: SurfaceFormatKHR,
15878    pub _marker: PhantomData<&'a ()>,
15879}
15880unsafe impl Send for SurfaceFormat2KHR<'_> {}
15881unsafe impl Sync for SurfaceFormat2KHR<'_> {}
15882impl ::core::default::Default for SurfaceFormat2KHR<'_> {
15883    #[inline]
15884    fn default() -> Self {
15885        Self {
15886            s_type: Self::STRUCTURE_TYPE,
15887            p_next: ::core::ptr::null_mut(),
15888            surface_format: SurfaceFormatKHR::default(),
15889            _marker: PhantomData,
15890        }
15891    }
15892}
15893unsafe impl<'a> TaggedStructure for SurfaceFormat2KHR<'a> {
15894    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_FORMAT_2_KHR;
15895}
15896pub unsafe trait ExtendsSurfaceFormat2KHR {}
15897impl<'a> SurfaceFormat2KHR<'a> {
15898    #[inline]
15899    pub fn surface_format(mut self, surface_format: SurfaceFormatKHR) -> Self {
15900        self.surface_format = surface_format;
15901        self
15902    }
15903    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
15904    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
15905    #[doc = r" valid extension structs can be pushed into the chain."]
15906    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
15907    #[doc = r" chain will look like `A -> D -> B -> C`."]
15908    pub fn push_next<T: ExtendsSurfaceFormat2KHR + ?Sized>(mut self, next: &'a mut T) -> Self {
15909        unsafe {
15910            let next_ptr = <*mut T>::cast(next);
15911            let last_next = ptr_chain_iter(next).last().unwrap();
15912            (*last_next).p_next = self.p_next as _;
15913            self.p_next = next_ptr;
15914        }
15915        self
15916    }
15917}
15918#[repr(C)]
15919#[cfg_attr(feature = "debug", derive(Debug))]
15920#[derive(Copy, Clone)]
15921#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayProperties2KHR.html>"]
15922#[must_use]
15923pub struct DisplayProperties2KHR<'a> {
15924    pub s_type: StructureType,
15925    pub p_next: *mut c_void,
15926    pub display_properties: DisplayPropertiesKHR<'a>,
15927    pub _marker: PhantomData<&'a ()>,
15928}
15929unsafe impl Send for DisplayProperties2KHR<'_> {}
15930unsafe impl Sync for DisplayProperties2KHR<'_> {}
15931impl ::core::default::Default for DisplayProperties2KHR<'_> {
15932    #[inline]
15933    fn default() -> Self {
15934        Self {
15935            s_type: Self::STRUCTURE_TYPE,
15936            p_next: ::core::ptr::null_mut(),
15937            display_properties: DisplayPropertiesKHR::default(),
15938            _marker: PhantomData,
15939        }
15940    }
15941}
15942unsafe impl<'a> TaggedStructure for DisplayProperties2KHR<'a> {
15943    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_PROPERTIES_2_KHR;
15944}
15945impl<'a> DisplayProperties2KHR<'a> {
15946    #[inline]
15947    pub fn display_properties(mut self, display_properties: DisplayPropertiesKHR<'a>) -> Self {
15948        self.display_properties = display_properties;
15949        self
15950    }
15951}
15952#[repr(C)]
15953#[cfg_attr(feature = "debug", derive(Debug))]
15954#[derive(Copy, Clone)]
15955#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPlaneProperties2KHR.html>"]
15956#[must_use]
15957pub struct DisplayPlaneProperties2KHR<'a> {
15958    pub s_type: StructureType,
15959    pub p_next: *mut c_void,
15960    pub display_plane_properties: DisplayPlanePropertiesKHR,
15961    pub _marker: PhantomData<&'a ()>,
15962}
15963unsafe impl Send for DisplayPlaneProperties2KHR<'_> {}
15964unsafe impl Sync for DisplayPlaneProperties2KHR<'_> {}
15965impl ::core::default::Default for DisplayPlaneProperties2KHR<'_> {
15966    #[inline]
15967    fn default() -> Self {
15968        Self {
15969            s_type: Self::STRUCTURE_TYPE,
15970            p_next: ::core::ptr::null_mut(),
15971            display_plane_properties: DisplayPlanePropertiesKHR::default(),
15972            _marker: PhantomData,
15973        }
15974    }
15975}
15976unsafe impl<'a> TaggedStructure for DisplayPlaneProperties2KHR<'a> {
15977    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_PLANE_PROPERTIES_2_KHR;
15978}
15979impl<'a> DisplayPlaneProperties2KHR<'a> {
15980    #[inline]
15981    pub fn display_plane_properties(
15982        mut self,
15983        display_plane_properties: DisplayPlanePropertiesKHR,
15984    ) -> Self {
15985        self.display_plane_properties = display_plane_properties;
15986        self
15987    }
15988}
15989#[repr(C)]
15990#[cfg_attr(feature = "debug", derive(Debug))]
15991#[derive(Copy, Clone)]
15992#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayModeProperties2KHR.html>"]
15993#[must_use]
15994pub struct DisplayModeProperties2KHR<'a> {
15995    pub s_type: StructureType,
15996    pub p_next: *mut c_void,
15997    pub display_mode_properties: DisplayModePropertiesKHR,
15998    pub _marker: PhantomData<&'a ()>,
15999}
16000unsafe impl Send for DisplayModeProperties2KHR<'_> {}
16001unsafe impl Sync for DisplayModeProperties2KHR<'_> {}
16002impl ::core::default::Default for DisplayModeProperties2KHR<'_> {
16003    #[inline]
16004    fn default() -> Self {
16005        Self {
16006            s_type: Self::STRUCTURE_TYPE,
16007            p_next: ::core::ptr::null_mut(),
16008            display_mode_properties: DisplayModePropertiesKHR::default(),
16009            _marker: PhantomData,
16010        }
16011    }
16012}
16013unsafe impl<'a> TaggedStructure for DisplayModeProperties2KHR<'a> {
16014    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_MODE_PROPERTIES_2_KHR;
16015}
16016impl<'a> DisplayModeProperties2KHR<'a> {
16017    #[inline]
16018    pub fn display_mode_properties(
16019        mut self,
16020        display_mode_properties: DisplayModePropertiesKHR,
16021    ) -> Self {
16022        self.display_mode_properties = display_mode_properties;
16023        self
16024    }
16025}
16026#[repr(C)]
16027#[cfg_attr(feature = "debug", derive(Debug))]
16028#[derive(Copy, Clone)]
16029#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPlaneInfo2KHR.html>"]
16030#[must_use]
16031pub struct DisplayPlaneInfo2KHR<'a> {
16032    pub s_type: StructureType,
16033    pub p_next: *const c_void,
16034    pub mode: DisplayModeKHR,
16035    pub plane_index: u32,
16036    pub _marker: PhantomData<&'a ()>,
16037}
16038unsafe impl Send for DisplayPlaneInfo2KHR<'_> {}
16039unsafe impl Sync for DisplayPlaneInfo2KHR<'_> {}
16040impl ::core::default::Default for DisplayPlaneInfo2KHR<'_> {
16041    #[inline]
16042    fn default() -> Self {
16043        Self {
16044            s_type: Self::STRUCTURE_TYPE,
16045            p_next: ::core::ptr::null(),
16046            mode: DisplayModeKHR::default(),
16047            plane_index: u32::default(),
16048            _marker: PhantomData,
16049        }
16050    }
16051}
16052unsafe impl<'a> TaggedStructure for DisplayPlaneInfo2KHR<'a> {
16053    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_PLANE_INFO_2_KHR;
16054}
16055impl<'a> DisplayPlaneInfo2KHR<'a> {
16056    #[inline]
16057    pub fn mode(mut self, mode: DisplayModeKHR) -> Self {
16058        self.mode = mode;
16059        self
16060    }
16061    #[inline]
16062    pub fn plane_index(mut self, plane_index: u32) -> Self {
16063        self.plane_index = plane_index;
16064        self
16065    }
16066}
16067#[repr(C)]
16068#[cfg_attr(feature = "debug", derive(Debug))]
16069#[derive(Copy, Clone)]
16070#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDisplayPlaneCapabilities2KHR.html>"]
16071#[must_use]
16072pub struct DisplayPlaneCapabilities2KHR<'a> {
16073    pub s_type: StructureType,
16074    pub p_next: *mut c_void,
16075    pub capabilities: DisplayPlaneCapabilitiesKHR,
16076    pub _marker: PhantomData<&'a ()>,
16077}
16078unsafe impl Send for DisplayPlaneCapabilities2KHR<'_> {}
16079unsafe impl Sync for DisplayPlaneCapabilities2KHR<'_> {}
16080impl ::core::default::Default for DisplayPlaneCapabilities2KHR<'_> {
16081    #[inline]
16082    fn default() -> Self {
16083        Self {
16084            s_type: Self::STRUCTURE_TYPE,
16085            p_next: ::core::ptr::null_mut(),
16086            capabilities: DisplayPlaneCapabilitiesKHR::default(),
16087            _marker: PhantomData,
16088        }
16089    }
16090}
16091unsafe impl<'a> TaggedStructure for DisplayPlaneCapabilities2KHR<'a> {
16092    const STRUCTURE_TYPE: StructureType = StructureType::DISPLAY_PLANE_CAPABILITIES_2_KHR;
16093}
16094impl<'a> DisplayPlaneCapabilities2KHR<'a> {
16095    #[inline]
16096    pub fn capabilities(mut self, capabilities: DisplayPlaneCapabilitiesKHR) -> Self {
16097        self.capabilities = capabilities;
16098        self
16099    }
16100}
16101#[repr(C)]
16102#[cfg_attr(feature = "debug", derive(Debug))]
16103#[derive(Copy, Clone)]
16104#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSharedPresentSurfaceCapabilitiesKHR.html>"]
16105#[must_use]
16106pub struct SharedPresentSurfaceCapabilitiesKHR<'a> {
16107    pub s_type: StructureType,
16108    pub p_next: *mut c_void,
16109    pub shared_present_supported_usage_flags: ImageUsageFlags,
16110    pub _marker: PhantomData<&'a ()>,
16111}
16112unsafe impl Send for SharedPresentSurfaceCapabilitiesKHR<'_> {}
16113unsafe impl Sync for SharedPresentSurfaceCapabilitiesKHR<'_> {}
16114impl ::core::default::Default for SharedPresentSurfaceCapabilitiesKHR<'_> {
16115    #[inline]
16116    fn default() -> Self {
16117        Self {
16118            s_type: Self::STRUCTURE_TYPE,
16119            p_next: ::core::ptr::null_mut(),
16120            shared_present_supported_usage_flags: ImageUsageFlags::default(),
16121            _marker: PhantomData,
16122        }
16123    }
16124}
16125unsafe impl<'a> TaggedStructure for SharedPresentSurfaceCapabilitiesKHR<'a> {
16126    const STRUCTURE_TYPE: StructureType = StructureType::SHARED_PRESENT_SURFACE_CAPABILITIES_KHR;
16127}
16128unsafe impl ExtendsSurfaceCapabilities2KHR for SharedPresentSurfaceCapabilitiesKHR<'_> {}
16129impl<'a> SharedPresentSurfaceCapabilitiesKHR<'a> {
16130    #[inline]
16131    pub fn shared_present_supported_usage_flags(
16132        mut self,
16133        shared_present_supported_usage_flags: ImageUsageFlags,
16134    ) -> Self {
16135        self.shared_present_supported_usage_flags = shared_present_supported_usage_flags;
16136        self
16137    }
16138}
16139#[repr(C)]
16140#[cfg_attr(feature = "debug", derive(Debug))]
16141#[derive(Copy, Clone)]
16142#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevice16BitStorageFeatures.html>"]
16143#[must_use]
16144pub struct PhysicalDevice16BitStorageFeatures<'a> {
16145    pub s_type: StructureType,
16146    pub p_next: *mut c_void,
16147    pub storage_buffer16_bit_access: Bool32,
16148    pub uniform_and_storage_buffer16_bit_access: Bool32,
16149    pub storage_push_constant16: Bool32,
16150    pub storage_input_output16: Bool32,
16151    pub _marker: PhantomData<&'a ()>,
16152}
16153unsafe impl Send for PhysicalDevice16BitStorageFeatures<'_> {}
16154unsafe impl Sync for PhysicalDevice16BitStorageFeatures<'_> {}
16155impl ::core::default::Default for PhysicalDevice16BitStorageFeatures<'_> {
16156    #[inline]
16157    fn default() -> Self {
16158        Self {
16159            s_type: Self::STRUCTURE_TYPE,
16160            p_next: ::core::ptr::null_mut(),
16161            storage_buffer16_bit_access: Bool32::default(),
16162            uniform_and_storage_buffer16_bit_access: Bool32::default(),
16163            storage_push_constant16: Bool32::default(),
16164            storage_input_output16: Bool32::default(),
16165            _marker: PhantomData,
16166        }
16167    }
16168}
16169unsafe impl<'a> TaggedStructure for PhysicalDevice16BitStorageFeatures<'a> {
16170    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES;
16171}
16172unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevice16BitStorageFeatures<'_> {}
16173unsafe impl ExtendsDeviceCreateInfo for PhysicalDevice16BitStorageFeatures<'_> {}
16174impl<'a> PhysicalDevice16BitStorageFeatures<'a> {
16175    #[inline]
16176    pub fn storage_buffer16_bit_access(mut self, storage_buffer16_bit_access: bool) -> Self {
16177        self.storage_buffer16_bit_access = storage_buffer16_bit_access.into();
16178        self
16179    }
16180    #[inline]
16181    pub fn uniform_and_storage_buffer16_bit_access(
16182        mut self,
16183        uniform_and_storage_buffer16_bit_access: bool,
16184    ) -> Self {
16185        self.uniform_and_storage_buffer16_bit_access =
16186            uniform_and_storage_buffer16_bit_access.into();
16187        self
16188    }
16189    #[inline]
16190    pub fn storage_push_constant16(mut self, storage_push_constant16: bool) -> Self {
16191        self.storage_push_constant16 = storage_push_constant16.into();
16192        self
16193    }
16194    #[inline]
16195    pub fn storage_input_output16(mut self, storage_input_output16: bool) -> Self {
16196        self.storage_input_output16 = storage_input_output16.into();
16197        self
16198    }
16199}
16200#[repr(C)]
16201#[cfg_attr(feature = "debug", derive(Debug))]
16202#[derive(Copy, Clone)]
16203#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubgroupProperties.html>"]
16204#[must_use]
16205pub struct PhysicalDeviceSubgroupProperties<'a> {
16206    pub s_type: StructureType,
16207    pub p_next: *mut c_void,
16208    pub subgroup_size: u32,
16209    pub supported_stages: ShaderStageFlags,
16210    pub supported_operations: SubgroupFeatureFlags,
16211    pub quad_operations_in_all_stages: Bool32,
16212    pub _marker: PhantomData<&'a ()>,
16213}
16214unsafe impl Send for PhysicalDeviceSubgroupProperties<'_> {}
16215unsafe impl Sync for PhysicalDeviceSubgroupProperties<'_> {}
16216impl ::core::default::Default for PhysicalDeviceSubgroupProperties<'_> {
16217    #[inline]
16218    fn default() -> Self {
16219        Self {
16220            s_type: Self::STRUCTURE_TYPE,
16221            p_next: ::core::ptr::null_mut(),
16222            subgroup_size: u32::default(),
16223            supported_stages: ShaderStageFlags::default(),
16224            supported_operations: SubgroupFeatureFlags::default(),
16225            quad_operations_in_all_stages: Bool32::default(),
16226            _marker: PhantomData,
16227        }
16228    }
16229}
16230unsafe impl<'a> TaggedStructure for PhysicalDeviceSubgroupProperties<'a> {
16231    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SUBGROUP_PROPERTIES;
16232}
16233unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSubgroupProperties<'_> {}
16234impl<'a> PhysicalDeviceSubgroupProperties<'a> {
16235    #[inline]
16236    pub fn subgroup_size(mut self, subgroup_size: u32) -> Self {
16237        self.subgroup_size = subgroup_size;
16238        self
16239    }
16240    #[inline]
16241    pub fn supported_stages(mut self, supported_stages: ShaderStageFlags) -> Self {
16242        self.supported_stages = supported_stages;
16243        self
16244    }
16245    #[inline]
16246    pub fn supported_operations(mut self, supported_operations: SubgroupFeatureFlags) -> Self {
16247        self.supported_operations = supported_operations;
16248        self
16249    }
16250    #[inline]
16251    pub fn quad_operations_in_all_stages(mut self, quad_operations_in_all_stages: bool) -> Self {
16252        self.quad_operations_in_all_stages = quad_operations_in_all_stages.into();
16253        self
16254    }
16255}
16256#[repr(C)]
16257#[cfg_attr(feature = "debug", derive(Debug))]
16258#[derive(Copy, Clone)]
16259#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.html>"]
16260#[must_use]
16261pub struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'a> {
16262    pub s_type: StructureType,
16263    pub p_next: *mut c_void,
16264    pub shader_subgroup_extended_types: Bool32,
16265    pub _marker: PhantomData<&'a ()>,
16266}
16267unsafe impl Send for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'_> {}
16268unsafe impl Sync for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'_> {}
16269impl ::core::default::Default for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'_> {
16270    #[inline]
16271    fn default() -> Self {
16272        Self {
16273            s_type: Self::STRUCTURE_TYPE,
16274            p_next: ::core::ptr::null_mut(),
16275            shader_subgroup_extended_types: Bool32::default(),
16276            _marker: PhantomData,
16277        }
16278    }
16279}
16280unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'a> {
16281    const STRUCTURE_TYPE: StructureType =
16282        StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
16283}
16284unsafe impl ExtendsPhysicalDeviceFeatures2
16285    for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'_>
16286{
16287}
16288unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'_> {}
16289impl<'a> PhysicalDeviceShaderSubgroupExtendedTypesFeatures<'a> {
16290    #[inline]
16291    pub fn shader_subgroup_extended_types(mut self, shader_subgroup_extended_types: bool) -> Self {
16292        self.shader_subgroup_extended_types = shader_subgroup_extended_types.into();
16293        self
16294    }
16295}
16296#[repr(C)]
16297#[cfg_attr(feature = "debug", derive(Debug))]
16298#[derive(Copy, Clone)]
16299#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferMemoryRequirementsInfo2.html>"]
16300#[must_use]
16301pub struct BufferMemoryRequirementsInfo2<'a> {
16302    pub s_type: StructureType,
16303    pub p_next: *const c_void,
16304    pub buffer: Buffer,
16305    pub _marker: PhantomData<&'a ()>,
16306}
16307unsafe impl Send for BufferMemoryRequirementsInfo2<'_> {}
16308unsafe impl Sync for BufferMemoryRequirementsInfo2<'_> {}
16309impl ::core::default::Default for BufferMemoryRequirementsInfo2<'_> {
16310    #[inline]
16311    fn default() -> Self {
16312        Self {
16313            s_type: Self::STRUCTURE_TYPE,
16314            p_next: ::core::ptr::null(),
16315            buffer: Buffer::default(),
16316            _marker: PhantomData,
16317        }
16318    }
16319}
16320unsafe impl<'a> TaggedStructure for BufferMemoryRequirementsInfo2<'a> {
16321    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_MEMORY_REQUIREMENTS_INFO_2;
16322}
16323impl<'a> BufferMemoryRequirementsInfo2<'a> {
16324    #[inline]
16325    pub fn buffer(mut self, buffer: Buffer) -> Self {
16326        self.buffer = buffer;
16327        self
16328    }
16329}
16330#[repr(C)]
16331#[cfg_attr(feature = "debug", derive(Debug))]
16332#[derive(Copy, Clone)]
16333#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceBufferMemoryRequirements.html>"]
16334#[must_use]
16335pub struct DeviceBufferMemoryRequirements<'a> {
16336    pub s_type: StructureType,
16337    pub p_next: *const c_void,
16338    pub p_create_info: *const BufferCreateInfo<'a>,
16339    pub _marker: PhantomData<&'a ()>,
16340}
16341unsafe impl Send for DeviceBufferMemoryRequirements<'_> {}
16342unsafe impl Sync for DeviceBufferMemoryRequirements<'_> {}
16343impl ::core::default::Default for DeviceBufferMemoryRequirements<'_> {
16344    #[inline]
16345    fn default() -> Self {
16346        Self {
16347            s_type: Self::STRUCTURE_TYPE,
16348            p_next: ::core::ptr::null(),
16349            p_create_info: ::core::ptr::null(),
16350            _marker: PhantomData,
16351        }
16352    }
16353}
16354unsafe impl<'a> TaggedStructure for DeviceBufferMemoryRequirements<'a> {
16355    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_BUFFER_MEMORY_REQUIREMENTS;
16356}
16357impl<'a> DeviceBufferMemoryRequirements<'a> {
16358    #[inline]
16359    pub fn create_info(mut self, create_info: &'a BufferCreateInfo<'a>) -> Self {
16360        self.p_create_info = create_info;
16361        self
16362    }
16363}
16364#[repr(C)]
16365#[cfg_attr(feature = "debug", derive(Debug))]
16366#[derive(Copy, Clone)]
16367#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageMemoryRequirementsInfo2.html>"]
16368#[must_use]
16369pub struct ImageMemoryRequirementsInfo2<'a> {
16370    pub s_type: StructureType,
16371    pub p_next: *const c_void,
16372    pub image: Image,
16373    pub _marker: PhantomData<&'a ()>,
16374}
16375unsafe impl Send for ImageMemoryRequirementsInfo2<'_> {}
16376unsafe impl Sync for ImageMemoryRequirementsInfo2<'_> {}
16377impl ::core::default::Default for ImageMemoryRequirementsInfo2<'_> {
16378    #[inline]
16379    fn default() -> Self {
16380        Self {
16381            s_type: Self::STRUCTURE_TYPE,
16382            p_next: ::core::ptr::null(),
16383            image: Image::default(),
16384            _marker: PhantomData,
16385        }
16386    }
16387}
16388unsafe impl<'a> TaggedStructure for ImageMemoryRequirementsInfo2<'a> {
16389    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_MEMORY_REQUIREMENTS_INFO_2;
16390}
16391pub unsafe trait ExtendsImageMemoryRequirementsInfo2 {}
16392impl<'a> ImageMemoryRequirementsInfo2<'a> {
16393    #[inline]
16394    pub fn image(mut self, image: Image) -> Self {
16395        self.image = image;
16396        self
16397    }
16398    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
16399    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
16400    #[doc = r" valid extension structs can be pushed into the chain."]
16401    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
16402    #[doc = r" chain will look like `A -> D -> B -> C`."]
16403    pub fn push_next<T: ExtendsImageMemoryRequirementsInfo2 + ?Sized>(
16404        mut self,
16405        next: &'a mut T,
16406    ) -> Self {
16407        unsafe {
16408            let next_ptr = <*const T>::cast(next);
16409            let last_next = ptr_chain_iter(next).last().unwrap();
16410            (*last_next).p_next = self.p_next as _;
16411            self.p_next = next_ptr;
16412        }
16413        self
16414    }
16415}
16416#[repr(C)]
16417#[cfg_attr(feature = "debug", derive(Debug))]
16418#[derive(Copy, Clone)]
16419#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSparseMemoryRequirementsInfo2.html>"]
16420#[must_use]
16421pub struct ImageSparseMemoryRequirementsInfo2<'a> {
16422    pub s_type: StructureType,
16423    pub p_next: *const c_void,
16424    pub image: Image,
16425    pub _marker: PhantomData<&'a ()>,
16426}
16427unsafe impl Send for ImageSparseMemoryRequirementsInfo2<'_> {}
16428unsafe impl Sync for ImageSparseMemoryRequirementsInfo2<'_> {}
16429impl ::core::default::Default for ImageSparseMemoryRequirementsInfo2<'_> {
16430    #[inline]
16431    fn default() -> Self {
16432        Self {
16433            s_type: Self::STRUCTURE_TYPE,
16434            p_next: ::core::ptr::null(),
16435            image: Image::default(),
16436            _marker: PhantomData,
16437        }
16438    }
16439}
16440unsafe impl<'a> TaggedStructure for ImageSparseMemoryRequirementsInfo2<'a> {
16441    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2;
16442}
16443impl<'a> ImageSparseMemoryRequirementsInfo2<'a> {
16444    #[inline]
16445    pub fn image(mut self, image: Image) -> Self {
16446        self.image = image;
16447        self
16448    }
16449}
16450#[repr(C)]
16451#[cfg_attr(feature = "debug", derive(Debug))]
16452#[derive(Copy, Clone)]
16453#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceImageMemoryRequirements.html>"]
16454#[must_use]
16455pub struct DeviceImageMemoryRequirements<'a> {
16456    pub s_type: StructureType,
16457    pub p_next: *const c_void,
16458    pub p_create_info: *const ImageCreateInfo<'a>,
16459    pub plane_aspect: ImageAspectFlags,
16460    pub _marker: PhantomData<&'a ()>,
16461}
16462unsafe impl Send for DeviceImageMemoryRequirements<'_> {}
16463unsafe impl Sync for DeviceImageMemoryRequirements<'_> {}
16464impl ::core::default::Default for DeviceImageMemoryRequirements<'_> {
16465    #[inline]
16466    fn default() -> Self {
16467        Self {
16468            s_type: Self::STRUCTURE_TYPE,
16469            p_next: ::core::ptr::null(),
16470            p_create_info: ::core::ptr::null(),
16471            plane_aspect: ImageAspectFlags::default(),
16472            _marker: PhantomData,
16473        }
16474    }
16475}
16476unsafe impl<'a> TaggedStructure for DeviceImageMemoryRequirements<'a> {
16477    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_IMAGE_MEMORY_REQUIREMENTS;
16478}
16479impl<'a> DeviceImageMemoryRequirements<'a> {
16480    #[inline]
16481    pub fn create_info(mut self, create_info: &'a ImageCreateInfo<'a>) -> Self {
16482        self.p_create_info = create_info;
16483        self
16484    }
16485    #[inline]
16486    pub fn plane_aspect(mut self, plane_aspect: ImageAspectFlags) -> Self {
16487        self.plane_aspect = plane_aspect;
16488        self
16489    }
16490}
16491#[repr(C)]
16492#[cfg_attr(feature = "debug", derive(Debug))]
16493#[derive(Copy, Clone)]
16494#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryRequirements2.html>"]
16495#[must_use]
16496pub struct MemoryRequirements2<'a> {
16497    pub s_type: StructureType,
16498    pub p_next: *mut c_void,
16499    pub memory_requirements: MemoryRequirements,
16500    pub _marker: PhantomData<&'a ()>,
16501}
16502unsafe impl Send for MemoryRequirements2<'_> {}
16503unsafe impl Sync for MemoryRequirements2<'_> {}
16504impl ::core::default::Default for MemoryRequirements2<'_> {
16505    #[inline]
16506    fn default() -> Self {
16507        Self {
16508            s_type: Self::STRUCTURE_TYPE,
16509            p_next: ::core::ptr::null_mut(),
16510            memory_requirements: MemoryRequirements::default(),
16511            _marker: PhantomData,
16512        }
16513    }
16514}
16515unsafe impl<'a> TaggedStructure for MemoryRequirements2<'a> {
16516    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_REQUIREMENTS_2;
16517}
16518pub unsafe trait ExtendsMemoryRequirements2 {}
16519impl<'a> MemoryRequirements2<'a> {
16520    #[inline]
16521    pub fn memory_requirements(mut self, memory_requirements: MemoryRequirements) -> Self {
16522        self.memory_requirements = memory_requirements;
16523        self
16524    }
16525    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
16526    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
16527    #[doc = r" valid extension structs can be pushed into the chain."]
16528    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
16529    #[doc = r" chain will look like `A -> D -> B -> C`."]
16530    pub fn push_next<T: ExtendsMemoryRequirements2 + ?Sized>(mut self, next: &'a mut T) -> Self {
16531        unsafe {
16532            let next_ptr = <*mut T>::cast(next);
16533            let last_next = ptr_chain_iter(next).last().unwrap();
16534            (*last_next).p_next = self.p_next as _;
16535            self.p_next = next_ptr;
16536        }
16537        self
16538    }
16539}
16540#[repr(C)]
16541#[cfg_attr(feature = "debug", derive(Debug))]
16542#[derive(Copy, Clone)]
16543#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSparseImageMemoryRequirements2.html>"]
16544#[must_use]
16545pub struct SparseImageMemoryRequirements2<'a> {
16546    pub s_type: StructureType,
16547    pub p_next: *mut c_void,
16548    pub memory_requirements: SparseImageMemoryRequirements,
16549    pub _marker: PhantomData<&'a ()>,
16550}
16551unsafe impl Send for SparseImageMemoryRequirements2<'_> {}
16552unsafe impl Sync for SparseImageMemoryRequirements2<'_> {}
16553impl ::core::default::Default for SparseImageMemoryRequirements2<'_> {
16554    #[inline]
16555    fn default() -> Self {
16556        Self {
16557            s_type: Self::STRUCTURE_TYPE,
16558            p_next: ::core::ptr::null_mut(),
16559            memory_requirements: SparseImageMemoryRequirements::default(),
16560            _marker: PhantomData,
16561        }
16562    }
16563}
16564unsafe impl<'a> TaggedStructure for SparseImageMemoryRequirements2<'a> {
16565    const STRUCTURE_TYPE: StructureType = StructureType::SPARSE_IMAGE_MEMORY_REQUIREMENTS_2;
16566}
16567impl<'a> SparseImageMemoryRequirements2<'a> {
16568    #[inline]
16569    pub fn memory_requirements(
16570        mut self,
16571        memory_requirements: SparseImageMemoryRequirements,
16572    ) -> Self {
16573        self.memory_requirements = memory_requirements;
16574        self
16575    }
16576}
16577#[repr(C)]
16578#[cfg_attr(feature = "debug", derive(Debug))]
16579#[derive(Copy, Clone)]
16580#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePointClippingProperties.html>"]
16581#[must_use]
16582pub struct PhysicalDevicePointClippingProperties<'a> {
16583    pub s_type: StructureType,
16584    pub p_next: *mut c_void,
16585    pub point_clipping_behavior: PointClippingBehavior,
16586    pub _marker: PhantomData<&'a ()>,
16587}
16588unsafe impl Send for PhysicalDevicePointClippingProperties<'_> {}
16589unsafe impl Sync for PhysicalDevicePointClippingProperties<'_> {}
16590impl ::core::default::Default for PhysicalDevicePointClippingProperties<'_> {
16591    #[inline]
16592    fn default() -> Self {
16593        Self {
16594            s_type: Self::STRUCTURE_TYPE,
16595            p_next: ::core::ptr::null_mut(),
16596            point_clipping_behavior: PointClippingBehavior::default(),
16597            _marker: PhantomData,
16598        }
16599    }
16600}
16601unsafe impl<'a> TaggedStructure for PhysicalDevicePointClippingProperties<'a> {
16602    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES;
16603}
16604unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePointClippingProperties<'_> {}
16605impl<'a> PhysicalDevicePointClippingProperties<'a> {
16606    #[inline]
16607    pub fn point_clipping_behavior(
16608        mut self,
16609        point_clipping_behavior: PointClippingBehavior,
16610    ) -> Self {
16611        self.point_clipping_behavior = point_clipping_behavior;
16612        self
16613    }
16614}
16615#[repr(C)]
16616#[cfg_attr(feature = "debug", derive(Debug))]
16617#[derive(Copy, Clone)]
16618#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryDedicatedRequirements.html>"]
16619#[must_use]
16620pub struct MemoryDedicatedRequirements<'a> {
16621    pub s_type: StructureType,
16622    pub p_next: *mut c_void,
16623    pub prefers_dedicated_allocation: Bool32,
16624    pub requires_dedicated_allocation: Bool32,
16625    pub _marker: PhantomData<&'a ()>,
16626}
16627unsafe impl Send for MemoryDedicatedRequirements<'_> {}
16628unsafe impl Sync for MemoryDedicatedRequirements<'_> {}
16629impl ::core::default::Default for MemoryDedicatedRequirements<'_> {
16630    #[inline]
16631    fn default() -> Self {
16632        Self {
16633            s_type: Self::STRUCTURE_TYPE,
16634            p_next: ::core::ptr::null_mut(),
16635            prefers_dedicated_allocation: Bool32::default(),
16636            requires_dedicated_allocation: Bool32::default(),
16637            _marker: PhantomData,
16638        }
16639    }
16640}
16641unsafe impl<'a> TaggedStructure for MemoryDedicatedRequirements<'a> {
16642    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_DEDICATED_REQUIREMENTS;
16643}
16644unsafe impl ExtendsMemoryRequirements2 for MemoryDedicatedRequirements<'_> {}
16645impl<'a> MemoryDedicatedRequirements<'a> {
16646    #[inline]
16647    pub fn prefers_dedicated_allocation(mut self, prefers_dedicated_allocation: bool) -> Self {
16648        self.prefers_dedicated_allocation = prefers_dedicated_allocation.into();
16649        self
16650    }
16651    #[inline]
16652    pub fn requires_dedicated_allocation(mut self, requires_dedicated_allocation: bool) -> Self {
16653        self.requires_dedicated_allocation = requires_dedicated_allocation.into();
16654        self
16655    }
16656}
16657#[repr(C)]
16658#[cfg_attr(feature = "debug", derive(Debug))]
16659#[derive(Copy, Clone)]
16660#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryDedicatedAllocateInfo.html>"]
16661#[must_use]
16662pub struct MemoryDedicatedAllocateInfo<'a> {
16663    pub s_type: StructureType,
16664    pub p_next: *const c_void,
16665    pub image: Image,
16666    pub buffer: Buffer,
16667    pub _marker: PhantomData<&'a ()>,
16668}
16669unsafe impl Send for MemoryDedicatedAllocateInfo<'_> {}
16670unsafe impl Sync for MemoryDedicatedAllocateInfo<'_> {}
16671impl ::core::default::Default for MemoryDedicatedAllocateInfo<'_> {
16672    #[inline]
16673    fn default() -> Self {
16674        Self {
16675            s_type: Self::STRUCTURE_TYPE,
16676            p_next: ::core::ptr::null(),
16677            image: Image::default(),
16678            buffer: Buffer::default(),
16679            _marker: PhantomData,
16680        }
16681    }
16682}
16683unsafe impl<'a> TaggedStructure for MemoryDedicatedAllocateInfo<'a> {
16684    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_DEDICATED_ALLOCATE_INFO;
16685}
16686unsafe impl ExtendsMemoryAllocateInfo for MemoryDedicatedAllocateInfo<'_> {}
16687impl<'a> MemoryDedicatedAllocateInfo<'a> {
16688    #[inline]
16689    pub fn image(mut self, image: Image) -> Self {
16690        self.image = image;
16691        self
16692    }
16693    #[inline]
16694    pub fn buffer(mut self, buffer: Buffer) -> Self {
16695        self.buffer = buffer;
16696        self
16697    }
16698}
16699#[repr(C)]
16700#[cfg_attr(feature = "debug", derive(Debug))]
16701#[derive(Copy, Clone)]
16702#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewUsageCreateInfo.html>"]
16703#[must_use]
16704pub struct ImageViewUsageCreateInfo<'a> {
16705    pub s_type: StructureType,
16706    pub p_next: *const c_void,
16707    pub usage: ImageUsageFlags,
16708    pub _marker: PhantomData<&'a ()>,
16709}
16710unsafe impl Send for ImageViewUsageCreateInfo<'_> {}
16711unsafe impl Sync for ImageViewUsageCreateInfo<'_> {}
16712impl ::core::default::Default for ImageViewUsageCreateInfo<'_> {
16713    #[inline]
16714    fn default() -> Self {
16715        Self {
16716            s_type: Self::STRUCTURE_TYPE,
16717            p_next: ::core::ptr::null(),
16718            usage: ImageUsageFlags::default(),
16719            _marker: PhantomData,
16720        }
16721    }
16722}
16723unsafe impl<'a> TaggedStructure for ImageViewUsageCreateInfo<'a> {
16724    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_USAGE_CREATE_INFO;
16725}
16726unsafe impl ExtendsImageViewCreateInfo for ImageViewUsageCreateInfo<'_> {}
16727impl<'a> ImageViewUsageCreateInfo<'a> {
16728    #[inline]
16729    pub fn usage(mut self, usage: ImageUsageFlags) -> Self {
16730        self.usage = usage;
16731        self
16732    }
16733}
16734#[repr(C)]
16735#[cfg_attr(feature = "debug", derive(Debug))]
16736#[derive(Copy, Clone)]
16737#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewSlicedCreateInfoEXT.html>"]
16738#[must_use]
16739pub struct ImageViewSlicedCreateInfoEXT<'a> {
16740    pub s_type: StructureType,
16741    pub p_next: *const c_void,
16742    pub slice_offset: u32,
16743    pub slice_count: u32,
16744    pub _marker: PhantomData<&'a ()>,
16745}
16746unsafe impl Send for ImageViewSlicedCreateInfoEXT<'_> {}
16747unsafe impl Sync for ImageViewSlicedCreateInfoEXT<'_> {}
16748impl ::core::default::Default for ImageViewSlicedCreateInfoEXT<'_> {
16749    #[inline]
16750    fn default() -> Self {
16751        Self {
16752            s_type: Self::STRUCTURE_TYPE,
16753            p_next: ::core::ptr::null(),
16754            slice_offset: u32::default(),
16755            slice_count: u32::default(),
16756            _marker: PhantomData,
16757        }
16758    }
16759}
16760unsafe impl<'a> TaggedStructure for ImageViewSlicedCreateInfoEXT<'a> {
16761    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_SLICED_CREATE_INFO_EXT;
16762}
16763unsafe impl ExtendsImageViewCreateInfo for ImageViewSlicedCreateInfoEXT<'_> {}
16764impl<'a> ImageViewSlicedCreateInfoEXT<'a> {
16765    #[inline]
16766    pub fn slice_offset(mut self, slice_offset: u32) -> Self {
16767        self.slice_offset = slice_offset;
16768        self
16769    }
16770    #[inline]
16771    pub fn slice_count(mut self, slice_count: u32) -> Self {
16772        self.slice_count = slice_count;
16773        self
16774    }
16775}
16776#[repr(C)]
16777#[cfg_attr(feature = "debug", derive(Debug))]
16778#[derive(Copy, Clone)]
16779#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineTessellationDomainOriginStateCreateInfo.html>"]
16780#[must_use]
16781pub struct PipelineTessellationDomainOriginStateCreateInfo<'a> {
16782    pub s_type: StructureType,
16783    pub p_next: *const c_void,
16784    pub domain_origin: TessellationDomainOrigin,
16785    pub _marker: PhantomData<&'a ()>,
16786}
16787unsafe impl Send for PipelineTessellationDomainOriginStateCreateInfo<'_> {}
16788unsafe impl Sync for PipelineTessellationDomainOriginStateCreateInfo<'_> {}
16789impl ::core::default::Default for PipelineTessellationDomainOriginStateCreateInfo<'_> {
16790    #[inline]
16791    fn default() -> Self {
16792        Self {
16793            s_type: Self::STRUCTURE_TYPE,
16794            p_next: ::core::ptr::null(),
16795            domain_origin: TessellationDomainOrigin::default(),
16796            _marker: PhantomData,
16797        }
16798    }
16799}
16800unsafe impl<'a> TaggedStructure for PipelineTessellationDomainOriginStateCreateInfo<'a> {
16801    const STRUCTURE_TYPE: StructureType =
16802        StructureType::PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO;
16803}
16804unsafe impl ExtendsPipelineTessellationStateCreateInfo
16805    for PipelineTessellationDomainOriginStateCreateInfo<'_>
16806{
16807}
16808impl<'a> PipelineTessellationDomainOriginStateCreateInfo<'a> {
16809    #[inline]
16810    pub fn domain_origin(mut self, domain_origin: TessellationDomainOrigin) -> Self {
16811        self.domain_origin = domain_origin;
16812        self
16813    }
16814}
16815#[repr(C)]
16816#[cfg_attr(feature = "debug", derive(Debug))]
16817#[derive(Copy, Clone)]
16818#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerYcbcrConversionInfo.html>"]
16819#[must_use]
16820pub struct SamplerYcbcrConversionInfo<'a> {
16821    pub s_type: StructureType,
16822    pub p_next: *const c_void,
16823    pub conversion: SamplerYcbcrConversion,
16824    pub _marker: PhantomData<&'a ()>,
16825}
16826unsafe impl Send for SamplerYcbcrConversionInfo<'_> {}
16827unsafe impl Sync for SamplerYcbcrConversionInfo<'_> {}
16828impl ::core::default::Default for SamplerYcbcrConversionInfo<'_> {
16829    #[inline]
16830    fn default() -> Self {
16831        Self {
16832            s_type: Self::STRUCTURE_TYPE,
16833            p_next: ::core::ptr::null(),
16834            conversion: SamplerYcbcrConversion::default(),
16835            _marker: PhantomData,
16836        }
16837    }
16838}
16839unsafe impl<'a> TaggedStructure for SamplerYcbcrConversionInfo<'a> {
16840    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_YCBCR_CONVERSION_INFO;
16841}
16842unsafe impl ExtendsSamplerCreateInfo for SamplerYcbcrConversionInfo<'_> {}
16843unsafe impl ExtendsImageViewCreateInfo for SamplerYcbcrConversionInfo<'_> {}
16844impl<'a> SamplerYcbcrConversionInfo<'a> {
16845    #[inline]
16846    pub fn conversion(mut self, conversion: SamplerYcbcrConversion) -> Self {
16847        self.conversion = conversion;
16848        self
16849    }
16850}
16851#[repr(C)]
16852#[cfg_attr(feature = "debug", derive(Debug))]
16853#[derive(Copy, Clone)]
16854#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerYcbcrConversionCreateInfo.html>"]
16855#[must_use]
16856pub struct SamplerYcbcrConversionCreateInfo<'a> {
16857    pub s_type: StructureType,
16858    pub p_next: *const c_void,
16859    pub format: Format,
16860    pub ycbcr_model: SamplerYcbcrModelConversion,
16861    pub ycbcr_range: SamplerYcbcrRange,
16862    pub components: ComponentMapping,
16863    pub x_chroma_offset: ChromaLocation,
16864    pub y_chroma_offset: ChromaLocation,
16865    pub chroma_filter: Filter,
16866    pub force_explicit_reconstruction: Bool32,
16867    pub _marker: PhantomData<&'a ()>,
16868}
16869unsafe impl Send for SamplerYcbcrConversionCreateInfo<'_> {}
16870unsafe impl Sync for SamplerYcbcrConversionCreateInfo<'_> {}
16871impl ::core::default::Default for SamplerYcbcrConversionCreateInfo<'_> {
16872    #[inline]
16873    fn default() -> Self {
16874        Self {
16875            s_type: Self::STRUCTURE_TYPE,
16876            p_next: ::core::ptr::null(),
16877            format: Format::default(),
16878            ycbcr_model: SamplerYcbcrModelConversion::default(),
16879            ycbcr_range: SamplerYcbcrRange::default(),
16880            components: ComponentMapping::default(),
16881            x_chroma_offset: ChromaLocation::default(),
16882            y_chroma_offset: ChromaLocation::default(),
16883            chroma_filter: Filter::default(),
16884            force_explicit_reconstruction: Bool32::default(),
16885            _marker: PhantomData,
16886        }
16887    }
16888}
16889unsafe impl<'a> TaggedStructure for SamplerYcbcrConversionCreateInfo<'a> {
16890    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_YCBCR_CONVERSION_CREATE_INFO;
16891}
16892pub unsafe trait ExtendsSamplerYcbcrConversionCreateInfo {}
16893impl<'a> SamplerYcbcrConversionCreateInfo<'a> {
16894    #[inline]
16895    pub fn format(mut self, format: Format) -> Self {
16896        self.format = format;
16897        self
16898    }
16899    #[inline]
16900    pub fn ycbcr_model(mut self, ycbcr_model: SamplerYcbcrModelConversion) -> Self {
16901        self.ycbcr_model = ycbcr_model;
16902        self
16903    }
16904    #[inline]
16905    pub fn ycbcr_range(mut self, ycbcr_range: SamplerYcbcrRange) -> Self {
16906        self.ycbcr_range = ycbcr_range;
16907        self
16908    }
16909    #[inline]
16910    pub fn components(mut self, components: ComponentMapping) -> Self {
16911        self.components = components;
16912        self
16913    }
16914    #[inline]
16915    pub fn x_chroma_offset(mut self, x_chroma_offset: ChromaLocation) -> Self {
16916        self.x_chroma_offset = x_chroma_offset;
16917        self
16918    }
16919    #[inline]
16920    pub fn y_chroma_offset(mut self, y_chroma_offset: ChromaLocation) -> Self {
16921        self.y_chroma_offset = y_chroma_offset;
16922        self
16923    }
16924    #[inline]
16925    pub fn chroma_filter(mut self, chroma_filter: Filter) -> Self {
16926        self.chroma_filter = chroma_filter;
16927        self
16928    }
16929    #[inline]
16930    pub fn force_explicit_reconstruction(mut self, force_explicit_reconstruction: bool) -> Self {
16931        self.force_explicit_reconstruction = force_explicit_reconstruction.into();
16932        self
16933    }
16934    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
16935    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
16936    #[doc = r" valid extension structs can be pushed into the chain."]
16937    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
16938    #[doc = r" chain will look like `A -> D -> B -> C`."]
16939    pub fn push_next<T: ExtendsSamplerYcbcrConversionCreateInfo + ?Sized>(
16940        mut self,
16941        next: &'a mut T,
16942    ) -> Self {
16943        unsafe {
16944            let next_ptr = <*const T>::cast(next);
16945            let last_next = ptr_chain_iter(next).last().unwrap();
16946            (*last_next).p_next = self.p_next as _;
16947            self.p_next = next_ptr;
16948        }
16949        self
16950    }
16951}
16952#[repr(C)]
16953#[cfg_attr(feature = "debug", derive(Debug))]
16954#[derive(Copy, Clone)]
16955#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindImagePlaneMemoryInfo.html>"]
16956#[must_use]
16957pub struct BindImagePlaneMemoryInfo<'a> {
16958    pub s_type: StructureType,
16959    pub p_next: *const c_void,
16960    pub plane_aspect: ImageAspectFlags,
16961    pub _marker: PhantomData<&'a ()>,
16962}
16963unsafe impl Send for BindImagePlaneMemoryInfo<'_> {}
16964unsafe impl Sync for BindImagePlaneMemoryInfo<'_> {}
16965impl ::core::default::Default for BindImagePlaneMemoryInfo<'_> {
16966    #[inline]
16967    fn default() -> Self {
16968        Self {
16969            s_type: Self::STRUCTURE_TYPE,
16970            p_next: ::core::ptr::null(),
16971            plane_aspect: ImageAspectFlags::default(),
16972            _marker: PhantomData,
16973        }
16974    }
16975}
16976unsafe impl<'a> TaggedStructure for BindImagePlaneMemoryInfo<'a> {
16977    const STRUCTURE_TYPE: StructureType = StructureType::BIND_IMAGE_PLANE_MEMORY_INFO;
16978}
16979unsafe impl ExtendsBindImageMemoryInfo for BindImagePlaneMemoryInfo<'_> {}
16980impl<'a> BindImagePlaneMemoryInfo<'a> {
16981    #[inline]
16982    pub fn plane_aspect(mut self, plane_aspect: ImageAspectFlags) -> Self {
16983        self.plane_aspect = plane_aspect;
16984        self
16985    }
16986}
16987#[repr(C)]
16988#[cfg_attr(feature = "debug", derive(Debug))]
16989#[derive(Copy, Clone)]
16990#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImagePlaneMemoryRequirementsInfo.html>"]
16991#[must_use]
16992pub struct ImagePlaneMemoryRequirementsInfo<'a> {
16993    pub s_type: StructureType,
16994    pub p_next: *const c_void,
16995    pub plane_aspect: ImageAspectFlags,
16996    pub _marker: PhantomData<&'a ()>,
16997}
16998unsafe impl Send for ImagePlaneMemoryRequirementsInfo<'_> {}
16999unsafe impl Sync for ImagePlaneMemoryRequirementsInfo<'_> {}
17000impl ::core::default::Default for ImagePlaneMemoryRequirementsInfo<'_> {
17001    #[inline]
17002    fn default() -> Self {
17003        Self {
17004            s_type: Self::STRUCTURE_TYPE,
17005            p_next: ::core::ptr::null(),
17006            plane_aspect: ImageAspectFlags::default(),
17007            _marker: PhantomData,
17008        }
17009    }
17010}
17011unsafe impl<'a> TaggedStructure for ImagePlaneMemoryRequirementsInfo<'a> {
17012    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO;
17013}
17014unsafe impl ExtendsImageMemoryRequirementsInfo2 for ImagePlaneMemoryRequirementsInfo<'_> {}
17015impl<'a> ImagePlaneMemoryRequirementsInfo<'a> {
17016    #[inline]
17017    pub fn plane_aspect(mut self, plane_aspect: ImageAspectFlags) -> Self {
17018        self.plane_aspect = plane_aspect;
17019        self
17020    }
17021}
17022#[repr(C)]
17023#[cfg_attr(feature = "debug", derive(Debug))]
17024#[derive(Copy, Clone)]
17025#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSamplerYcbcrConversionFeatures.html>"]
17026#[must_use]
17027pub struct PhysicalDeviceSamplerYcbcrConversionFeatures<'a> {
17028    pub s_type: StructureType,
17029    pub p_next: *mut c_void,
17030    pub sampler_ycbcr_conversion: Bool32,
17031    pub _marker: PhantomData<&'a ()>,
17032}
17033unsafe impl Send for PhysicalDeviceSamplerYcbcrConversionFeatures<'_> {}
17034unsafe impl Sync for PhysicalDeviceSamplerYcbcrConversionFeatures<'_> {}
17035impl ::core::default::Default for PhysicalDeviceSamplerYcbcrConversionFeatures<'_> {
17036    #[inline]
17037    fn default() -> Self {
17038        Self {
17039            s_type: Self::STRUCTURE_TYPE,
17040            p_next: ::core::ptr::null_mut(),
17041            sampler_ycbcr_conversion: Bool32::default(),
17042            _marker: PhantomData,
17043        }
17044    }
17045}
17046unsafe impl<'a> TaggedStructure for PhysicalDeviceSamplerYcbcrConversionFeatures<'a> {
17047    const STRUCTURE_TYPE: StructureType =
17048        StructureType::PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES;
17049}
17050unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSamplerYcbcrConversionFeatures<'_> {}
17051unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSamplerYcbcrConversionFeatures<'_> {}
17052impl<'a> PhysicalDeviceSamplerYcbcrConversionFeatures<'a> {
17053    #[inline]
17054    pub fn sampler_ycbcr_conversion(mut self, sampler_ycbcr_conversion: bool) -> Self {
17055        self.sampler_ycbcr_conversion = sampler_ycbcr_conversion.into();
17056        self
17057    }
17058}
17059#[repr(C)]
17060#[cfg_attr(feature = "debug", derive(Debug))]
17061#[derive(Copy, Clone)]
17062#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerYcbcrConversionImageFormatProperties.html>"]
17063#[must_use]
17064pub struct SamplerYcbcrConversionImageFormatProperties<'a> {
17065    pub s_type: StructureType,
17066    pub p_next: *mut c_void,
17067    pub combined_image_sampler_descriptor_count: u32,
17068    pub _marker: PhantomData<&'a ()>,
17069}
17070unsafe impl Send for SamplerYcbcrConversionImageFormatProperties<'_> {}
17071unsafe impl Sync for SamplerYcbcrConversionImageFormatProperties<'_> {}
17072impl ::core::default::Default for SamplerYcbcrConversionImageFormatProperties<'_> {
17073    #[inline]
17074    fn default() -> Self {
17075        Self {
17076            s_type: Self::STRUCTURE_TYPE,
17077            p_next: ::core::ptr::null_mut(),
17078            combined_image_sampler_descriptor_count: u32::default(),
17079            _marker: PhantomData,
17080        }
17081    }
17082}
17083unsafe impl<'a> TaggedStructure for SamplerYcbcrConversionImageFormatProperties<'a> {
17084    const STRUCTURE_TYPE: StructureType =
17085        StructureType::SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES;
17086}
17087unsafe impl ExtendsImageFormatProperties2 for SamplerYcbcrConversionImageFormatProperties<'_> {}
17088impl<'a> SamplerYcbcrConversionImageFormatProperties<'a> {
17089    #[inline]
17090    pub fn combined_image_sampler_descriptor_count(
17091        mut self,
17092        combined_image_sampler_descriptor_count: u32,
17093    ) -> Self {
17094        self.combined_image_sampler_descriptor_count = combined_image_sampler_descriptor_count;
17095        self
17096    }
17097}
17098#[repr(C)]
17099#[cfg_attr(feature = "debug", derive(Debug))]
17100#[derive(Copy, Clone)]
17101#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTextureLODGatherFormatPropertiesAMD.html>"]
17102#[must_use]
17103pub struct TextureLODGatherFormatPropertiesAMD<'a> {
17104    pub s_type: StructureType,
17105    pub p_next: *mut c_void,
17106    pub supports_texture_gather_lod_bias_amd: Bool32,
17107    pub _marker: PhantomData<&'a ()>,
17108}
17109unsafe impl Send for TextureLODGatherFormatPropertiesAMD<'_> {}
17110unsafe impl Sync for TextureLODGatherFormatPropertiesAMD<'_> {}
17111impl ::core::default::Default for TextureLODGatherFormatPropertiesAMD<'_> {
17112    #[inline]
17113    fn default() -> Self {
17114        Self {
17115            s_type: Self::STRUCTURE_TYPE,
17116            p_next: ::core::ptr::null_mut(),
17117            supports_texture_gather_lod_bias_amd: Bool32::default(),
17118            _marker: PhantomData,
17119        }
17120    }
17121}
17122unsafe impl<'a> TaggedStructure for TextureLODGatherFormatPropertiesAMD<'a> {
17123    const STRUCTURE_TYPE: StructureType = StructureType::TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD;
17124}
17125unsafe impl ExtendsImageFormatProperties2 for TextureLODGatherFormatPropertiesAMD<'_> {}
17126impl<'a> TextureLODGatherFormatPropertiesAMD<'a> {
17127    #[inline]
17128    pub fn supports_texture_gather_lod_bias_amd(
17129        mut self,
17130        supports_texture_gather_lod_bias_amd: bool,
17131    ) -> Self {
17132        self.supports_texture_gather_lod_bias_amd = supports_texture_gather_lod_bias_amd.into();
17133        self
17134    }
17135}
17136#[repr(C)]
17137#[cfg_attr(feature = "debug", derive(Debug))]
17138#[derive(Copy, Clone)]
17139#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkConditionalRenderingBeginInfoEXT.html>"]
17140#[must_use]
17141pub struct ConditionalRenderingBeginInfoEXT<'a> {
17142    pub s_type: StructureType,
17143    pub p_next: *const c_void,
17144    pub buffer: Buffer,
17145    pub offset: DeviceSize,
17146    pub flags: ConditionalRenderingFlagsEXT,
17147    pub _marker: PhantomData<&'a ()>,
17148}
17149unsafe impl Send for ConditionalRenderingBeginInfoEXT<'_> {}
17150unsafe impl Sync for ConditionalRenderingBeginInfoEXT<'_> {}
17151impl ::core::default::Default for ConditionalRenderingBeginInfoEXT<'_> {
17152    #[inline]
17153    fn default() -> Self {
17154        Self {
17155            s_type: Self::STRUCTURE_TYPE,
17156            p_next: ::core::ptr::null(),
17157            buffer: Buffer::default(),
17158            offset: DeviceSize::default(),
17159            flags: ConditionalRenderingFlagsEXT::default(),
17160            _marker: PhantomData,
17161        }
17162    }
17163}
17164unsafe impl<'a> TaggedStructure for ConditionalRenderingBeginInfoEXT<'a> {
17165    const STRUCTURE_TYPE: StructureType = StructureType::CONDITIONAL_RENDERING_BEGIN_INFO_EXT;
17166}
17167impl<'a> ConditionalRenderingBeginInfoEXT<'a> {
17168    #[inline]
17169    pub fn buffer(mut self, buffer: Buffer) -> Self {
17170        self.buffer = buffer;
17171        self
17172    }
17173    #[inline]
17174    pub fn offset(mut self, offset: DeviceSize) -> Self {
17175        self.offset = offset;
17176        self
17177    }
17178    #[inline]
17179    pub fn flags(mut self, flags: ConditionalRenderingFlagsEXT) -> Self {
17180        self.flags = flags;
17181        self
17182    }
17183}
17184#[repr(C)]
17185#[cfg_attr(feature = "debug", derive(Debug))]
17186#[derive(Copy, Clone)]
17187#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkProtectedSubmitInfo.html>"]
17188#[must_use]
17189pub struct ProtectedSubmitInfo<'a> {
17190    pub s_type: StructureType,
17191    pub p_next: *const c_void,
17192    pub protected_submit: Bool32,
17193    pub _marker: PhantomData<&'a ()>,
17194}
17195unsafe impl Send for ProtectedSubmitInfo<'_> {}
17196unsafe impl Sync for ProtectedSubmitInfo<'_> {}
17197impl ::core::default::Default for ProtectedSubmitInfo<'_> {
17198    #[inline]
17199    fn default() -> Self {
17200        Self {
17201            s_type: Self::STRUCTURE_TYPE,
17202            p_next: ::core::ptr::null(),
17203            protected_submit: Bool32::default(),
17204            _marker: PhantomData,
17205        }
17206    }
17207}
17208unsafe impl<'a> TaggedStructure for ProtectedSubmitInfo<'a> {
17209    const STRUCTURE_TYPE: StructureType = StructureType::PROTECTED_SUBMIT_INFO;
17210}
17211unsafe impl ExtendsSubmitInfo for ProtectedSubmitInfo<'_> {}
17212impl<'a> ProtectedSubmitInfo<'a> {
17213    #[inline]
17214    pub fn protected_submit(mut self, protected_submit: bool) -> Self {
17215        self.protected_submit = protected_submit.into();
17216        self
17217    }
17218}
17219#[repr(C)]
17220#[cfg_attr(feature = "debug", derive(Debug))]
17221#[derive(Copy, Clone)]
17222#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProtectedMemoryFeatures.html>"]
17223#[must_use]
17224pub struct PhysicalDeviceProtectedMemoryFeatures<'a> {
17225    pub s_type: StructureType,
17226    pub p_next: *mut c_void,
17227    pub protected_memory: Bool32,
17228    pub _marker: PhantomData<&'a ()>,
17229}
17230unsafe impl Send for PhysicalDeviceProtectedMemoryFeatures<'_> {}
17231unsafe impl Sync for PhysicalDeviceProtectedMemoryFeatures<'_> {}
17232impl ::core::default::Default for PhysicalDeviceProtectedMemoryFeatures<'_> {
17233    #[inline]
17234    fn default() -> Self {
17235        Self {
17236            s_type: Self::STRUCTURE_TYPE,
17237            p_next: ::core::ptr::null_mut(),
17238            protected_memory: Bool32::default(),
17239            _marker: PhantomData,
17240        }
17241    }
17242}
17243unsafe impl<'a> TaggedStructure for PhysicalDeviceProtectedMemoryFeatures<'a> {
17244    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES;
17245}
17246unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceProtectedMemoryFeatures<'_> {}
17247unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceProtectedMemoryFeatures<'_> {}
17248impl<'a> PhysicalDeviceProtectedMemoryFeatures<'a> {
17249    #[inline]
17250    pub fn protected_memory(mut self, protected_memory: bool) -> Self {
17251        self.protected_memory = protected_memory.into();
17252        self
17253    }
17254}
17255#[repr(C)]
17256#[cfg_attr(feature = "debug", derive(Debug))]
17257#[derive(Copy, Clone)]
17258#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProtectedMemoryProperties.html>"]
17259#[must_use]
17260pub struct PhysicalDeviceProtectedMemoryProperties<'a> {
17261    pub s_type: StructureType,
17262    pub p_next: *mut c_void,
17263    pub protected_no_fault: Bool32,
17264    pub _marker: PhantomData<&'a ()>,
17265}
17266unsafe impl Send for PhysicalDeviceProtectedMemoryProperties<'_> {}
17267unsafe impl Sync for PhysicalDeviceProtectedMemoryProperties<'_> {}
17268impl ::core::default::Default for PhysicalDeviceProtectedMemoryProperties<'_> {
17269    #[inline]
17270    fn default() -> Self {
17271        Self {
17272            s_type: Self::STRUCTURE_TYPE,
17273            p_next: ::core::ptr::null_mut(),
17274            protected_no_fault: Bool32::default(),
17275            _marker: PhantomData,
17276        }
17277    }
17278}
17279unsafe impl<'a> TaggedStructure for PhysicalDeviceProtectedMemoryProperties<'a> {
17280    const STRUCTURE_TYPE: StructureType =
17281        StructureType::PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES;
17282}
17283unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceProtectedMemoryProperties<'_> {}
17284impl<'a> PhysicalDeviceProtectedMemoryProperties<'a> {
17285    #[inline]
17286    pub fn protected_no_fault(mut self, protected_no_fault: bool) -> Self {
17287        self.protected_no_fault = protected_no_fault.into();
17288        self
17289    }
17290}
17291#[repr(C)]
17292#[cfg_attr(feature = "debug", derive(Debug))]
17293#[derive(Copy, Clone)]
17294#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceQueueInfo2.html>"]
17295#[must_use]
17296pub struct DeviceQueueInfo2<'a> {
17297    pub s_type: StructureType,
17298    pub p_next: *const c_void,
17299    pub flags: DeviceQueueCreateFlags,
17300    pub queue_family_index: u32,
17301    pub queue_index: u32,
17302    pub _marker: PhantomData<&'a ()>,
17303}
17304unsafe impl Send for DeviceQueueInfo2<'_> {}
17305unsafe impl Sync for DeviceQueueInfo2<'_> {}
17306impl ::core::default::Default for DeviceQueueInfo2<'_> {
17307    #[inline]
17308    fn default() -> Self {
17309        Self {
17310            s_type: Self::STRUCTURE_TYPE,
17311            p_next: ::core::ptr::null(),
17312            flags: DeviceQueueCreateFlags::default(),
17313            queue_family_index: u32::default(),
17314            queue_index: u32::default(),
17315            _marker: PhantomData,
17316        }
17317    }
17318}
17319unsafe impl<'a> TaggedStructure for DeviceQueueInfo2<'a> {
17320    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_QUEUE_INFO_2;
17321}
17322impl<'a> DeviceQueueInfo2<'a> {
17323    #[inline]
17324    pub fn flags(mut self, flags: DeviceQueueCreateFlags) -> Self {
17325        self.flags = flags;
17326        self
17327    }
17328    #[inline]
17329    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
17330        self.queue_family_index = queue_family_index;
17331        self
17332    }
17333    #[inline]
17334    pub fn queue_index(mut self, queue_index: u32) -> Self {
17335        self.queue_index = queue_index;
17336        self
17337    }
17338}
17339#[repr(C)]
17340#[cfg_attr(feature = "debug", derive(Debug))]
17341#[derive(Copy, Clone)]
17342#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageToColorStateCreateInfoNV.html>"]
17343#[must_use]
17344pub struct PipelineCoverageToColorStateCreateInfoNV<'a> {
17345    pub s_type: StructureType,
17346    pub p_next: *const c_void,
17347    pub flags: PipelineCoverageToColorStateCreateFlagsNV,
17348    pub coverage_to_color_enable: Bool32,
17349    pub coverage_to_color_location: u32,
17350    pub _marker: PhantomData<&'a ()>,
17351}
17352unsafe impl Send for PipelineCoverageToColorStateCreateInfoNV<'_> {}
17353unsafe impl Sync for PipelineCoverageToColorStateCreateInfoNV<'_> {}
17354impl ::core::default::Default for PipelineCoverageToColorStateCreateInfoNV<'_> {
17355    #[inline]
17356    fn default() -> Self {
17357        Self {
17358            s_type: Self::STRUCTURE_TYPE,
17359            p_next: ::core::ptr::null(),
17360            flags: PipelineCoverageToColorStateCreateFlagsNV::default(),
17361            coverage_to_color_enable: Bool32::default(),
17362            coverage_to_color_location: u32::default(),
17363            _marker: PhantomData,
17364        }
17365    }
17366}
17367unsafe impl<'a> TaggedStructure for PipelineCoverageToColorStateCreateInfoNV<'a> {
17368    const STRUCTURE_TYPE: StructureType =
17369        StructureType::PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV;
17370}
17371unsafe impl ExtendsPipelineMultisampleStateCreateInfo
17372    for PipelineCoverageToColorStateCreateInfoNV<'_>
17373{
17374}
17375impl<'a> PipelineCoverageToColorStateCreateInfoNV<'a> {
17376    #[inline]
17377    pub fn flags(mut self, flags: PipelineCoverageToColorStateCreateFlagsNV) -> Self {
17378        self.flags = flags;
17379        self
17380    }
17381    #[inline]
17382    pub fn coverage_to_color_enable(mut self, coverage_to_color_enable: bool) -> Self {
17383        self.coverage_to_color_enable = coverage_to_color_enable.into();
17384        self
17385    }
17386    #[inline]
17387    pub fn coverage_to_color_location(mut self, coverage_to_color_location: u32) -> Self {
17388        self.coverage_to_color_location = coverage_to_color_location;
17389        self
17390    }
17391}
17392#[repr(C)]
17393#[cfg_attr(feature = "debug", derive(Debug))]
17394#[derive(Copy, Clone)]
17395#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSamplerFilterMinmaxProperties.html>"]
17396#[must_use]
17397pub struct PhysicalDeviceSamplerFilterMinmaxProperties<'a> {
17398    pub s_type: StructureType,
17399    pub p_next: *mut c_void,
17400    pub filter_minmax_single_component_formats: Bool32,
17401    pub filter_minmax_image_component_mapping: Bool32,
17402    pub _marker: PhantomData<&'a ()>,
17403}
17404unsafe impl Send for PhysicalDeviceSamplerFilterMinmaxProperties<'_> {}
17405unsafe impl Sync for PhysicalDeviceSamplerFilterMinmaxProperties<'_> {}
17406impl ::core::default::Default for PhysicalDeviceSamplerFilterMinmaxProperties<'_> {
17407    #[inline]
17408    fn default() -> Self {
17409        Self {
17410            s_type: Self::STRUCTURE_TYPE,
17411            p_next: ::core::ptr::null_mut(),
17412            filter_minmax_single_component_formats: Bool32::default(),
17413            filter_minmax_image_component_mapping: Bool32::default(),
17414            _marker: PhantomData,
17415        }
17416    }
17417}
17418unsafe impl<'a> TaggedStructure for PhysicalDeviceSamplerFilterMinmaxProperties<'a> {
17419    const STRUCTURE_TYPE: StructureType =
17420        StructureType::PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES;
17421}
17422unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSamplerFilterMinmaxProperties<'_> {}
17423impl<'a> PhysicalDeviceSamplerFilterMinmaxProperties<'a> {
17424    #[inline]
17425    pub fn filter_minmax_single_component_formats(
17426        mut self,
17427        filter_minmax_single_component_formats: bool,
17428    ) -> Self {
17429        self.filter_minmax_single_component_formats = filter_minmax_single_component_formats.into();
17430        self
17431    }
17432    #[inline]
17433    pub fn filter_minmax_image_component_mapping(
17434        mut self,
17435        filter_minmax_image_component_mapping: bool,
17436    ) -> Self {
17437        self.filter_minmax_image_component_mapping = filter_minmax_image_component_mapping.into();
17438        self
17439    }
17440}
17441#[repr(C)]
17442#[cfg_attr(feature = "debug", derive(Debug))]
17443#[derive(Copy, Clone, Default)]
17444#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSampleLocationEXT.html>"]
17445#[must_use]
17446pub struct SampleLocationEXT {
17447    pub x: f32,
17448    pub y: f32,
17449}
17450impl SampleLocationEXT {
17451    #[inline]
17452    pub fn x(mut self, x: f32) -> Self {
17453        self.x = x;
17454        self
17455    }
17456    #[inline]
17457    pub fn y(mut self, y: f32) -> Self {
17458        self.y = y;
17459        self
17460    }
17461}
17462#[repr(C)]
17463#[cfg_attr(feature = "debug", derive(Debug))]
17464#[derive(Copy, Clone)]
17465#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSampleLocationsInfoEXT.html>"]
17466#[must_use]
17467pub struct SampleLocationsInfoEXT<'a> {
17468    pub s_type: StructureType,
17469    pub p_next: *const c_void,
17470    pub sample_locations_per_pixel: SampleCountFlags,
17471    pub sample_location_grid_size: Extent2D,
17472    pub sample_locations_count: u32,
17473    pub p_sample_locations: *const SampleLocationEXT,
17474    pub _marker: PhantomData<&'a ()>,
17475}
17476unsafe impl Send for SampleLocationsInfoEXT<'_> {}
17477unsafe impl Sync for SampleLocationsInfoEXT<'_> {}
17478impl ::core::default::Default for SampleLocationsInfoEXT<'_> {
17479    #[inline]
17480    fn default() -> Self {
17481        Self {
17482            s_type: Self::STRUCTURE_TYPE,
17483            p_next: ::core::ptr::null(),
17484            sample_locations_per_pixel: SampleCountFlags::default(),
17485            sample_location_grid_size: Extent2D::default(),
17486            sample_locations_count: u32::default(),
17487            p_sample_locations: ::core::ptr::null(),
17488            _marker: PhantomData,
17489        }
17490    }
17491}
17492unsafe impl<'a> TaggedStructure for SampleLocationsInfoEXT<'a> {
17493    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLE_LOCATIONS_INFO_EXT;
17494}
17495unsafe impl ExtendsImageMemoryBarrier for SampleLocationsInfoEXT<'_> {}
17496unsafe impl ExtendsImageMemoryBarrier2 for SampleLocationsInfoEXT<'_> {}
17497impl<'a> SampleLocationsInfoEXT<'a> {
17498    #[inline]
17499    pub fn sample_locations_per_pixel(
17500        mut self,
17501        sample_locations_per_pixel: SampleCountFlags,
17502    ) -> Self {
17503        self.sample_locations_per_pixel = sample_locations_per_pixel;
17504        self
17505    }
17506    #[inline]
17507    pub fn sample_location_grid_size(mut self, sample_location_grid_size: Extent2D) -> Self {
17508        self.sample_location_grid_size = sample_location_grid_size;
17509        self
17510    }
17511    #[inline]
17512    pub fn sample_locations(mut self, sample_locations: &'a [SampleLocationEXT]) -> Self {
17513        self.sample_locations_count = sample_locations.len() as _;
17514        self.p_sample_locations = sample_locations.as_ptr();
17515        self
17516    }
17517}
17518#[repr(C)]
17519#[cfg_attr(feature = "debug", derive(Debug))]
17520#[derive(Copy, Clone, Default)]
17521#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentSampleLocationsEXT.html>"]
17522#[must_use]
17523pub struct AttachmentSampleLocationsEXT<'a> {
17524    pub attachment_index: u32,
17525    pub sample_locations_info: SampleLocationsInfoEXT<'a>,
17526    pub _marker: PhantomData<&'a ()>,
17527}
17528impl<'a> AttachmentSampleLocationsEXT<'a> {
17529    #[inline]
17530    pub fn attachment_index(mut self, attachment_index: u32) -> Self {
17531        self.attachment_index = attachment_index;
17532        self
17533    }
17534    #[inline]
17535    pub fn sample_locations_info(
17536        mut self,
17537        sample_locations_info: SampleLocationsInfoEXT<'a>,
17538    ) -> Self {
17539        self.sample_locations_info = sample_locations_info;
17540        self
17541    }
17542}
17543#[repr(C)]
17544#[cfg_attr(feature = "debug", derive(Debug))]
17545#[derive(Copy, Clone, Default)]
17546#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassSampleLocationsEXT.html>"]
17547#[must_use]
17548pub struct SubpassSampleLocationsEXT<'a> {
17549    pub subpass_index: u32,
17550    pub sample_locations_info: SampleLocationsInfoEXT<'a>,
17551    pub _marker: PhantomData<&'a ()>,
17552}
17553impl<'a> SubpassSampleLocationsEXT<'a> {
17554    #[inline]
17555    pub fn subpass_index(mut self, subpass_index: u32) -> Self {
17556        self.subpass_index = subpass_index;
17557        self
17558    }
17559    #[inline]
17560    pub fn sample_locations_info(
17561        mut self,
17562        sample_locations_info: SampleLocationsInfoEXT<'a>,
17563    ) -> Self {
17564        self.sample_locations_info = sample_locations_info;
17565        self
17566    }
17567}
17568#[repr(C)]
17569#[cfg_attr(feature = "debug", derive(Debug))]
17570#[derive(Copy, Clone)]
17571#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassSampleLocationsBeginInfoEXT.html>"]
17572#[must_use]
17573pub struct RenderPassSampleLocationsBeginInfoEXT<'a> {
17574    pub s_type: StructureType,
17575    pub p_next: *const c_void,
17576    pub attachment_initial_sample_locations_count: u32,
17577    pub p_attachment_initial_sample_locations: *const AttachmentSampleLocationsEXT<'a>,
17578    pub post_subpass_sample_locations_count: u32,
17579    pub p_post_subpass_sample_locations: *const SubpassSampleLocationsEXT<'a>,
17580    pub _marker: PhantomData<&'a ()>,
17581}
17582unsafe impl Send for RenderPassSampleLocationsBeginInfoEXT<'_> {}
17583unsafe impl Sync for RenderPassSampleLocationsBeginInfoEXT<'_> {}
17584impl ::core::default::Default for RenderPassSampleLocationsBeginInfoEXT<'_> {
17585    #[inline]
17586    fn default() -> Self {
17587        Self {
17588            s_type: Self::STRUCTURE_TYPE,
17589            p_next: ::core::ptr::null(),
17590            attachment_initial_sample_locations_count: u32::default(),
17591            p_attachment_initial_sample_locations: ::core::ptr::null(),
17592            post_subpass_sample_locations_count: u32::default(),
17593            p_post_subpass_sample_locations: ::core::ptr::null(),
17594            _marker: PhantomData,
17595        }
17596    }
17597}
17598unsafe impl<'a> TaggedStructure for RenderPassSampleLocationsBeginInfoEXT<'a> {
17599    const STRUCTURE_TYPE: StructureType =
17600        StructureType::RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT;
17601}
17602unsafe impl ExtendsRenderPassBeginInfo for RenderPassSampleLocationsBeginInfoEXT<'_> {}
17603impl<'a> RenderPassSampleLocationsBeginInfoEXT<'a> {
17604    #[inline]
17605    pub fn attachment_initial_sample_locations(
17606        mut self,
17607        attachment_initial_sample_locations: &'a [AttachmentSampleLocationsEXT<'a>],
17608    ) -> Self {
17609        self.attachment_initial_sample_locations_count =
17610            attachment_initial_sample_locations.len() as _;
17611        self.p_attachment_initial_sample_locations = attachment_initial_sample_locations.as_ptr();
17612        self
17613    }
17614    #[inline]
17615    pub fn post_subpass_sample_locations(
17616        mut self,
17617        post_subpass_sample_locations: &'a [SubpassSampleLocationsEXT<'a>],
17618    ) -> Self {
17619        self.post_subpass_sample_locations_count = post_subpass_sample_locations.len() as _;
17620        self.p_post_subpass_sample_locations = post_subpass_sample_locations.as_ptr();
17621        self
17622    }
17623}
17624#[repr(C)]
17625#[cfg_attr(feature = "debug", derive(Debug))]
17626#[derive(Copy, Clone)]
17627#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineSampleLocationsStateCreateInfoEXT.html>"]
17628#[must_use]
17629pub struct PipelineSampleLocationsStateCreateInfoEXT<'a> {
17630    pub s_type: StructureType,
17631    pub p_next: *const c_void,
17632    pub sample_locations_enable: Bool32,
17633    pub sample_locations_info: SampleLocationsInfoEXT<'a>,
17634    pub _marker: PhantomData<&'a ()>,
17635}
17636unsafe impl Send for PipelineSampleLocationsStateCreateInfoEXT<'_> {}
17637unsafe impl Sync for PipelineSampleLocationsStateCreateInfoEXT<'_> {}
17638impl ::core::default::Default for PipelineSampleLocationsStateCreateInfoEXT<'_> {
17639    #[inline]
17640    fn default() -> Self {
17641        Self {
17642            s_type: Self::STRUCTURE_TYPE,
17643            p_next: ::core::ptr::null(),
17644            sample_locations_enable: Bool32::default(),
17645            sample_locations_info: SampleLocationsInfoEXT::default(),
17646            _marker: PhantomData,
17647        }
17648    }
17649}
17650unsafe impl<'a> TaggedStructure for PipelineSampleLocationsStateCreateInfoEXT<'a> {
17651    const STRUCTURE_TYPE: StructureType =
17652        StructureType::PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT;
17653}
17654unsafe impl ExtendsPipelineMultisampleStateCreateInfo
17655    for PipelineSampleLocationsStateCreateInfoEXT<'_>
17656{
17657}
17658impl<'a> PipelineSampleLocationsStateCreateInfoEXT<'a> {
17659    #[inline]
17660    pub fn sample_locations_enable(mut self, sample_locations_enable: bool) -> Self {
17661        self.sample_locations_enable = sample_locations_enable.into();
17662        self
17663    }
17664    #[inline]
17665    pub fn sample_locations_info(
17666        mut self,
17667        sample_locations_info: SampleLocationsInfoEXT<'a>,
17668    ) -> Self {
17669        self.sample_locations_info = sample_locations_info;
17670        self
17671    }
17672}
17673#[repr(C)]
17674#[cfg_attr(feature = "debug", derive(Debug))]
17675#[derive(Copy, Clone)]
17676#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSampleLocationsPropertiesEXT.html>"]
17677#[must_use]
17678pub struct PhysicalDeviceSampleLocationsPropertiesEXT<'a> {
17679    pub s_type: StructureType,
17680    pub p_next: *mut c_void,
17681    pub sample_location_sample_counts: SampleCountFlags,
17682    pub max_sample_location_grid_size: Extent2D,
17683    pub sample_location_coordinate_range: [f32; 2],
17684    pub sample_location_sub_pixel_bits: u32,
17685    pub variable_sample_locations: Bool32,
17686    pub _marker: PhantomData<&'a ()>,
17687}
17688unsafe impl Send for PhysicalDeviceSampleLocationsPropertiesEXT<'_> {}
17689unsafe impl Sync for PhysicalDeviceSampleLocationsPropertiesEXT<'_> {}
17690impl ::core::default::Default for PhysicalDeviceSampleLocationsPropertiesEXT<'_> {
17691    #[inline]
17692    fn default() -> Self {
17693        Self {
17694            s_type: Self::STRUCTURE_TYPE,
17695            p_next: ::core::ptr::null_mut(),
17696            sample_location_sample_counts: SampleCountFlags::default(),
17697            max_sample_location_grid_size: Extent2D::default(),
17698            sample_location_coordinate_range: unsafe { ::core::mem::zeroed() },
17699            sample_location_sub_pixel_bits: u32::default(),
17700            variable_sample_locations: Bool32::default(),
17701            _marker: PhantomData,
17702        }
17703    }
17704}
17705unsafe impl<'a> TaggedStructure for PhysicalDeviceSampleLocationsPropertiesEXT<'a> {
17706    const STRUCTURE_TYPE: StructureType =
17707        StructureType::PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT;
17708}
17709unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSampleLocationsPropertiesEXT<'_> {}
17710impl<'a> PhysicalDeviceSampleLocationsPropertiesEXT<'a> {
17711    #[inline]
17712    pub fn sample_location_sample_counts(
17713        mut self,
17714        sample_location_sample_counts: SampleCountFlags,
17715    ) -> Self {
17716        self.sample_location_sample_counts = sample_location_sample_counts;
17717        self
17718    }
17719    #[inline]
17720    pub fn max_sample_location_grid_size(
17721        mut self,
17722        max_sample_location_grid_size: Extent2D,
17723    ) -> Self {
17724        self.max_sample_location_grid_size = max_sample_location_grid_size;
17725        self
17726    }
17727    #[inline]
17728    pub fn sample_location_coordinate_range(
17729        mut self,
17730        sample_location_coordinate_range: [f32; 2],
17731    ) -> Self {
17732        self.sample_location_coordinate_range = sample_location_coordinate_range;
17733        self
17734    }
17735    #[inline]
17736    pub fn sample_location_sub_pixel_bits(mut self, sample_location_sub_pixel_bits: u32) -> Self {
17737        self.sample_location_sub_pixel_bits = sample_location_sub_pixel_bits;
17738        self
17739    }
17740    #[inline]
17741    pub fn variable_sample_locations(mut self, variable_sample_locations: bool) -> Self {
17742        self.variable_sample_locations = variable_sample_locations.into();
17743        self
17744    }
17745}
17746#[repr(C)]
17747#[cfg_attr(feature = "debug", derive(Debug))]
17748#[derive(Copy, Clone)]
17749#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultisamplePropertiesEXT.html>"]
17750#[must_use]
17751pub struct MultisamplePropertiesEXT<'a> {
17752    pub s_type: StructureType,
17753    pub p_next: *mut c_void,
17754    pub max_sample_location_grid_size: Extent2D,
17755    pub _marker: PhantomData<&'a ()>,
17756}
17757unsafe impl Send for MultisamplePropertiesEXT<'_> {}
17758unsafe impl Sync for MultisamplePropertiesEXT<'_> {}
17759impl ::core::default::Default for MultisamplePropertiesEXT<'_> {
17760    #[inline]
17761    fn default() -> Self {
17762        Self {
17763            s_type: Self::STRUCTURE_TYPE,
17764            p_next: ::core::ptr::null_mut(),
17765            max_sample_location_grid_size: Extent2D::default(),
17766            _marker: PhantomData,
17767        }
17768    }
17769}
17770unsafe impl<'a> TaggedStructure for MultisamplePropertiesEXT<'a> {
17771    const STRUCTURE_TYPE: StructureType = StructureType::MULTISAMPLE_PROPERTIES_EXT;
17772}
17773impl<'a> MultisamplePropertiesEXT<'a> {
17774    #[inline]
17775    pub fn max_sample_location_grid_size(
17776        mut self,
17777        max_sample_location_grid_size: Extent2D,
17778    ) -> Self {
17779        self.max_sample_location_grid_size = max_sample_location_grid_size;
17780        self
17781    }
17782}
17783#[repr(C)]
17784#[cfg_attr(feature = "debug", derive(Debug))]
17785#[derive(Copy, Clone)]
17786#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerReductionModeCreateInfo.html>"]
17787#[must_use]
17788pub struct SamplerReductionModeCreateInfo<'a> {
17789    pub s_type: StructureType,
17790    pub p_next: *const c_void,
17791    pub reduction_mode: SamplerReductionMode,
17792    pub _marker: PhantomData<&'a ()>,
17793}
17794unsafe impl Send for SamplerReductionModeCreateInfo<'_> {}
17795unsafe impl Sync for SamplerReductionModeCreateInfo<'_> {}
17796impl ::core::default::Default for SamplerReductionModeCreateInfo<'_> {
17797    #[inline]
17798    fn default() -> Self {
17799        Self {
17800            s_type: Self::STRUCTURE_TYPE,
17801            p_next: ::core::ptr::null(),
17802            reduction_mode: SamplerReductionMode::default(),
17803            _marker: PhantomData,
17804        }
17805    }
17806}
17807unsafe impl<'a> TaggedStructure for SamplerReductionModeCreateInfo<'a> {
17808    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_REDUCTION_MODE_CREATE_INFO;
17809}
17810unsafe impl ExtendsSamplerCreateInfo for SamplerReductionModeCreateInfo<'_> {}
17811impl<'a> SamplerReductionModeCreateInfo<'a> {
17812    #[inline]
17813    pub fn reduction_mode(mut self, reduction_mode: SamplerReductionMode) -> Self {
17814        self.reduction_mode = reduction_mode;
17815        self
17816    }
17817}
17818#[repr(C)]
17819#[cfg_attr(feature = "debug", derive(Debug))]
17820#[derive(Copy, Clone)]
17821#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT.html>"]
17822#[must_use]
17823pub struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'a> {
17824    pub s_type: StructureType,
17825    pub p_next: *mut c_void,
17826    pub advanced_blend_coherent_operations: Bool32,
17827    pub _marker: PhantomData<&'a ()>,
17828}
17829unsafe impl Send for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'_> {}
17830unsafe impl Sync for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'_> {}
17831impl ::core::default::Default for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'_> {
17832    #[inline]
17833    fn default() -> Self {
17834        Self {
17835            s_type: Self::STRUCTURE_TYPE,
17836            p_next: ::core::ptr::null_mut(),
17837            advanced_blend_coherent_operations: Bool32::default(),
17838            _marker: PhantomData,
17839        }
17840    }
17841}
17842unsafe impl<'a> TaggedStructure for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'a> {
17843    const STRUCTURE_TYPE: StructureType =
17844        StructureType::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT;
17845}
17846unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'_> {}
17847unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'_> {}
17848impl<'a> PhysicalDeviceBlendOperationAdvancedFeaturesEXT<'a> {
17849    #[inline]
17850    pub fn advanced_blend_coherent_operations(
17851        mut self,
17852        advanced_blend_coherent_operations: bool,
17853    ) -> Self {
17854        self.advanced_blend_coherent_operations = advanced_blend_coherent_operations.into();
17855        self
17856    }
17857}
17858#[repr(C)]
17859#[cfg_attr(feature = "debug", derive(Debug))]
17860#[derive(Copy, Clone)]
17861#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiDrawFeaturesEXT.html>"]
17862#[must_use]
17863pub struct PhysicalDeviceMultiDrawFeaturesEXT<'a> {
17864    pub s_type: StructureType,
17865    pub p_next: *mut c_void,
17866    pub multi_draw: Bool32,
17867    pub _marker: PhantomData<&'a ()>,
17868}
17869unsafe impl Send for PhysicalDeviceMultiDrawFeaturesEXT<'_> {}
17870unsafe impl Sync for PhysicalDeviceMultiDrawFeaturesEXT<'_> {}
17871impl ::core::default::Default for PhysicalDeviceMultiDrawFeaturesEXT<'_> {
17872    #[inline]
17873    fn default() -> Self {
17874        Self {
17875            s_type: Self::STRUCTURE_TYPE,
17876            p_next: ::core::ptr::null_mut(),
17877            multi_draw: Bool32::default(),
17878            _marker: PhantomData,
17879        }
17880    }
17881}
17882unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiDrawFeaturesEXT<'a> {
17883    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT;
17884}
17885unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMultiDrawFeaturesEXT<'_> {}
17886unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMultiDrawFeaturesEXT<'_> {}
17887impl<'a> PhysicalDeviceMultiDrawFeaturesEXT<'a> {
17888    #[inline]
17889    pub fn multi_draw(mut self, multi_draw: bool) -> Self {
17890        self.multi_draw = multi_draw.into();
17891        self
17892    }
17893}
17894#[repr(C)]
17895#[cfg_attr(feature = "debug", derive(Debug))]
17896#[derive(Copy, Clone)]
17897#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT.html>"]
17898#[must_use]
17899pub struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'a> {
17900    pub s_type: StructureType,
17901    pub p_next: *mut c_void,
17902    pub advanced_blend_max_color_attachments: u32,
17903    pub advanced_blend_independent_blend: Bool32,
17904    pub advanced_blend_non_premultiplied_src_color: Bool32,
17905    pub advanced_blend_non_premultiplied_dst_color: Bool32,
17906    pub advanced_blend_correlated_overlap: Bool32,
17907    pub advanced_blend_all_operations: Bool32,
17908    pub _marker: PhantomData<&'a ()>,
17909}
17910unsafe impl Send for PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'_> {}
17911unsafe impl Sync for PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'_> {}
17912impl ::core::default::Default for PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'_> {
17913    #[inline]
17914    fn default() -> Self {
17915        Self {
17916            s_type: Self::STRUCTURE_TYPE,
17917            p_next: ::core::ptr::null_mut(),
17918            advanced_blend_max_color_attachments: u32::default(),
17919            advanced_blend_independent_blend: Bool32::default(),
17920            advanced_blend_non_premultiplied_src_color: Bool32::default(),
17921            advanced_blend_non_premultiplied_dst_color: Bool32::default(),
17922            advanced_blend_correlated_overlap: Bool32::default(),
17923            advanced_blend_all_operations: Bool32::default(),
17924            _marker: PhantomData,
17925        }
17926    }
17927}
17928unsafe impl<'a> TaggedStructure for PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'a> {
17929    const STRUCTURE_TYPE: StructureType =
17930        StructureType::PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT;
17931}
17932unsafe impl ExtendsPhysicalDeviceProperties2
17933    for PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'_>
17934{
17935}
17936impl<'a> PhysicalDeviceBlendOperationAdvancedPropertiesEXT<'a> {
17937    #[inline]
17938    pub fn advanced_blend_max_color_attachments(
17939        mut self,
17940        advanced_blend_max_color_attachments: u32,
17941    ) -> Self {
17942        self.advanced_blend_max_color_attachments = advanced_blend_max_color_attachments;
17943        self
17944    }
17945    #[inline]
17946    pub fn advanced_blend_independent_blend(
17947        mut self,
17948        advanced_blend_independent_blend: bool,
17949    ) -> Self {
17950        self.advanced_blend_independent_blend = advanced_blend_independent_blend.into();
17951        self
17952    }
17953    #[inline]
17954    pub fn advanced_blend_non_premultiplied_src_color(
17955        mut self,
17956        advanced_blend_non_premultiplied_src_color: bool,
17957    ) -> Self {
17958        self.advanced_blend_non_premultiplied_src_color =
17959            advanced_blend_non_premultiplied_src_color.into();
17960        self
17961    }
17962    #[inline]
17963    pub fn advanced_blend_non_premultiplied_dst_color(
17964        mut self,
17965        advanced_blend_non_premultiplied_dst_color: bool,
17966    ) -> Self {
17967        self.advanced_blend_non_premultiplied_dst_color =
17968            advanced_blend_non_premultiplied_dst_color.into();
17969        self
17970    }
17971    #[inline]
17972    pub fn advanced_blend_correlated_overlap(
17973        mut self,
17974        advanced_blend_correlated_overlap: bool,
17975    ) -> Self {
17976        self.advanced_blend_correlated_overlap = advanced_blend_correlated_overlap.into();
17977        self
17978    }
17979    #[inline]
17980    pub fn advanced_blend_all_operations(mut self, advanced_blend_all_operations: bool) -> Self {
17981        self.advanced_blend_all_operations = advanced_blend_all_operations.into();
17982        self
17983    }
17984}
17985#[repr(C)]
17986#[cfg_attr(feature = "debug", derive(Debug))]
17987#[derive(Copy, Clone)]
17988#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineColorBlendAdvancedStateCreateInfoEXT.html>"]
17989#[must_use]
17990pub struct PipelineColorBlendAdvancedStateCreateInfoEXT<'a> {
17991    pub s_type: StructureType,
17992    pub p_next: *const c_void,
17993    pub src_premultiplied: Bool32,
17994    pub dst_premultiplied: Bool32,
17995    pub blend_overlap: BlendOverlapEXT,
17996    pub _marker: PhantomData<&'a ()>,
17997}
17998unsafe impl Send for PipelineColorBlendAdvancedStateCreateInfoEXT<'_> {}
17999unsafe impl Sync for PipelineColorBlendAdvancedStateCreateInfoEXT<'_> {}
18000impl ::core::default::Default for PipelineColorBlendAdvancedStateCreateInfoEXT<'_> {
18001    #[inline]
18002    fn default() -> Self {
18003        Self {
18004            s_type: Self::STRUCTURE_TYPE,
18005            p_next: ::core::ptr::null(),
18006            src_premultiplied: Bool32::default(),
18007            dst_premultiplied: Bool32::default(),
18008            blend_overlap: BlendOverlapEXT::default(),
18009            _marker: PhantomData,
18010        }
18011    }
18012}
18013unsafe impl<'a> TaggedStructure for PipelineColorBlendAdvancedStateCreateInfoEXT<'a> {
18014    const STRUCTURE_TYPE: StructureType =
18015        StructureType::PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT;
18016}
18017unsafe impl ExtendsPipelineColorBlendStateCreateInfo
18018    for PipelineColorBlendAdvancedStateCreateInfoEXT<'_>
18019{
18020}
18021impl<'a> PipelineColorBlendAdvancedStateCreateInfoEXT<'a> {
18022    #[inline]
18023    pub fn src_premultiplied(mut self, src_premultiplied: bool) -> Self {
18024        self.src_premultiplied = src_premultiplied.into();
18025        self
18026    }
18027    #[inline]
18028    pub fn dst_premultiplied(mut self, dst_premultiplied: bool) -> Self {
18029        self.dst_premultiplied = dst_premultiplied.into();
18030        self
18031    }
18032    #[inline]
18033    pub fn blend_overlap(mut self, blend_overlap: BlendOverlapEXT) -> Self {
18034        self.blend_overlap = blend_overlap;
18035        self
18036    }
18037}
18038#[repr(C)]
18039#[cfg_attr(feature = "debug", derive(Debug))]
18040#[derive(Copy, Clone)]
18041#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceInlineUniformBlockFeatures.html>"]
18042#[must_use]
18043pub struct PhysicalDeviceInlineUniformBlockFeatures<'a> {
18044    pub s_type: StructureType,
18045    pub p_next: *mut c_void,
18046    pub inline_uniform_block: Bool32,
18047    pub descriptor_binding_inline_uniform_block_update_after_bind: Bool32,
18048    pub _marker: PhantomData<&'a ()>,
18049}
18050unsafe impl Send for PhysicalDeviceInlineUniformBlockFeatures<'_> {}
18051unsafe impl Sync for PhysicalDeviceInlineUniformBlockFeatures<'_> {}
18052impl ::core::default::Default for PhysicalDeviceInlineUniformBlockFeatures<'_> {
18053    #[inline]
18054    fn default() -> Self {
18055        Self {
18056            s_type: Self::STRUCTURE_TYPE,
18057            p_next: ::core::ptr::null_mut(),
18058            inline_uniform_block: Bool32::default(),
18059            descriptor_binding_inline_uniform_block_update_after_bind: Bool32::default(),
18060            _marker: PhantomData,
18061        }
18062    }
18063}
18064unsafe impl<'a> TaggedStructure for PhysicalDeviceInlineUniformBlockFeatures<'a> {
18065    const STRUCTURE_TYPE: StructureType =
18066        StructureType::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES;
18067}
18068unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceInlineUniformBlockFeatures<'_> {}
18069unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceInlineUniformBlockFeatures<'_> {}
18070impl<'a> PhysicalDeviceInlineUniformBlockFeatures<'a> {
18071    #[inline]
18072    pub fn inline_uniform_block(mut self, inline_uniform_block: bool) -> Self {
18073        self.inline_uniform_block = inline_uniform_block.into();
18074        self
18075    }
18076    #[inline]
18077    pub fn descriptor_binding_inline_uniform_block_update_after_bind(
18078        mut self,
18079        descriptor_binding_inline_uniform_block_update_after_bind: bool,
18080    ) -> Self {
18081        self.descriptor_binding_inline_uniform_block_update_after_bind =
18082            descriptor_binding_inline_uniform_block_update_after_bind.into();
18083        self
18084    }
18085}
18086#[repr(C)]
18087#[cfg_attr(feature = "debug", derive(Debug))]
18088#[derive(Copy, Clone)]
18089#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceInlineUniformBlockProperties.html>"]
18090#[must_use]
18091pub struct PhysicalDeviceInlineUniformBlockProperties<'a> {
18092    pub s_type: StructureType,
18093    pub p_next: *mut c_void,
18094    pub max_inline_uniform_block_size: u32,
18095    pub max_per_stage_descriptor_inline_uniform_blocks: u32,
18096    pub max_per_stage_descriptor_update_after_bind_inline_uniform_blocks: u32,
18097    pub max_descriptor_set_inline_uniform_blocks: u32,
18098    pub max_descriptor_set_update_after_bind_inline_uniform_blocks: u32,
18099    pub _marker: PhantomData<&'a ()>,
18100}
18101unsafe impl Send for PhysicalDeviceInlineUniformBlockProperties<'_> {}
18102unsafe impl Sync for PhysicalDeviceInlineUniformBlockProperties<'_> {}
18103impl ::core::default::Default for PhysicalDeviceInlineUniformBlockProperties<'_> {
18104    #[inline]
18105    fn default() -> Self {
18106        Self {
18107            s_type: Self::STRUCTURE_TYPE,
18108            p_next: ::core::ptr::null_mut(),
18109            max_inline_uniform_block_size: u32::default(),
18110            max_per_stage_descriptor_inline_uniform_blocks: u32::default(),
18111            max_per_stage_descriptor_update_after_bind_inline_uniform_blocks: u32::default(),
18112            max_descriptor_set_inline_uniform_blocks: u32::default(),
18113            max_descriptor_set_update_after_bind_inline_uniform_blocks: u32::default(),
18114            _marker: PhantomData,
18115        }
18116    }
18117}
18118unsafe impl<'a> TaggedStructure for PhysicalDeviceInlineUniformBlockProperties<'a> {
18119    const STRUCTURE_TYPE: StructureType =
18120        StructureType::PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES;
18121}
18122unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceInlineUniformBlockProperties<'_> {}
18123impl<'a> PhysicalDeviceInlineUniformBlockProperties<'a> {
18124    #[inline]
18125    pub fn max_inline_uniform_block_size(mut self, max_inline_uniform_block_size: u32) -> Self {
18126        self.max_inline_uniform_block_size = max_inline_uniform_block_size;
18127        self
18128    }
18129    #[inline]
18130    pub fn max_per_stage_descriptor_inline_uniform_blocks(
18131        mut self,
18132        max_per_stage_descriptor_inline_uniform_blocks: u32,
18133    ) -> Self {
18134        self.max_per_stage_descriptor_inline_uniform_blocks =
18135            max_per_stage_descriptor_inline_uniform_blocks;
18136        self
18137    }
18138    #[inline]
18139    pub fn max_per_stage_descriptor_update_after_bind_inline_uniform_blocks(
18140        mut self,
18141        max_per_stage_descriptor_update_after_bind_inline_uniform_blocks: u32,
18142    ) -> Self {
18143        self.max_per_stage_descriptor_update_after_bind_inline_uniform_blocks =
18144            max_per_stage_descriptor_update_after_bind_inline_uniform_blocks;
18145        self
18146    }
18147    #[inline]
18148    pub fn max_descriptor_set_inline_uniform_blocks(
18149        mut self,
18150        max_descriptor_set_inline_uniform_blocks: u32,
18151    ) -> Self {
18152        self.max_descriptor_set_inline_uniform_blocks = max_descriptor_set_inline_uniform_blocks;
18153        self
18154    }
18155    #[inline]
18156    pub fn max_descriptor_set_update_after_bind_inline_uniform_blocks(
18157        mut self,
18158        max_descriptor_set_update_after_bind_inline_uniform_blocks: u32,
18159    ) -> Self {
18160        self.max_descriptor_set_update_after_bind_inline_uniform_blocks =
18161            max_descriptor_set_update_after_bind_inline_uniform_blocks;
18162        self
18163    }
18164}
18165#[repr(C)]
18166#[cfg_attr(feature = "debug", derive(Debug))]
18167#[derive(Copy, Clone)]
18168#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWriteDescriptorSetInlineUniformBlock.html>"]
18169#[must_use]
18170pub struct WriteDescriptorSetInlineUniformBlock<'a> {
18171    pub s_type: StructureType,
18172    pub p_next: *const c_void,
18173    pub data_size: u32,
18174    pub p_data: *const c_void,
18175    pub _marker: PhantomData<&'a ()>,
18176}
18177unsafe impl Send for WriteDescriptorSetInlineUniformBlock<'_> {}
18178unsafe impl Sync for WriteDescriptorSetInlineUniformBlock<'_> {}
18179impl ::core::default::Default for WriteDescriptorSetInlineUniformBlock<'_> {
18180    #[inline]
18181    fn default() -> Self {
18182        Self {
18183            s_type: Self::STRUCTURE_TYPE,
18184            p_next: ::core::ptr::null(),
18185            data_size: u32::default(),
18186            p_data: ::core::ptr::null(),
18187            _marker: PhantomData,
18188        }
18189    }
18190}
18191unsafe impl<'a> TaggedStructure for WriteDescriptorSetInlineUniformBlock<'a> {
18192    const STRUCTURE_TYPE: StructureType = StructureType::WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK;
18193}
18194unsafe impl ExtendsWriteDescriptorSet for WriteDescriptorSetInlineUniformBlock<'_> {}
18195impl<'a> WriteDescriptorSetInlineUniformBlock<'a> {
18196    #[inline]
18197    pub fn data(mut self, data: &'a [u8]) -> Self {
18198        self.data_size = data.len() as _;
18199        self.p_data = data.as_ptr().cast();
18200        self
18201    }
18202}
18203#[repr(C)]
18204#[cfg_attr(feature = "debug", derive(Debug))]
18205#[derive(Copy, Clone)]
18206#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorPoolInlineUniformBlockCreateInfo.html>"]
18207#[must_use]
18208pub struct DescriptorPoolInlineUniformBlockCreateInfo<'a> {
18209    pub s_type: StructureType,
18210    pub p_next: *const c_void,
18211    pub max_inline_uniform_block_bindings: u32,
18212    pub _marker: PhantomData<&'a ()>,
18213}
18214unsafe impl Send for DescriptorPoolInlineUniformBlockCreateInfo<'_> {}
18215unsafe impl Sync for DescriptorPoolInlineUniformBlockCreateInfo<'_> {}
18216impl ::core::default::Default for DescriptorPoolInlineUniformBlockCreateInfo<'_> {
18217    #[inline]
18218    fn default() -> Self {
18219        Self {
18220            s_type: Self::STRUCTURE_TYPE,
18221            p_next: ::core::ptr::null(),
18222            max_inline_uniform_block_bindings: u32::default(),
18223            _marker: PhantomData,
18224        }
18225    }
18226}
18227unsafe impl<'a> TaggedStructure for DescriptorPoolInlineUniformBlockCreateInfo<'a> {
18228    const STRUCTURE_TYPE: StructureType =
18229        StructureType::DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO;
18230}
18231unsafe impl ExtendsDescriptorPoolCreateInfo for DescriptorPoolInlineUniformBlockCreateInfo<'_> {}
18232impl<'a> DescriptorPoolInlineUniformBlockCreateInfo<'a> {
18233    #[inline]
18234    pub fn max_inline_uniform_block_bindings(
18235        mut self,
18236        max_inline_uniform_block_bindings: u32,
18237    ) -> Self {
18238        self.max_inline_uniform_block_bindings = max_inline_uniform_block_bindings;
18239        self
18240    }
18241}
18242#[repr(C)]
18243#[cfg_attr(feature = "debug", derive(Debug))]
18244#[derive(Copy, Clone)]
18245#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageModulationStateCreateInfoNV.html>"]
18246#[must_use]
18247pub struct PipelineCoverageModulationStateCreateInfoNV<'a> {
18248    pub s_type: StructureType,
18249    pub p_next: *const c_void,
18250    pub flags: PipelineCoverageModulationStateCreateFlagsNV,
18251    pub coverage_modulation_mode: CoverageModulationModeNV,
18252    pub coverage_modulation_table_enable: Bool32,
18253    pub coverage_modulation_table_count: u32,
18254    pub p_coverage_modulation_table: *const f32,
18255    pub _marker: PhantomData<&'a ()>,
18256}
18257unsafe impl Send for PipelineCoverageModulationStateCreateInfoNV<'_> {}
18258unsafe impl Sync for PipelineCoverageModulationStateCreateInfoNV<'_> {}
18259impl ::core::default::Default for PipelineCoverageModulationStateCreateInfoNV<'_> {
18260    #[inline]
18261    fn default() -> Self {
18262        Self {
18263            s_type: Self::STRUCTURE_TYPE,
18264            p_next: ::core::ptr::null(),
18265            flags: PipelineCoverageModulationStateCreateFlagsNV::default(),
18266            coverage_modulation_mode: CoverageModulationModeNV::default(),
18267            coverage_modulation_table_enable: Bool32::default(),
18268            coverage_modulation_table_count: u32::default(),
18269            p_coverage_modulation_table: ::core::ptr::null(),
18270            _marker: PhantomData,
18271        }
18272    }
18273}
18274unsafe impl<'a> TaggedStructure for PipelineCoverageModulationStateCreateInfoNV<'a> {
18275    const STRUCTURE_TYPE: StructureType =
18276        StructureType::PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV;
18277}
18278unsafe impl ExtendsPipelineMultisampleStateCreateInfo
18279    for PipelineCoverageModulationStateCreateInfoNV<'_>
18280{
18281}
18282impl<'a> PipelineCoverageModulationStateCreateInfoNV<'a> {
18283    #[inline]
18284    pub fn flags(mut self, flags: PipelineCoverageModulationStateCreateFlagsNV) -> Self {
18285        self.flags = flags;
18286        self
18287    }
18288    #[inline]
18289    pub fn coverage_modulation_mode(
18290        mut self,
18291        coverage_modulation_mode: CoverageModulationModeNV,
18292    ) -> Self {
18293        self.coverage_modulation_mode = coverage_modulation_mode;
18294        self
18295    }
18296    #[inline]
18297    pub fn coverage_modulation_table_enable(
18298        mut self,
18299        coverage_modulation_table_enable: bool,
18300    ) -> Self {
18301        self.coverage_modulation_table_enable = coverage_modulation_table_enable.into();
18302        self
18303    }
18304    #[inline]
18305    pub fn coverage_modulation_table(mut self, coverage_modulation_table: &'a [f32]) -> Self {
18306        self.coverage_modulation_table_count = coverage_modulation_table.len() as _;
18307        self.p_coverage_modulation_table = coverage_modulation_table.as_ptr();
18308        self
18309    }
18310}
18311#[repr(C)]
18312#[cfg_attr(feature = "debug", derive(Debug))]
18313#[derive(Copy, Clone)]
18314#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageFormatListCreateInfo.html>"]
18315#[must_use]
18316pub struct ImageFormatListCreateInfo<'a> {
18317    pub s_type: StructureType,
18318    pub p_next: *const c_void,
18319    pub view_format_count: u32,
18320    pub p_view_formats: *const Format,
18321    pub _marker: PhantomData<&'a ()>,
18322}
18323unsafe impl Send for ImageFormatListCreateInfo<'_> {}
18324unsafe impl Sync for ImageFormatListCreateInfo<'_> {}
18325impl ::core::default::Default for ImageFormatListCreateInfo<'_> {
18326    #[inline]
18327    fn default() -> Self {
18328        Self {
18329            s_type: Self::STRUCTURE_TYPE,
18330            p_next: ::core::ptr::null(),
18331            view_format_count: u32::default(),
18332            p_view_formats: ::core::ptr::null(),
18333            _marker: PhantomData,
18334        }
18335    }
18336}
18337unsafe impl<'a> TaggedStructure for ImageFormatListCreateInfo<'a> {
18338    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_FORMAT_LIST_CREATE_INFO;
18339}
18340unsafe impl ExtendsImageCreateInfo for ImageFormatListCreateInfo<'_> {}
18341unsafe impl ExtendsSwapchainCreateInfoKHR for ImageFormatListCreateInfo<'_> {}
18342unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for ImageFormatListCreateInfo<'_> {}
18343impl<'a> ImageFormatListCreateInfo<'a> {
18344    #[inline]
18345    pub fn view_formats(mut self, view_formats: &'a [Format]) -> Self {
18346        self.view_format_count = view_formats.len() as _;
18347        self.p_view_formats = view_formats.as_ptr();
18348        self
18349    }
18350}
18351#[repr(C)]
18352#[cfg_attr(feature = "debug", derive(Debug))]
18353#[derive(Copy, Clone)]
18354#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkValidationCacheCreateInfoEXT.html>"]
18355#[must_use]
18356pub struct ValidationCacheCreateInfoEXT<'a> {
18357    pub s_type: StructureType,
18358    pub p_next: *const c_void,
18359    pub flags: ValidationCacheCreateFlagsEXT,
18360    pub initial_data_size: usize,
18361    pub p_initial_data: *const c_void,
18362    pub _marker: PhantomData<&'a ()>,
18363}
18364unsafe impl Send for ValidationCacheCreateInfoEXT<'_> {}
18365unsafe impl Sync for ValidationCacheCreateInfoEXT<'_> {}
18366impl ::core::default::Default for ValidationCacheCreateInfoEXT<'_> {
18367    #[inline]
18368    fn default() -> Self {
18369        Self {
18370            s_type: Self::STRUCTURE_TYPE,
18371            p_next: ::core::ptr::null(),
18372            flags: ValidationCacheCreateFlagsEXT::default(),
18373            initial_data_size: usize::default(),
18374            p_initial_data: ::core::ptr::null(),
18375            _marker: PhantomData,
18376        }
18377    }
18378}
18379unsafe impl<'a> TaggedStructure for ValidationCacheCreateInfoEXT<'a> {
18380    const STRUCTURE_TYPE: StructureType = StructureType::VALIDATION_CACHE_CREATE_INFO_EXT;
18381}
18382impl<'a> ValidationCacheCreateInfoEXT<'a> {
18383    #[inline]
18384    pub fn flags(mut self, flags: ValidationCacheCreateFlagsEXT) -> Self {
18385        self.flags = flags;
18386        self
18387    }
18388    #[inline]
18389    pub fn initial_data(mut self, initial_data: &'a [u8]) -> Self {
18390        self.initial_data_size = initial_data.len();
18391        self.p_initial_data = initial_data.as_ptr().cast();
18392        self
18393    }
18394}
18395#[repr(C)]
18396#[cfg_attr(feature = "debug", derive(Debug))]
18397#[derive(Copy, Clone)]
18398#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderModuleValidationCacheCreateInfoEXT.html>"]
18399#[must_use]
18400pub struct ShaderModuleValidationCacheCreateInfoEXT<'a> {
18401    pub s_type: StructureType,
18402    pub p_next: *const c_void,
18403    pub validation_cache: ValidationCacheEXT,
18404    pub _marker: PhantomData<&'a ()>,
18405}
18406unsafe impl Send for ShaderModuleValidationCacheCreateInfoEXT<'_> {}
18407unsafe impl Sync for ShaderModuleValidationCacheCreateInfoEXT<'_> {}
18408impl ::core::default::Default for ShaderModuleValidationCacheCreateInfoEXT<'_> {
18409    #[inline]
18410    fn default() -> Self {
18411        Self {
18412            s_type: Self::STRUCTURE_TYPE,
18413            p_next: ::core::ptr::null(),
18414            validation_cache: ValidationCacheEXT::default(),
18415            _marker: PhantomData,
18416        }
18417    }
18418}
18419unsafe impl<'a> TaggedStructure for ShaderModuleValidationCacheCreateInfoEXT<'a> {
18420    const STRUCTURE_TYPE: StructureType =
18421        StructureType::SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT;
18422}
18423unsafe impl ExtendsShaderModuleCreateInfo for ShaderModuleValidationCacheCreateInfoEXT<'_> {}
18424unsafe impl ExtendsPipelineShaderStageCreateInfo for ShaderModuleValidationCacheCreateInfoEXT<'_> {}
18425impl<'a> ShaderModuleValidationCacheCreateInfoEXT<'a> {
18426    #[inline]
18427    pub fn validation_cache(mut self, validation_cache: ValidationCacheEXT) -> Self {
18428        self.validation_cache = validation_cache;
18429        self
18430    }
18431}
18432#[repr(C)]
18433#[cfg_attr(feature = "debug", derive(Debug))]
18434#[derive(Copy, Clone)]
18435#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance3Properties.html>"]
18436#[must_use]
18437pub struct PhysicalDeviceMaintenance3Properties<'a> {
18438    pub s_type: StructureType,
18439    pub p_next: *mut c_void,
18440    pub max_per_set_descriptors: u32,
18441    pub max_memory_allocation_size: DeviceSize,
18442    pub _marker: PhantomData<&'a ()>,
18443}
18444unsafe impl Send for PhysicalDeviceMaintenance3Properties<'_> {}
18445unsafe impl Sync for PhysicalDeviceMaintenance3Properties<'_> {}
18446impl ::core::default::Default for PhysicalDeviceMaintenance3Properties<'_> {
18447    #[inline]
18448    fn default() -> Self {
18449        Self {
18450            s_type: Self::STRUCTURE_TYPE,
18451            p_next: ::core::ptr::null_mut(),
18452            max_per_set_descriptors: u32::default(),
18453            max_memory_allocation_size: DeviceSize::default(),
18454            _marker: PhantomData,
18455        }
18456    }
18457}
18458unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance3Properties<'a> {
18459    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES;
18460}
18461unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMaintenance3Properties<'_> {}
18462impl<'a> PhysicalDeviceMaintenance3Properties<'a> {
18463    #[inline]
18464    pub fn max_per_set_descriptors(mut self, max_per_set_descriptors: u32) -> Self {
18465        self.max_per_set_descriptors = max_per_set_descriptors;
18466        self
18467    }
18468    #[inline]
18469    pub fn max_memory_allocation_size(mut self, max_memory_allocation_size: DeviceSize) -> Self {
18470        self.max_memory_allocation_size = max_memory_allocation_size;
18471        self
18472    }
18473}
18474#[repr(C)]
18475#[cfg_attr(feature = "debug", derive(Debug))]
18476#[derive(Copy, Clone)]
18477#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance4Features.html>"]
18478#[must_use]
18479pub struct PhysicalDeviceMaintenance4Features<'a> {
18480    pub s_type: StructureType,
18481    pub p_next: *mut c_void,
18482    pub maintenance4: Bool32,
18483    pub _marker: PhantomData<&'a ()>,
18484}
18485unsafe impl Send for PhysicalDeviceMaintenance4Features<'_> {}
18486unsafe impl Sync for PhysicalDeviceMaintenance4Features<'_> {}
18487impl ::core::default::Default for PhysicalDeviceMaintenance4Features<'_> {
18488    #[inline]
18489    fn default() -> Self {
18490        Self {
18491            s_type: Self::STRUCTURE_TYPE,
18492            p_next: ::core::ptr::null_mut(),
18493            maintenance4: Bool32::default(),
18494            _marker: PhantomData,
18495        }
18496    }
18497}
18498unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance4Features<'a> {
18499    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES;
18500}
18501unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMaintenance4Features<'_> {}
18502unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMaintenance4Features<'_> {}
18503impl<'a> PhysicalDeviceMaintenance4Features<'a> {
18504    #[inline]
18505    pub fn maintenance4(mut self, maintenance4: bool) -> Self {
18506        self.maintenance4 = maintenance4.into();
18507        self
18508    }
18509}
18510#[repr(C)]
18511#[cfg_attr(feature = "debug", derive(Debug))]
18512#[derive(Copy, Clone)]
18513#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance4Properties.html>"]
18514#[must_use]
18515pub struct PhysicalDeviceMaintenance4Properties<'a> {
18516    pub s_type: StructureType,
18517    pub p_next: *mut c_void,
18518    pub max_buffer_size: DeviceSize,
18519    pub _marker: PhantomData<&'a ()>,
18520}
18521unsafe impl Send for PhysicalDeviceMaintenance4Properties<'_> {}
18522unsafe impl Sync for PhysicalDeviceMaintenance4Properties<'_> {}
18523impl ::core::default::Default for PhysicalDeviceMaintenance4Properties<'_> {
18524    #[inline]
18525    fn default() -> Self {
18526        Self {
18527            s_type: Self::STRUCTURE_TYPE,
18528            p_next: ::core::ptr::null_mut(),
18529            max_buffer_size: DeviceSize::default(),
18530            _marker: PhantomData,
18531        }
18532    }
18533}
18534unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance4Properties<'a> {
18535    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES;
18536}
18537unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMaintenance4Properties<'_> {}
18538impl<'a> PhysicalDeviceMaintenance4Properties<'a> {
18539    #[inline]
18540    pub fn max_buffer_size(mut self, max_buffer_size: DeviceSize) -> Self {
18541        self.max_buffer_size = max_buffer_size;
18542        self
18543    }
18544}
18545#[repr(C)]
18546#[cfg_attr(feature = "debug", derive(Debug))]
18547#[derive(Copy, Clone)]
18548#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance5FeaturesKHR.html>"]
18549#[must_use]
18550pub struct PhysicalDeviceMaintenance5FeaturesKHR<'a> {
18551    pub s_type: StructureType,
18552    pub p_next: *mut c_void,
18553    pub maintenance5: Bool32,
18554    pub _marker: PhantomData<&'a ()>,
18555}
18556unsafe impl Send for PhysicalDeviceMaintenance5FeaturesKHR<'_> {}
18557unsafe impl Sync for PhysicalDeviceMaintenance5FeaturesKHR<'_> {}
18558impl ::core::default::Default for PhysicalDeviceMaintenance5FeaturesKHR<'_> {
18559    #[inline]
18560    fn default() -> Self {
18561        Self {
18562            s_type: Self::STRUCTURE_TYPE,
18563            p_next: ::core::ptr::null_mut(),
18564            maintenance5: Bool32::default(),
18565            _marker: PhantomData,
18566        }
18567    }
18568}
18569unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance5FeaturesKHR<'a> {
18570    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR;
18571}
18572unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMaintenance5FeaturesKHR<'_> {}
18573unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMaintenance5FeaturesKHR<'_> {}
18574impl<'a> PhysicalDeviceMaintenance5FeaturesKHR<'a> {
18575    #[inline]
18576    pub fn maintenance5(mut self, maintenance5: bool) -> Self {
18577        self.maintenance5 = maintenance5.into();
18578        self
18579    }
18580}
18581#[repr(C)]
18582#[cfg_attr(feature = "debug", derive(Debug))]
18583#[derive(Copy, Clone)]
18584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance5PropertiesKHR.html>"]
18585#[must_use]
18586pub struct PhysicalDeviceMaintenance5PropertiesKHR<'a> {
18587    pub s_type: StructureType,
18588    pub p_next: *mut c_void,
18589    pub early_fragment_multisample_coverage_after_sample_counting: Bool32,
18590    pub early_fragment_sample_mask_test_before_sample_counting: Bool32,
18591    pub depth_stencil_swizzle_one_support: Bool32,
18592    pub polygon_mode_point_size: Bool32,
18593    pub non_strict_single_pixel_wide_lines_use_parallelogram: Bool32,
18594    pub non_strict_wide_lines_use_parallelogram: Bool32,
18595    pub _marker: PhantomData<&'a ()>,
18596}
18597unsafe impl Send for PhysicalDeviceMaintenance5PropertiesKHR<'_> {}
18598unsafe impl Sync for PhysicalDeviceMaintenance5PropertiesKHR<'_> {}
18599impl ::core::default::Default for PhysicalDeviceMaintenance5PropertiesKHR<'_> {
18600    #[inline]
18601    fn default() -> Self {
18602        Self {
18603            s_type: Self::STRUCTURE_TYPE,
18604            p_next: ::core::ptr::null_mut(),
18605            early_fragment_multisample_coverage_after_sample_counting: Bool32::default(),
18606            early_fragment_sample_mask_test_before_sample_counting: Bool32::default(),
18607            depth_stencil_swizzle_one_support: Bool32::default(),
18608            polygon_mode_point_size: Bool32::default(),
18609            non_strict_single_pixel_wide_lines_use_parallelogram: Bool32::default(),
18610            non_strict_wide_lines_use_parallelogram: Bool32::default(),
18611            _marker: PhantomData,
18612        }
18613    }
18614}
18615unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance5PropertiesKHR<'a> {
18616    const STRUCTURE_TYPE: StructureType =
18617        StructureType::PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR;
18618}
18619unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMaintenance5PropertiesKHR<'_> {}
18620impl<'a> PhysicalDeviceMaintenance5PropertiesKHR<'a> {
18621    #[inline]
18622    pub fn early_fragment_multisample_coverage_after_sample_counting(
18623        mut self,
18624        early_fragment_multisample_coverage_after_sample_counting: bool,
18625    ) -> Self {
18626        self.early_fragment_multisample_coverage_after_sample_counting =
18627            early_fragment_multisample_coverage_after_sample_counting.into();
18628        self
18629    }
18630    #[inline]
18631    pub fn early_fragment_sample_mask_test_before_sample_counting(
18632        mut self,
18633        early_fragment_sample_mask_test_before_sample_counting: bool,
18634    ) -> Self {
18635        self.early_fragment_sample_mask_test_before_sample_counting =
18636            early_fragment_sample_mask_test_before_sample_counting.into();
18637        self
18638    }
18639    #[inline]
18640    pub fn depth_stencil_swizzle_one_support(
18641        mut self,
18642        depth_stencil_swizzle_one_support: bool,
18643    ) -> Self {
18644        self.depth_stencil_swizzle_one_support = depth_stencil_swizzle_one_support.into();
18645        self
18646    }
18647    #[inline]
18648    pub fn polygon_mode_point_size(mut self, polygon_mode_point_size: bool) -> Self {
18649        self.polygon_mode_point_size = polygon_mode_point_size.into();
18650        self
18651    }
18652    #[inline]
18653    pub fn non_strict_single_pixel_wide_lines_use_parallelogram(
18654        mut self,
18655        non_strict_single_pixel_wide_lines_use_parallelogram: bool,
18656    ) -> Self {
18657        self.non_strict_single_pixel_wide_lines_use_parallelogram =
18658            non_strict_single_pixel_wide_lines_use_parallelogram.into();
18659        self
18660    }
18661    #[inline]
18662    pub fn non_strict_wide_lines_use_parallelogram(
18663        mut self,
18664        non_strict_wide_lines_use_parallelogram: bool,
18665    ) -> Self {
18666        self.non_strict_wide_lines_use_parallelogram =
18667            non_strict_wide_lines_use_parallelogram.into();
18668        self
18669    }
18670}
18671#[repr(C)]
18672#[cfg_attr(feature = "debug", derive(Debug))]
18673#[derive(Copy, Clone)]
18674#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance6FeaturesKHR.html>"]
18675#[must_use]
18676pub struct PhysicalDeviceMaintenance6FeaturesKHR<'a> {
18677    pub s_type: StructureType,
18678    pub p_next: *mut c_void,
18679    pub maintenance6: Bool32,
18680    pub _marker: PhantomData<&'a ()>,
18681}
18682unsafe impl Send for PhysicalDeviceMaintenance6FeaturesKHR<'_> {}
18683unsafe impl Sync for PhysicalDeviceMaintenance6FeaturesKHR<'_> {}
18684impl ::core::default::Default for PhysicalDeviceMaintenance6FeaturesKHR<'_> {
18685    #[inline]
18686    fn default() -> Self {
18687        Self {
18688            s_type: Self::STRUCTURE_TYPE,
18689            p_next: ::core::ptr::null_mut(),
18690            maintenance6: Bool32::default(),
18691            _marker: PhantomData,
18692        }
18693    }
18694}
18695unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance6FeaturesKHR<'a> {
18696    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR;
18697}
18698unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMaintenance6FeaturesKHR<'_> {}
18699unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMaintenance6FeaturesKHR<'_> {}
18700impl<'a> PhysicalDeviceMaintenance6FeaturesKHR<'a> {
18701    #[inline]
18702    pub fn maintenance6(mut self, maintenance6: bool) -> Self {
18703        self.maintenance6 = maintenance6.into();
18704        self
18705    }
18706}
18707#[repr(C)]
18708#[cfg_attr(feature = "debug", derive(Debug))]
18709#[derive(Copy, Clone)]
18710#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMaintenance6PropertiesKHR.html>"]
18711#[must_use]
18712pub struct PhysicalDeviceMaintenance6PropertiesKHR<'a> {
18713    pub s_type: StructureType,
18714    pub p_next: *mut c_void,
18715    pub block_texel_view_compatible_multiple_layers: Bool32,
18716    pub max_combined_image_sampler_descriptor_count: u32,
18717    pub fragment_shading_rate_clamp_combiner_inputs: Bool32,
18718    pub _marker: PhantomData<&'a ()>,
18719}
18720unsafe impl Send for PhysicalDeviceMaintenance6PropertiesKHR<'_> {}
18721unsafe impl Sync for PhysicalDeviceMaintenance6PropertiesKHR<'_> {}
18722impl ::core::default::Default for PhysicalDeviceMaintenance6PropertiesKHR<'_> {
18723    #[inline]
18724    fn default() -> Self {
18725        Self {
18726            s_type: Self::STRUCTURE_TYPE,
18727            p_next: ::core::ptr::null_mut(),
18728            block_texel_view_compatible_multiple_layers: Bool32::default(),
18729            max_combined_image_sampler_descriptor_count: u32::default(),
18730            fragment_shading_rate_clamp_combiner_inputs: Bool32::default(),
18731            _marker: PhantomData,
18732        }
18733    }
18734}
18735unsafe impl<'a> TaggedStructure for PhysicalDeviceMaintenance6PropertiesKHR<'a> {
18736    const STRUCTURE_TYPE: StructureType =
18737        StructureType::PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR;
18738}
18739unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMaintenance6PropertiesKHR<'_> {}
18740impl<'a> PhysicalDeviceMaintenance6PropertiesKHR<'a> {
18741    #[inline]
18742    pub fn block_texel_view_compatible_multiple_layers(
18743        mut self,
18744        block_texel_view_compatible_multiple_layers: bool,
18745    ) -> Self {
18746        self.block_texel_view_compatible_multiple_layers =
18747            block_texel_view_compatible_multiple_layers.into();
18748        self
18749    }
18750    #[inline]
18751    pub fn max_combined_image_sampler_descriptor_count(
18752        mut self,
18753        max_combined_image_sampler_descriptor_count: u32,
18754    ) -> Self {
18755        self.max_combined_image_sampler_descriptor_count =
18756            max_combined_image_sampler_descriptor_count;
18757        self
18758    }
18759    #[inline]
18760    pub fn fragment_shading_rate_clamp_combiner_inputs(
18761        mut self,
18762        fragment_shading_rate_clamp_combiner_inputs: bool,
18763    ) -> Self {
18764        self.fragment_shading_rate_clamp_combiner_inputs =
18765            fragment_shading_rate_clamp_combiner_inputs.into();
18766        self
18767    }
18768}
18769#[repr(C)]
18770#[cfg_attr(feature = "debug", derive(Debug))]
18771#[derive(Copy, Clone)]
18772#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingAreaInfoKHR.html>"]
18773#[must_use]
18774pub struct RenderingAreaInfoKHR<'a> {
18775    pub s_type: StructureType,
18776    pub p_next: *const c_void,
18777    pub view_mask: u32,
18778    pub color_attachment_count: u32,
18779    pub p_color_attachment_formats: *const Format,
18780    pub depth_attachment_format: Format,
18781    pub stencil_attachment_format: Format,
18782    pub _marker: PhantomData<&'a ()>,
18783}
18784unsafe impl Send for RenderingAreaInfoKHR<'_> {}
18785unsafe impl Sync for RenderingAreaInfoKHR<'_> {}
18786impl ::core::default::Default for RenderingAreaInfoKHR<'_> {
18787    #[inline]
18788    fn default() -> Self {
18789        Self {
18790            s_type: Self::STRUCTURE_TYPE,
18791            p_next: ::core::ptr::null(),
18792            view_mask: u32::default(),
18793            color_attachment_count: u32::default(),
18794            p_color_attachment_formats: ::core::ptr::null(),
18795            depth_attachment_format: Format::default(),
18796            stencil_attachment_format: Format::default(),
18797            _marker: PhantomData,
18798        }
18799    }
18800}
18801unsafe impl<'a> TaggedStructure for RenderingAreaInfoKHR<'a> {
18802    const STRUCTURE_TYPE: StructureType = StructureType::RENDERING_AREA_INFO_KHR;
18803}
18804impl<'a> RenderingAreaInfoKHR<'a> {
18805    #[inline]
18806    pub fn view_mask(mut self, view_mask: u32) -> Self {
18807        self.view_mask = view_mask;
18808        self
18809    }
18810    #[inline]
18811    pub fn color_attachment_formats(mut self, color_attachment_formats: &'a [Format]) -> Self {
18812        self.color_attachment_count = color_attachment_formats.len() as _;
18813        self.p_color_attachment_formats = color_attachment_formats.as_ptr();
18814        self
18815    }
18816    #[inline]
18817    pub fn depth_attachment_format(mut self, depth_attachment_format: Format) -> Self {
18818        self.depth_attachment_format = depth_attachment_format;
18819        self
18820    }
18821    #[inline]
18822    pub fn stencil_attachment_format(mut self, stencil_attachment_format: Format) -> Self {
18823        self.stencil_attachment_format = stencil_attachment_format;
18824        self
18825    }
18826}
18827#[repr(C)]
18828#[cfg_attr(feature = "debug", derive(Debug))]
18829#[derive(Copy, Clone)]
18830#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutSupport.html>"]
18831#[must_use]
18832pub struct DescriptorSetLayoutSupport<'a> {
18833    pub s_type: StructureType,
18834    pub p_next: *mut c_void,
18835    pub supported: Bool32,
18836    pub _marker: PhantomData<&'a ()>,
18837}
18838unsafe impl Send for DescriptorSetLayoutSupport<'_> {}
18839unsafe impl Sync for DescriptorSetLayoutSupport<'_> {}
18840impl ::core::default::Default for DescriptorSetLayoutSupport<'_> {
18841    #[inline]
18842    fn default() -> Self {
18843        Self {
18844            s_type: Self::STRUCTURE_TYPE,
18845            p_next: ::core::ptr::null_mut(),
18846            supported: Bool32::default(),
18847            _marker: PhantomData,
18848        }
18849    }
18850}
18851unsafe impl<'a> TaggedStructure for DescriptorSetLayoutSupport<'a> {
18852    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_SET_LAYOUT_SUPPORT;
18853}
18854pub unsafe trait ExtendsDescriptorSetLayoutSupport {}
18855impl<'a> DescriptorSetLayoutSupport<'a> {
18856    #[inline]
18857    pub fn supported(mut self, supported: bool) -> Self {
18858        self.supported = supported.into();
18859        self
18860    }
18861    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
18862    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
18863    #[doc = r" valid extension structs can be pushed into the chain."]
18864    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
18865    #[doc = r" chain will look like `A -> D -> B -> C`."]
18866    pub fn push_next<T: ExtendsDescriptorSetLayoutSupport + ?Sized>(
18867        mut self,
18868        next: &'a mut T,
18869    ) -> Self {
18870        unsafe {
18871            let next_ptr = <*mut T>::cast(next);
18872            let last_next = ptr_chain_iter(next).last().unwrap();
18873            (*last_next).p_next = self.p_next as _;
18874            self.p_next = next_ptr;
18875        }
18876        self
18877    }
18878}
18879#[repr(C)]
18880#[cfg_attr(feature = "debug", derive(Debug))]
18881#[derive(Copy, Clone)]
18882#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderDrawParametersFeatures.html>"]
18883#[must_use]
18884pub struct PhysicalDeviceShaderDrawParametersFeatures<'a> {
18885    pub s_type: StructureType,
18886    pub p_next: *mut c_void,
18887    pub shader_draw_parameters: Bool32,
18888    pub _marker: PhantomData<&'a ()>,
18889}
18890unsafe impl Send for PhysicalDeviceShaderDrawParametersFeatures<'_> {}
18891unsafe impl Sync for PhysicalDeviceShaderDrawParametersFeatures<'_> {}
18892impl ::core::default::Default for PhysicalDeviceShaderDrawParametersFeatures<'_> {
18893    #[inline]
18894    fn default() -> Self {
18895        Self {
18896            s_type: Self::STRUCTURE_TYPE,
18897            p_next: ::core::ptr::null_mut(),
18898            shader_draw_parameters: Bool32::default(),
18899            _marker: PhantomData,
18900        }
18901    }
18902}
18903unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderDrawParametersFeatures<'a> {
18904    const STRUCTURE_TYPE: StructureType =
18905        StructureType::PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES;
18906}
18907unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderDrawParametersFeatures<'_> {}
18908unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderDrawParametersFeatures<'_> {}
18909impl<'a> PhysicalDeviceShaderDrawParametersFeatures<'a> {
18910    #[inline]
18911    pub fn shader_draw_parameters(mut self, shader_draw_parameters: bool) -> Self {
18912        self.shader_draw_parameters = shader_draw_parameters.into();
18913        self
18914    }
18915}
18916#[repr(C)]
18917#[cfg_attr(feature = "debug", derive(Debug))]
18918#[derive(Copy, Clone)]
18919#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html>"]
18920#[must_use]
18921pub struct PhysicalDeviceShaderFloat16Int8Features<'a> {
18922    pub s_type: StructureType,
18923    pub p_next: *mut c_void,
18924    pub shader_float16: Bool32,
18925    pub shader_int8: Bool32,
18926    pub _marker: PhantomData<&'a ()>,
18927}
18928unsafe impl Send for PhysicalDeviceShaderFloat16Int8Features<'_> {}
18929unsafe impl Sync for PhysicalDeviceShaderFloat16Int8Features<'_> {}
18930impl ::core::default::Default for PhysicalDeviceShaderFloat16Int8Features<'_> {
18931    #[inline]
18932    fn default() -> Self {
18933        Self {
18934            s_type: Self::STRUCTURE_TYPE,
18935            p_next: ::core::ptr::null_mut(),
18936            shader_float16: Bool32::default(),
18937            shader_int8: Bool32::default(),
18938            _marker: PhantomData,
18939        }
18940    }
18941}
18942unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderFloat16Int8Features<'a> {
18943    const STRUCTURE_TYPE: StructureType =
18944        StructureType::PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES;
18945}
18946unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderFloat16Int8Features<'_> {}
18947unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderFloat16Int8Features<'_> {}
18948impl<'a> PhysicalDeviceShaderFloat16Int8Features<'a> {
18949    #[inline]
18950    pub fn shader_float16(mut self, shader_float16: bool) -> Self {
18951        self.shader_float16 = shader_float16.into();
18952        self
18953    }
18954    #[inline]
18955    pub fn shader_int8(mut self, shader_int8: bool) -> Self {
18956        self.shader_int8 = shader_int8.into();
18957        self
18958    }
18959}
18960#[repr(C)]
18961#[cfg_attr(feature = "debug", derive(Debug))]
18962#[derive(Copy, Clone)]
18963#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html>"]
18964#[must_use]
18965pub struct PhysicalDeviceFloatControlsProperties<'a> {
18966    pub s_type: StructureType,
18967    pub p_next: *mut c_void,
18968    pub denorm_behavior_independence: ShaderFloatControlsIndependence,
18969    pub rounding_mode_independence: ShaderFloatControlsIndependence,
18970    pub shader_signed_zero_inf_nan_preserve_float16: Bool32,
18971    pub shader_signed_zero_inf_nan_preserve_float32: Bool32,
18972    pub shader_signed_zero_inf_nan_preserve_float64: Bool32,
18973    pub shader_denorm_preserve_float16: Bool32,
18974    pub shader_denorm_preserve_float32: Bool32,
18975    pub shader_denorm_preserve_float64: Bool32,
18976    pub shader_denorm_flush_to_zero_float16: Bool32,
18977    pub shader_denorm_flush_to_zero_float32: Bool32,
18978    pub shader_denorm_flush_to_zero_float64: Bool32,
18979    pub shader_rounding_mode_rte_float16: Bool32,
18980    pub shader_rounding_mode_rte_float32: Bool32,
18981    pub shader_rounding_mode_rte_float64: Bool32,
18982    pub shader_rounding_mode_rtz_float16: Bool32,
18983    pub shader_rounding_mode_rtz_float32: Bool32,
18984    pub shader_rounding_mode_rtz_float64: Bool32,
18985    pub _marker: PhantomData<&'a ()>,
18986}
18987unsafe impl Send for PhysicalDeviceFloatControlsProperties<'_> {}
18988unsafe impl Sync for PhysicalDeviceFloatControlsProperties<'_> {}
18989impl ::core::default::Default for PhysicalDeviceFloatControlsProperties<'_> {
18990    #[inline]
18991    fn default() -> Self {
18992        Self {
18993            s_type: Self::STRUCTURE_TYPE,
18994            p_next: ::core::ptr::null_mut(),
18995            denorm_behavior_independence: ShaderFloatControlsIndependence::default(),
18996            rounding_mode_independence: ShaderFloatControlsIndependence::default(),
18997            shader_signed_zero_inf_nan_preserve_float16: Bool32::default(),
18998            shader_signed_zero_inf_nan_preserve_float32: Bool32::default(),
18999            shader_signed_zero_inf_nan_preserve_float64: Bool32::default(),
19000            shader_denorm_preserve_float16: Bool32::default(),
19001            shader_denorm_preserve_float32: Bool32::default(),
19002            shader_denorm_preserve_float64: Bool32::default(),
19003            shader_denorm_flush_to_zero_float16: Bool32::default(),
19004            shader_denorm_flush_to_zero_float32: Bool32::default(),
19005            shader_denorm_flush_to_zero_float64: Bool32::default(),
19006            shader_rounding_mode_rte_float16: Bool32::default(),
19007            shader_rounding_mode_rte_float32: Bool32::default(),
19008            shader_rounding_mode_rte_float64: Bool32::default(),
19009            shader_rounding_mode_rtz_float16: Bool32::default(),
19010            shader_rounding_mode_rtz_float32: Bool32::default(),
19011            shader_rounding_mode_rtz_float64: Bool32::default(),
19012            _marker: PhantomData,
19013        }
19014    }
19015}
19016unsafe impl<'a> TaggedStructure for PhysicalDeviceFloatControlsProperties<'a> {
19017    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES;
19018}
19019unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceFloatControlsProperties<'_> {}
19020impl<'a> PhysicalDeviceFloatControlsProperties<'a> {
19021    #[inline]
19022    pub fn denorm_behavior_independence(
19023        mut self,
19024        denorm_behavior_independence: ShaderFloatControlsIndependence,
19025    ) -> Self {
19026        self.denorm_behavior_independence = denorm_behavior_independence;
19027        self
19028    }
19029    #[inline]
19030    pub fn rounding_mode_independence(
19031        mut self,
19032        rounding_mode_independence: ShaderFloatControlsIndependence,
19033    ) -> Self {
19034        self.rounding_mode_independence = rounding_mode_independence;
19035        self
19036    }
19037    #[inline]
19038    pub fn shader_signed_zero_inf_nan_preserve_float16(
19039        mut self,
19040        shader_signed_zero_inf_nan_preserve_float16: bool,
19041    ) -> Self {
19042        self.shader_signed_zero_inf_nan_preserve_float16 =
19043            shader_signed_zero_inf_nan_preserve_float16.into();
19044        self
19045    }
19046    #[inline]
19047    pub fn shader_signed_zero_inf_nan_preserve_float32(
19048        mut self,
19049        shader_signed_zero_inf_nan_preserve_float32: bool,
19050    ) -> Self {
19051        self.shader_signed_zero_inf_nan_preserve_float32 =
19052            shader_signed_zero_inf_nan_preserve_float32.into();
19053        self
19054    }
19055    #[inline]
19056    pub fn shader_signed_zero_inf_nan_preserve_float64(
19057        mut self,
19058        shader_signed_zero_inf_nan_preserve_float64: bool,
19059    ) -> Self {
19060        self.shader_signed_zero_inf_nan_preserve_float64 =
19061            shader_signed_zero_inf_nan_preserve_float64.into();
19062        self
19063    }
19064    #[inline]
19065    pub fn shader_denorm_preserve_float16(mut self, shader_denorm_preserve_float16: bool) -> Self {
19066        self.shader_denorm_preserve_float16 = shader_denorm_preserve_float16.into();
19067        self
19068    }
19069    #[inline]
19070    pub fn shader_denorm_preserve_float32(mut self, shader_denorm_preserve_float32: bool) -> Self {
19071        self.shader_denorm_preserve_float32 = shader_denorm_preserve_float32.into();
19072        self
19073    }
19074    #[inline]
19075    pub fn shader_denorm_preserve_float64(mut self, shader_denorm_preserve_float64: bool) -> Self {
19076        self.shader_denorm_preserve_float64 = shader_denorm_preserve_float64.into();
19077        self
19078    }
19079    #[inline]
19080    pub fn shader_denorm_flush_to_zero_float16(
19081        mut self,
19082        shader_denorm_flush_to_zero_float16: bool,
19083    ) -> Self {
19084        self.shader_denorm_flush_to_zero_float16 = shader_denorm_flush_to_zero_float16.into();
19085        self
19086    }
19087    #[inline]
19088    pub fn shader_denorm_flush_to_zero_float32(
19089        mut self,
19090        shader_denorm_flush_to_zero_float32: bool,
19091    ) -> Self {
19092        self.shader_denorm_flush_to_zero_float32 = shader_denorm_flush_to_zero_float32.into();
19093        self
19094    }
19095    #[inline]
19096    pub fn shader_denorm_flush_to_zero_float64(
19097        mut self,
19098        shader_denorm_flush_to_zero_float64: bool,
19099    ) -> Self {
19100        self.shader_denorm_flush_to_zero_float64 = shader_denorm_flush_to_zero_float64.into();
19101        self
19102    }
19103    #[inline]
19104    pub fn shader_rounding_mode_rte_float16(
19105        mut self,
19106        shader_rounding_mode_rte_float16: bool,
19107    ) -> Self {
19108        self.shader_rounding_mode_rte_float16 = shader_rounding_mode_rte_float16.into();
19109        self
19110    }
19111    #[inline]
19112    pub fn shader_rounding_mode_rte_float32(
19113        mut self,
19114        shader_rounding_mode_rte_float32: bool,
19115    ) -> Self {
19116        self.shader_rounding_mode_rte_float32 = shader_rounding_mode_rte_float32.into();
19117        self
19118    }
19119    #[inline]
19120    pub fn shader_rounding_mode_rte_float64(
19121        mut self,
19122        shader_rounding_mode_rte_float64: bool,
19123    ) -> Self {
19124        self.shader_rounding_mode_rte_float64 = shader_rounding_mode_rte_float64.into();
19125        self
19126    }
19127    #[inline]
19128    pub fn shader_rounding_mode_rtz_float16(
19129        mut self,
19130        shader_rounding_mode_rtz_float16: bool,
19131    ) -> Self {
19132        self.shader_rounding_mode_rtz_float16 = shader_rounding_mode_rtz_float16.into();
19133        self
19134    }
19135    #[inline]
19136    pub fn shader_rounding_mode_rtz_float32(
19137        mut self,
19138        shader_rounding_mode_rtz_float32: bool,
19139    ) -> Self {
19140        self.shader_rounding_mode_rtz_float32 = shader_rounding_mode_rtz_float32.into();
19141        self
19142    }
19143    #[inline]
19144    pub fn shader_rounding_mode_rtz_float64(
19145        mut self,
19146        shader_rounding_mode_rtz_float64: bool,
19147    ) -> Self {
19148        self.shader_rounding_mode_rtz_float64 = shader_rounding_mode_rtz_float64.into();
19149        self
19150    }
19151}
19152#[repr(C)]
19153#[cfg_attr(feature = "debug", derive(Debug))]
19154#[derive(Copy, Clone)]
19155#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceHostQueryResetFeatures.html>"]
19156#[must_use]
19157pub struct PhysicalDeviceHostQueryResetFeatures<'a> {
19158    pub s_type: StructureType,
19159    pub p_next: *mut c_void,
19160    pub host_query_reset: Bool32,
19161    pub _marker: PhantomData<&'a ()>,
19162}
19163unsafe impl Send for PhysicalDeviceHostQueryResetFeatures<'_> {}
19164unsafe impl Sync for PhysicalDeviceHostQueryResetFeatures<'_> {}
19165impl ::core::default::Default for PhysicalDeviceHostQueryResetFeatures<'_> {
19166    #[inline]
19167    fn default() -> Self {
19168        Self {
19169            s_type: Self::STRUCTURE_TYPE,
19170            p_next: ::core::ptr::null_mut(),
19171            host_query_reset: Bool32::default(),
19172            _marker: PhantomData,
19173        }
19174    }
19175}
19176unsafe impl<'a> TaggedStructure for PhysicalDeviceHostQueryResetFeatures<'a> {
19177    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES;
19178}
19179unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceHostQueryResetFeatures<'_> {}
19180unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceHostQueryResetFeatures<'_> {}
19181impl<'a> PhysicalDeviceHostQueryResetFeatures<'a> {
19182    #[inline]
19183    pub fn host_query_reset(mut self, host_query_reset: bool) -> Self {
19184        self.host_query_reset = host_query_reset.into();
19185        self
19186    }
19187}
19188#[repr(C)]
19189#[cfg_attr(feature = "debug", derive(Debug))]
19190#[derive(Copy, Clone, Default)]
19191#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkNativeBufferUsage2ANDROID.html>"]
19192#[must_use]
19193pub struct NativeBufferUsage2ANDROID {
19194    pub consumer: u64,
19195    pub producer: u64,
19196}
19197impl NativeBufferUsage2ANDROID {
19198    #[inline]
19199    pub fn consumer(mut self, consumer: u64) -> Self {
19200        self.consumer = consumer;
19201        self
19202    }
19203    #[inline]
19204    pub fn producer(mut self, producer: u64) -> Self {
19205        self.producer = producer;
19206        self
19207    }
19208}
19209#[repr(C)]
19210#[cfg_attr(feature = "debug", derive(Debug))]
19211#[derive(Copy, Clone)]
19212#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkNativeBufferANDROID.html>"]
19213#[must_use]
19214pub struct NativeBufferANDROID<'a> {
19215    pub s_type: StructureType,
19216    pub p_next: *const c_void,
19217    pub handle: *const c_void,
19218    pub stride: c_int,
19219    pub format: c_int,
19220    pub usage: c_int,
19221    pub usage2: NativeBufferUsage2ANDROID,
19222    pub _marker: PhantomData<&'a ()>,
19223}
19224unsafe impl Send for NativeBufferANDROID<'_> {}
19225unsafe impl Sync for NativeBufferANDROID<'_> {}
19226impl ::core::default::Default for NativeBufferANDROID<'_> {
19227    #[inline]
19228    fn default() -> Self {
19229        Self {
19230            s_type: Self::STRUCTURE_TYPE,
19231            p_next: ::core::ptr::null(),
19232            handle: ::core::ptr::null(),
19233            stride: c_int::default(),
19234            format: c_int::default(),
19235            usage: c_int::default(),
19236            usage2: NativeBufferUsage2ANDROID::default(),
19237            _marker: PhantomData,
19238        }
19239    }
19240}
19241unsafe impl<'a> TaggedStructure for NativeBufferANDROID<'a> {
19242    const STRUCTURE_TYPE: StructureType = StructureType::NATIVE_BUFFER_ANDROID;
19243}
19244impl<'a> NativeBufferANDROID<'a> {
19245    #[inline]
19246    pub fn handle(mut self, handle: *const c_void) -> Self {
19247        self.handle = handle;
19248        self
19249    }
19250    #[inline]
19251    pub fn stride(mut self, stride: c_int) -> Self {
19252        self.stride = stride;
19253        self
19254    }
19255    #[inline]
19256    pub fn format(mut self, format: c_int) -> Self {
19257        self.format = format;
19258        self
19259    }
19260    #[inline]
19261    pub fn usage(mut self, usage: c_int) -> Self {
19262        self.usage = usage;
19263        self
19264    }
19265    #[inline]
19266    pub fn usage2(mut self, usage2: NativeBufferUsage2ANDROID) -> Self {
19267        self.usage2 = usage2;
19268        self
19269    }
19270}
19271#[repr(C)]
19272#[cfg_attr(feature = "debug", derive(Debug))]
19273#[derive(Copy, Clone)]
19274#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainImageCreateInfoANDROID.html>"]
19275#[must_use]
19276pub struct SwapchainImageCreateInfoANDROID<'a> {
19277    pub s_type: StructureType,
19278    pub p_next: *const c_void,
19279    pub usage: SwapchainImageUsageFlagsANDROID,
19280    pub _marker: PhantomData<&'a ()>,
19281}
19282unsafe impl Send for SwapchainImageCreateInfoANDROID<'_> {}
19283unsafe impl Sync for SwapchainImageCreateInfoANDROID<'_> {}
19284impl ::core::default::Default for SwapchainImageCreateInfoANDROID<'_> {
19285    #[inline]
19286    fn default() -> Self {
19287        Self {
19288            s_type: Self::STRUCTURE_TYPE,
19289            p_next: ::core::ptr::null(),
19290            usage: SwapchainImageUsageFlagsANDROID::default(),
19291            _marker: PhantomData,
19292        }
19293    }
19294}
19295unsafe impl<'a> TaggedStructure for SwapchainImageCreateInfoANDROID<'a> {
19296    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID;
19297}
19298impl<'a> SwapchainImageCreateInfoANDROID<'a> {
19299    #[inline]
19300    pub fn usage(mut self, usage: SwapchainImageUsageFlagsANDROID) -> Self {
19301        self.usage = usage;
19302        self
19303    }
19304}
19305#[repr(C)]
19306#[cfg_attr(feature = "debug", derive(Debug))]
19307#[derive(Copy, Clone)]
19308#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePresentationPropertiesANDROID.html>"]
19309#[must_use]
19310pub struct PhysicalDevicePresentationPropertiesANDROID<'a> {
19311    pub s_type: StructureType,
19312    pub p_next: *const c_void,
19313    pub shared_image: Bool32,
19314    pub _marker: PhantomData<&'a ()>,
19315}
19316unsafe impl Send for PhysicalDevicePresentationPropertiesANDROID<'_> {}
19317unsafe impl Sync for PhysicalDevicePresentationPropertiesANDROID<'_> {}
19318impl ::core::default::Default for PhysicalDevicePresentationPropertiesANDROID<'_> {
19319    #[inline]
19320    fn default() -> Self {
19321        Self {
19322            s_type: Self::STRUCTURE_TYPE,
19323            p_next: ::core::ptr::null(),
19324            shared_image: Bool32::default(),
19325            _marker: PhantomData,
19326        }
19327    }
19328}
19329unsafe impl<'a> TaggedStructure for PhysicalDevicePresentationPropertiesANDROID<'a> {
19330    const STRUCTURE_TYPE: StructureType =
19331        StructureType::PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID;
19332}
19333impl<'a> PhysicalDevicePresentationPropertiesANDROID<'a> {
19334    #[inline]
19335    pub fn shared_image(mut self, shared_image: bool) -> Self {
19336        self.shared_image = shared_image.into();
19337        self
19338    }
19339}
19340#[repr(C)]
19341#[cfg_attr(feature = "debug", derive(Debug))]
19342#[derive(Copy, Clone, Default)]
19343#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderResourceUsageAMD.html>"]
19344#[must_use]
19345pub struct ShaderResourceUsageAMD {
19346    pub num_used_vgprs: u32,
19347    pub num_used_sgprs: u32,
19348    pub lds_size_per_local_work_group: u32,
19349    pub lds_usage_size_in_bytes: usize,
19350    pub scratch_mem_usage_in_bytes: usize,
19351}
19352impl ShaderResourceUsageAMD {
19353    #[inline]
19354    pub fn num_used_vgprs(mut self, num_used_vgprs: u32) -> Self {
19355        self.num_used_vgprs = num_used_vgprs;
19356        self
19357    }
19358    #[inline]
19359    pub fn num_used_sgprs(mut self, num_used_sgprs: u32) -> Self {
19360        self.num_used_sgprs = num_used_sgprs;
19361        self
19362    }
19363    #[inline]
19364    pub fn lds_size_per_local_work_group(mut self, lds_size_per_local_work_group: u32) -> Self {
19365        self.lds_size_per_local_work_group = lds_size_per_local_work_group;
19366        self
19367    }
19368    #[inline]
19369    pub fn lds_usage_size_in_bytes(mut self, lds_usage_size_in_bytes: usize) -> Self {
19370        self.lds_usage_size_in_bytes = lds_usage_size_in_bytes;
19371        self
19372    }
19373    #[inline]
19374    pub fn scratch_mem_usage_in_bytes(mut self, scratch_mem_usage_in_bytes: usize) -> Self {
19375        self.scratch_mem_usage_in_bytes = scratch_mem_usage_in_bytes;
19376        self
19377    }
19378}
19379#[repr(C)]
19380#[cfg_attr(feature = "debug", derive(Debug))]
19381#[derive(Copy, Clone)]
19382#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderStatisticsInfoAMD.html>"]
19383#[must_use]
19384pub struct ShaderStatisticsInfoAMD {
19385    pub shader_stage_mask: ShaderStageFlags,
19386    pub resource_usage: ShaderResourceUsageAMD,
19387    pub num_physical_vgprs: u32,
19388    pub num_physical_sgprs: u32,
19389    pub num_available_vgprs: u32,
19390    pub num_available_sgprs: u32,
19391    pub compute_work_group_size: [u32; 3],
19392}
19393impl ::core::default::Default for ShaderStatisticsInfoAMD {
19394    #[inline]
19395    fn default() -> Self {
19396        Self {
19397            shader_stage_mask: ShaderStageFlags::default(),
19398            resource_usage: ShaderResourceUsageAMD::default(),
19399            num_physical_vgprs: u32::default(),
19400            num_physical_sgprs: u32::default(),
19401            num_available_vgprs: u32::default(),
19402            num_available_sgprs: u32::default(),
19403            compute_work_group_size: unsafe { ::core::mem::zeroed() },
19404        }
19405    }
19406}
19407impl ShaderStatisticsInfoAMD {
19408    #[inline]
19409    pub fn shader_stage_mask(mut self, shader_stage_mask: ShaderStageFlags) -> Self {
19410        self.shader_stage_mask = shader_stage_mask;
19411        self
19412    }
19413    #[inline]
19414    pub fn resource_usage(mut self, resource_usage: ShaderResourceUsageAMD) -> Self {
19415        self.resource_usage = resource_usage;
19416        self
19417    }
19418    #[inline]
19419    pub fn num_physical_vgprs(mut self, num_physical_vgprs: u32) -> Self {
19420        self.num_physical_vgprs = num_physical_vgprs;
19421        self
19422    }
19423    #[inline]
19424    pub fn num_physical_sgprs(mut self, num_physical_sgprs: u32) -> Self {
19425        self.num_physical_sgprs = num_physical_sgprs;
19426        self
19427    }
19428    #[inline]
19429    pub fn num_available_vgprs(mut self, num_available_vgprs: u32) -> Self {
19430        self.num_available_vgprs = num_available_vgprs;
19431        self
19432    }
19433    #[inline]
19434    pub fn num_available_sgprs(mut self, num_available_sgprs: u32) -> Self {
19435        self.num_available_sgprs = num_available_sgprs;
19436        self
19437    }
19438    #[inline]
19439    pub fn compute_work_group_size(mut self, compute_work_group_size: [u32; 3]) -> Self {
19440        self.compute_work_group_size = compute_work_group_size;
19441        self
19442    }
19443}
19444#[repr(C)]
19445#[cfg_attr(feature = "debug", derive(Debug))]
19446#[derive(Copy, Clone)]
19447#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceQueueGlobalPriorityCreateInfoKHR.html>"]
19448#[must_use]
19449pub struct DeviceQueueGlobalPriorityCreateInfoKHR<'a> {
19450    pub s_type: StructureType,
19451    pub p_next: *const c_void,
19452    pub global_priority: QueueGlobalPriorityKHR,
19453    pub _marker: PhantomData<&'a ()>,
19454}
19455unsafe impl Send for DeviceQueueGlobalPriorityCreateInfoKHR<'_> {}
19456unsafe impl Sync for DeviceQueueGlobalPriorityCreateInfoKHR<'_> {}
19457impl ::core::default::Default for DeviceQueueGlobalPriorityCreateInfoKHR<'_> {
19458    #[inline]
19459    fn default() -> Self {
19460        Self {
19461            s_type: Self::STRUCTURE_TYPE,
19462            p_next: ::core::ptr::null(),
19463            global_priority: QueueGlobalPriorityKHR::default(),
19464            _marker: PhantomData,
19465        }
19466    }
19467}
19468unsafe impl<'a> TaggedStructure for DeviceQueueGlobalPriorityCreateInfoKHR<'a> {
19469    const STRUCTURE_TYPE: StructureType =
19470        StructureType::DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR;
19471}
19472unsafe impl ExtendsDeviceQueueCreateInfo for DeviceQueueGlobalPriorityCreateInfoKHR<'_> {}
19473impl<'a> DeviceQueueGlobalPriorityCreateInfoKHR<'a> {
19474    #[inline]
19475    pub fn global_priority(mut self, global_priority: QueueGlobalPriorityKHR) -> Self {
19476        self.global_priority = global_priority;
19477        self
19478    }
19479}
19480#[repr(C)]
19481#[cfg_attr(feature = "debug", derive(Debug))]
19482#[derive(Copy, Clone)]
19483#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR.html>"]
19484#[must_use]
19485pub struct PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'a> {
19486    pub s_type: StructureType,
19487    pub p_next: *mut c_void,
19488    pub global_priority_query: Bool32,
19489    pub _marker: PhantomData<&'a ()>,
19490}
19491unsafe impl Send for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'_> {}
19492unsafe impl Sync for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'_> {}
19493impl ::core::default::Default for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'_> {
19494    #[inline]
19495    fn default() -> Self {
19496        Self {
19497            s_type: Self::STRUCTURE_TYPE,
19498            p_next: ::core::ptr::null_mut(),
19499            global_priority_query: Bool32::default(),
19500            _marker: PhantomData,
19501        }
19502    }
19503}
19504unsafe impl<'a> TaggedStructure for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'a> {
19505    const STRUCTURE_TYPE: StructureType =
19506        StructureType::PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR;
19507}
19508unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'_> {}
19509unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'_> {}
19510impl<'a> PhysicalDeviceGlobalPriorityQueryFeaturesKHR<'a> {
19511    #[inline]
19512    pub fn global_priority_query(mut self, global_priority_query: bool) -> Self {
19513        self.global_priority_query = global_priority_query.into();
19514        self
19515    }
19516}
19517#[repr(C)]
19518#[derive(Copy, Clone)]
19519#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyGlobalPriorityPropertiesKHR.html>"]
19520#[must_use]
19521pub struct QueueFamilyGlobalPriorityPropertiesKHR<'a> {
19522    pub s_type: StructureType,
19523    pub p_next: *mut c_void,
19524    pub priority_count: u32,
19525    pub priorities: [QueueGlobalPriorityKHR; MAX_GLOBAL_PRIORITY_SIZE_KHR],
19526    pub _marker: PhantomData<&'a ()>,
19527}
19528unsafe impl Send for QueueFamilyGlobalPriorityPropertiesKHR<'_> {}
19529unsafe impl Sync for QueueFamilyGlobalPriorityPropertiesKHR<'_> {}
19530#[cfg(feature = "debug")]
19531impl fmt::Debug for QueueFamilyGlobalPriorityPropertiesKHR<'_> {
19532    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
19533        fmt.debug_struct("QueueFamilyGlobalPriorityPropertiesKHR")
19534            .field("s_type", &self.s_type)
19535            .field("p_next", &self.p_next)
19536            .field("priority_count", &self.priority_count)
19537            .field("priorities", &self.priorities_as_slice())
19538            .finish()
19539    }
19540}
19541impl ::core::default::Default for QueueFamilyGlobalPriorityPropertiesKHR<'_> {
19542    #[inline]
19543    fn default() -> Self {
19544        Self {
19545            s_type: Self::STRUCTURE_TYPE,
19546            p_next: ::core::ptr::null_mut(),
19547            priority_count: u32::default(),
19548            priorities: unsafe { ::core::mem::zeroed() },
19549            _marker: PhantomData,
19550        }
19551    }
19552}
19553unsafe impl<'a> TaggedStructure for QueueFamilyGlobalPriorityPropertiesKHR<'a> {
19554    const STRUCTURE_TYPE: StructureType =
19555        StructureType::QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR;
19556}
19557unsafe impl ExtendsQueueFamilyProperties2 for QueueFamilyGlobalPriorityPropertiesKHR<'_> {}
19558impl<'a> QueueFamilyGlobalPriorityPropertiesKHR<'a> {
19559    #[inline]
19560    pub fn priorities(mut self, priorities: &'_ [QueueGlobalPriorityKHR]) -> Self {
19561        self.priority_count = priorities.len() as _;
19562        self.priorities[..priorities.len()].copy_from_slice(priorities);
19563        self
19564    }
19565    #[inline]
19566    pub fn priorities_as_slice(&self) -> &[QueueGlobalPriorityKHR] {
19567        &self.priorities[..self.priority_count as _]
19568    }
19569}
19570#[repr(C)]
19571#[cfg_attr(feature = "debug", derive(Debug))]
19572#[derive(Copy, Clone)]
19573#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsObjectNameInfoEXT.html>"]
19574#[must_use]
19575pub struct DebugUtilsObjectNameInfoEXT<'a> {
19576    pub s_type: StructureType,
19577    pub p_next: *const c_void,
19578    pub object_type: ObjectType,
19579    pub object_handle: u64,
19580    pub p_object_name: *const c_char,
19581    pub _marker: PhantomData<&'a ()>,
19582}
19583unsafe impl Send for DebugUtilsObjectNameInfoEXT<'_> {}
19584unsafe impl Sync for DebugUtilsObjectNameInfoEXT<'_> {}
19585impl ::core::default::Default for DebugUtilsObjectNameInfoEXT<'_> {
19586    #[inline]
19587    fn default() -> Self {
19588        Self {
19589            s_type: Self::STRUCTURE_TYPE,
19590            p_next: ::core::ptr::null(),
19591            object_type: ObjectType::default(),
19592            object_handle: u64::default(),
19593            p_object_name: ::core::ptr::null(),
19594            _marker: PhantomData,
19595        }
19596    }
19597}
19598unsafe impl<'a> TaggedStructure for DebugUtilsObjectNameInfoEXT<'a> {
19599    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
19600}
19601unsafe impl ExtendsPipelineShaderStageCreateInfo for DebugUtilsObjectNameInfoEXT<'_> {}
19602impl<'a> DebugUtilsObjectNameInfoEXT<'a> {
19603    #[inline]
19604    pub fn object_handle<T: Handle>(mut self, object_handle: T) -> Self {
19605        self.object_handle = object_handle.as_raw();
19606        self.object_type = T::TYPE;
19607        self
19608    }
19609    #[inline]
19610    pub fn object_name(mut self, object_name: &'a CStr) -> Self {
19611        self.p_object_name = object_name.as_ptr();
19612        self
19613    }
19614    #[inline]
19615    pub unsafe fn object_name_as_c_str(&self) -> Option<&CStr> {
19616        if self.p_object_name.is_null() {
19617            None
19618        } else {
19619            Some(CStr::from_ptr(self.p_object_name))
19620        }
19621    }
19622}
19623#[repr(C)]
19624#[cfg_attr(feature = "debug", derive(Debug))]
19625#[derive(Copy, Clone)]
19626#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsObjectTagInfoEXT.html>"]
19627#[must_use]
19628pub struct DebugUtilsObjectTagInfoEXT<'a> {
19629    pub s_type: StructureType,
19630    pub p_next: *const c_void,
19631    pub object_type: ObjectType,
19632    pub object_handle: u64,
19633    pub tag_name: u64,
19634    pub tag_size: usize,
19635    pub p_tag: *const c_void,
19636    pub _marker: PhantomData<&'a ()>,
19637}
19638unsafe impl Send for DebugUtilsObjectTagInfoEXT<'_> {}
19639unsafe impl Sync for DebugUtilsObjectTagInfoEXT<'_> {}
19640impl ::core::default::Default for DebugUtilsObjectTagInfoEXT<'_> {
19641    #[inline]
19642    fn default() -> Self {
19643        Self {
19644            s_type: Self::STRUCTURE_TYPE,
19645            p_next: ::core::ptr::null(),
19646            object_type: ObjectType::default(),
19647            object_handle: u64::default(),
19648            tag_name: u64::default(),
19649            tag_size: usize::default(),
19650            p_tag: ::core::ptr::null(),
19651            _marker: PhantomData,
19652        }
19653    }
19654}
19655unsafe impl<'a> TaggedStructure for DebugUtilsObjectTagInfoEXT<'a> {
19656    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_UTILS_OBJECT_TAG_INFO_EXT;
19657}
19658impl<'a> DebugUtilsObjectTagInfoEXT<'a> {
19659    #[inline]
19660    pub fn object_handle<T: Handle>(mut self, object_handle: T) -> Self {
19661        self.object_handle = object_handle.as_raw();
19662        self.object_type = T::TYPE;
19663        self
19664    }
19665    #[inline]
19666    pub fn tag_name(mut self, tag_name: u64) -> Self {
19667        self.tag_name = tag_name;
19668        self
19669    }
19670    #[inline]
19671    pub fn tag(mut self, tag: &'a [u8]) -> Self {
19672        self.tag_size = tag.len();
19673        self.p_tag = tag.as_ptr().cast();
19674        self
19675    }
19676}
19677#[repr(C)]
19678#[cfg_attr(feature = "debug", derive(Debug))]
19679#[derive(Copy, Clone)]
19680#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsLabelEXT.html>"]
19681#[must_use]
19682pub struct DebugUtilsLabelEXT<'a> {
19683    pub s_type: StructureType,
19684    pub p_next: *const c_void,
19685    pub p_label_name: *const c_char,
19686    pub color: [f32; 4],
19687    pub _marker: PhantomData<&'a ()>,
19688}
19689unsafe impl Send for DebugUtilsLabelEXT<'_> {}
19690unsafe impl Sync for DebugUtilsLabelEXT<'_> {}
19691impl ::core::default::Default for DebugUtilsLabelEXT<'_> {
19692    #[inline]
19693    fn default() -> Self {
19694        Self {
19695            s_type: Self::STRUCTURE_TYPE,
19696            p_next: ::core::ptr::null(),
19697            p_label_name: ::core::ptr::null(),
19698            color: unsafe { ::core::mem::zeroed() },
19699            _marker: PhantomData,
19700        }
19701    }
19702}
19703unsafe impl<'a> TaggedStructure for DebugUtilsLabelEXT<'a> {
19704    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_UTILS_LABEL_EXT;
19705}
19706impl<'a> DebugUtilsLabelEXT<'a> {
19707    #[inline]
19708    pub fn label_name(mut self, label_name: &'a CStr) -> Self {
19709        self.p_label_name = label_name.as_ptr();
19710        self
19711    }
19712    #[inline]
19713    pub unsafe fn label_name_as_c_str(&self) -> Option<&CStr> {
19714        if self.p_label_name.is_null() {
19715            None
19716        } else {
19717            Some(CStr::from_ptr(self.p_label_name))
19718        }
19719    }
19720    #[inline]
19721    pub fn color(mut self, color: [f32; 4]) -> Self {
19722        self.color = color;
19723        self
19724    }
19725}
19726#[repr(C)]
19727#[derive(Copy, Clone)]
19728#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsMessengerCreateInfoEXT.html>"]
19729#[must_use]
19730pub struct DebugUtilsMessengerCreateInfoEXT<'a> {
19731    pub s_type: StructureType,
19732    pub p_next: *const c_void,
19733    pub flags: DebugUtilsMessengerCreateFlagsEXT,
19734    pub message_severity: DebugUtilsMessageSeverityFlagsEXT,
19735    pub message_type: DebugUtilsMessageTypeFlagsEXT,
19736    pub pfn_user_callback: PFN_vkDebugUtilsMessengerCallbackEXT,
19737    pub p_user_data: *mut c_void,
19738    pub _marker: PhantomData<&'a ()>,
19739}
19740unsafe impl Send for DebugUtilsMessengerCreateInfoEXT<'_> {}
19741unsafe impl Sync for DebugUtilsMessengerCreateInfoEXT<'_> {}
19742#[cfg(feature = "debug")]
19743impl fmt::Debug for DebugUtilsMessengerCreateInfoEXT<'_> {
19744    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
19745        fmt.debug_struct("DebugUtilsMessengerCreateInfoEXT")
19746            .field("s_type", &self.s_type)
19747            .field("p_next", &self.p_next)
19748            .field("flags", &self.flags)
19749            .field("message_severity", &self.message_severity)
19750            .field("message_type", &self.message_type)
19751            .field(
19752                "pfn_user_callback",
19753                &(self.pfn_user_callback.map(|x| x as *const ())),
19754            )
19755            .field("p_user_data", &self.p_user_data)
19756            .finish()
19757    }
19758}
19759impl ::core::default::Default for DebugUtilsMessengerCreateInfoEXT<'_> {
19760    #[inline]
19761    fn default() -> Self {
19762        Self {
19763            s_type: Self::STRUCTURE_TYPE,
19764            p_next: ::core::ptr::null(),
19765            flags: DebugUtilsMessengerCreateFlagsEXT::default(),
19766            message_severity: DebugUtilsMessageSeverityFlagsEXT::default(),
19767            message_type: DebugUtilsMessageTypeFlagsEXT::default(),
19768            pfn_user_callback: PFN_vkDebugUtilsMessengerCallbackEXT::default(),
19769            p_user_data: ::core::ptr::null_mut(),
19770            _marker: PhantomData,
19771        }
19772    }
19773}
19774unsafe impl<'a> TaggedStructure for DebugUtilsMessengerCreateInfoEXT<'a> {
19775    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
19776}
19777unsafe impl ExtendsInstanceCreateInfo for DebugUtilsMessengerCreateInfoEXT<'_> {}
19778impl<'a> DebugUtilsMessengerCreateInfoEXT<'a> {
19779    #[inline]
19780    pub fn flags(mut self, flags: DebugUtilsMessengerCreateFlagsEXT) -> Self {
19781        self.flags = flags;
19782        self
19783    }
19784    #[inline]
19785    pub fn message_severity(mut self, message_severity: DebugUtilsMessageSeverityFlagsEXT) -> Self {
19786        self.message_severity = message_severity;
19787        self
19788    }
19789    #[inline]
19790    pub fn message_type(mut self, message_type: DebugUtilsMessageTypeFlagsEXT) -> Self {
19791        self.message_type = message_type;
19792        self
19793    }
19794    #[inline]
19795    pub fn pfn_user_callback(
19796        mut self,
19797        pfn_user_callback: PFN_vkDebugUtilsMessengerCallbackEXT,
19798    ) -> Self {
19799        self.pfn_user_callback = pfn_user_callback;
19800        self
19801    }
19802    #[inline]
19803    pub fn user_data(mut self, user_data: *mut c_void) -> Self {
19804        self.p_user_data = user_data;
19805        self
19806    }
19807}
19808#[repr(C)]
19809#[cfg_attr(feature = "debug", derive(Debug))]
19810#[derive(Copy, Clone)]
19811#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDebugUtilsMessengerCallbackDataEXT.html>"]
19812#[must_use]
19813pub struct DebugUtilsMessengerCallbackDataEXT<'a> {
19814    pub s_type: StructureType,
19815    pub p_next: *const c_void,
19816    pub flags: DebugUtilsMessengerCallbackDataFlagsEXT,
19817    pub p_message_id_name: *const c_char,
19818    pub message_id_number: i32,
19819    pub p_message: *const c_char,
19820    pub queue_label_count: u32,
19821    pub p_queue_labels: *const DebugUtilsLabelEXT<'a>,
19822    pub cmd_buf_label_count: u32,
19823    pub p_cmd_buf_labels: *const DebugUtilsLabelEXT<'a>,
19824    pub object_count: u32,
19825    pub p_objects: *const DebugUtilsObjectNameInfoEXT<'a>,
19826    pub _marker: PhantomData<&'a ()>,
19827}
19828unsafe impl Send for DebugUtilsMessengerCallbackDataEXT<'_> {}
19829unsafe impl Sync for DebugUtilsMessengerCallbackDataEXT<'_> {}
19830impl ::core::default::Default for DebugUtilsMessengerCallbackDataEXT<'_> {
19831    #[inline]
19832    fn default() -> Self {
19833        Self {
19834            s_type: Self::STRUCTURE_TYPE,
19835            p_next: ::core::ptr::null(),
19836            flags: DebugUtilsMessengerCallbackDataFlagsEXT::default(),
19837            p_message_id_name: ::core::ptr::null(),
19838            message_id_number: i32::default(),
19839            p_message: ::core::ptr::null(),
19840            queue_label_count: u32::default(),
19841            p_queue_labels: ::core::ptr::null(),
19842            cmd_buf_label_count: u32::default(),
19843            p_cmd_buf_labels: ::core::ptr::null(),
19844            object_count: u32::default(),
19845            p_objects: ::core::ptr::null(),
19846            _marker: PhantomData,
19847        }
19848    }
19849}
19850unsafe impl<'a> TaggedStructure for DebugUtilsMessengerCallbackDataEXT<'a> {
19851    const STRUCTURE_TYPE: StructureType = StructureType::DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
19852}
19853pub unsafe trait ExtendsDebugUtilsMessengerCallbackDataEXT {}
19854impl<'a> DebugUtilsMessengerCallbackDataEXT<'a> {
19855    #[inline]
19856    pub fn flags(mut self, flags: DebugUtilsMessengerCallbackDataFlagsEXT) -> Self {
19857        self.flags = flags;
19858        self
19859    }
19860    #[inline]
19861    pub fn message_id_name(mut self, message_id_name: &'a CStr) -> Self {
19862        self.p_message_id_name = message_id_name.as_ptr();
19863        self
19864    }
19865    #[inline]
19866    pub unsafe fn message_id_name_as_c_str(&self) -> Option<&CStr> {
19867        if self.p_message_id_name.is_null() {
19868            None
19869        } else {
19870            Some(CStr::from_ptr(self.p_message_id_name))
19871        }
19872    }
19873    #[inline]
19874    pub fn message_id_number(mut self, message_id_number: i32) -> Self {
19875        self.message_id_number = message_id_number;
19876        self
19877    }
19878    #[inline]
19879    pub fn message(mut self, message: &'a CStr) -> Self {
19880        self.p_message = message.as_ptr();
19881        self
19882    }
19883    #[inline]
19884    pub unsafe fn message_as_c_str(&self) -> Option<&CStr> {
19885        if self.p_message.is_null() {
19886            None
19887        } else {
19888            Some(CStr::from_ptr(self.p_message))
19889        }
19890    }
19891    #[inline]
19892    pub fn queue_labels(mut self, queue_labels: &'a [DebugUtilsLabelEXT<'a>]) -> Self {
19893        self.queue_label_count = queue_labels.len() as _;
19894        self.p_queue_labels = queue_labels.as_ptr();
19895        self
19896    }
19897    #[inline]
19898    pub fn cmd_buf_labels(mut self, cmd_buf_labels: &'a [DebugUtilsLabelEXT<'a>]) -> Self {
19899        self.cmd_buf_label_count = cmd_buf_labels.len() as _;
19900        self.p_cmd_buf_labels = cmd_buf_labels.as_ptr();
19901        self
19902    }
19903    #[inline]
19904    pub fn objects(mut self, objects: &'a [DebugUtilsObjectNameInfoEXT<'a>]) -> Self {
19905        self.object_count = objects.len() as _;
19906        self.p_objects = objects.as_ptr();
19907        self
19908    }
19909    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
19910    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
19911    #[doc = r" valid extension structs can be pushed into the chain."]
19912    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
19913    #[doc = r" chain will look like `A -> D -> B -> C`."]
19914    pub fn push_next<T: ExtendsDebugUtilsMessengerCallbackDataEXT + ?Sized>(
19915        mut self,
19916        next: &'a mut T,
19917    ) -> Self {
19918        unsafe {
19919            let next_ptr = <*const T>::cast(next);
19920            let last_next = ptr_chain_iter(next).last().unwrap();
19921            (*last_next).p_next = self.p_next as _;
19922            self.p_next = next_ptr;
19923        }
19924        self
19925    }
19926}
19927#[repr(C)]
19928#[cfg_attr(feature = "debug", derive(Debug))]
19929#[derive(Copy, Clone)]
19930#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceMemoryReportFeaturesEXT.html>"]
19931#[must_use]
19932pub struct PhysicalDeviceDeviceMemoryReportFeaturesEXT<'a> {
19933    pub s_type: StructureType,
19934    pub p_next: *mut c_void,
19935    pub device_memory_report: Bool32,
19936    pub _marker: PhantomData<&'a ()>,
19937}
19938unsafe impl Send for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'_> {}
19939unsafe impl Sync for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'_> {}
19940impl ::core::default::Default for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'_> {
19941    #[inline]
19942    fn default() -> Self {
19943        Self {
19944            s_type: Self::STRUCTURE_TYPE,
19945            p_next: ::core::ptr::null_mut(),
19946            device_memory_report: Bool32::default(),
19947            _marker: PhantomData,
19948        }
19949    }
19950}
19951unsafe impl<'a> TaggedStructure for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'a> {
19952    const STRUCTURE_TYPE: StructureType =
19953        StructureType::PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT;
19954}
19955unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'_> {}
19956unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDeviceMemoryReportFeaturesEXT<'_> {}
19957impl<'a> PhysicalDeviceDeviceMemoryReportFeaturesEXT<'a> {
19958    #[inline]
19959    pub fn device_memory_report(mut self, device_memory_report: bool) -> Self {
19960        self.device_memory_report = device_memory_report.into();
19961        self
19962    }
19963}
19964#[repr(C)]
19965#[derive(Copy, Clone)]
19966#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceDeviceMemoryReportCreateInfoEXT.html>"]
19967#[must_use]
19968pub struct DeviceDeviceMemoryReportCreateInfoEXT<'a> {
19969    pub s_type: StructureType,
19970    pub p_next: *const c_void,
19971    pub flags: DeviceMemoryReportFlagsEXT,
19972    pub pfn_user_callback: PFN_vkDeviceMemoryReportCallbackEXT,
19973    pub p_user_data: *mut c_void,
19974    pub _marker: PhantomData<&'a ()>,
19975}
19976unsafe impl Send for DeviceDeviceMemoryReportCreateInfoEXT<'_> {}
19977unsafe impl Sync for DeviceDeviceMemoryReportCreateInfoEXT<'_> {}
19978#[cfg(feature = "debug")]
19979impl fmt::Debug for DeviceDeviceMemoryReportCreateInfoEXT<'_> {
19980    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
19981        fmt.debug_struct("DeviceDeviceMemoryReportCreateInfoEXT")
19982            .field("s_type", &self.s_type)
19983            .field("p_next", &self.p_next)
19984            .field("flags", &self.flags)
19985            .field(
19986                "pfn_user_callback",
19987                &(self.pfn_user_callback.map(|x| x as *const ())),
19988            )
19989            .field("p_user_data", &self.p_user_data)
19990            .finish()
19991    }
19992}
19993impl ::core::default::Default for DeviceDeviceMemoryReportCreateInfoEXT<'_> {
19994    #[inline]
19995    fn default() -> Self {
19996        Self {
19997            s_type: Self::STRUCTURE_TYPE,
19998            p_next: ::core::ptr::null(),
19999            flags: DeviceMemoryReportFlagsEXT::default(),
20000            pfn_user_callback: PFN_vkDeviceMemoryReportCallbackEXT::default(),
20001            p_user_data: ::core::ptr::null_mut(),
20002            _marker: PhantomData,
20003        }
20004    }
20005}
20006unsafe impl<'a> TaggedStructure for DeviceDeviceMemoryReportCreateInfoEXT<'a> {
20007    const STRUCTURE_TYPE: StructureType =
20008        StructureType::DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT;
20009}
20010unsafe impl ExtendsDeviceCreateInfo for DeviceDeviceMemoryReportCreateInfoEXT<'_> {}
20011impl<'a> DeviceDeviceMemoryReportCreateInfoEXT<'a> {
20012    #[inline]
20013    pub fn flags(mut self, flags: DeviceMemoryReportFlagsEXT) -> Self {
20014        self.flags = flags;
20015        self
20016    }
20017    #[inline]
20018    pub fn pfn_user_callback(
20019        mut self,
20020        pfn_user_callback: PFN_vkDeviceMemoryReportCallbackEXT,
20021    ) -> Self {
20022        self.pfn_user_callback = pfn_user_callback;
20023        self
20024    }
20025    #[inline]
20026    pub fn user_data(mut self, user_data: *mut c_void) -> Self {
20027        self.p_user_data = user_data;
20028        self
20029    }
20030}
20031#[repr(C)]
20032#[cfg_attr(feature = "debug", derive(Debug))]
20033#[derive(Copy, Clone)]
20034#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceMemoryReportCallbackDataEXT.html>"]
20035#[must_use]
20036pub struct DeviceMemoryReportCallbackDataEXT<'a> {
20037    pub s_type: StructureType,
20038    pub p_next: *mut c_void,
20039    pub flags: DeviceMemoryReportFlagsEXT,
20040    pub ty: DeviceMemoryReportEventTypeEXT,
20041    pub memory_object_id: u64,
20042    pub size: DeviceSize,
20043    pub object_type: ObjectType,
20044    pub object_handle: u64,
20045    pub heap_index: u32,
20046    pub _marker: PhantomData<&'a ()>,
20047}
20048unsafe impl Send for DeviceMemoryReportCallbackDataEXT<'_> {}
20049unsafe impl Sync for DeviceMemoryReportCallbackDataEXT<'_> {}
20050impl ::core::default::Default for DeviceMemoryReportCallbackDataEXT<'_> {
20051    #[inline]
20052    fn default() -> Self {
20053        Self {
20054            s_type: Self::STRUCTURE_TYPE,
20055            p_next: ::core::ptr::null_mut(),
20056            flags: DeviceMemoryReportFlagsEXT::default(),
20057            ty: DeviceMemoryReportEventTypeEXT::default(),
20058            memory_object_id: u64::default(),
20059            size: DeviceSize::default(),
20060            object_type: ObjectType::default(),
20061            object_handle: u64::default(),
20062            heap_index: u32::default(),
20063            _marker: PhantomData,
20064        }
20065    }
20066}
20067unsafe impl<'a> TaggedStructure for DeviceMemoryReportCallbackDataEXT<'a> {
20068    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT;
20069}
20070impl<'a> DeviceMemoryReportCallbackDataEXT<'a> {
20071    #[inline]
20072    pub fn flags(mut self, flags: DeviceMemoryReportFlagsEXT) -> Self {
20073        self.flags = flags;
20074        self
20075    }
20076    #[inline]
20077    pub fn ty(mut self, ty: DeviceMemoryReportEventTypeEXT) -> Self {
20078        self.ty = ty;
20079        self
20080    }
20081    #[inline]
20082    pub fn memory_object_id(mut self, memory_object_id: u64) -> Self {
20083        self.memory_object_id = memory_object_id;
20084        self
20085    }
20086    #[inline]
20087    pub fn size(mut self, size: DeviceSize) -> Self {
20088        self.size = size;
20089        self
20090    }
20091    #[inline]
20092    pub fn object_handle<T: Handle>(mut self, object_handle: T) -> Self {
20093        self.object_handle = object_handle.as_raw();
20094        self.object_type = T::TYPE;
20095        self
20096    }
20097    #[inline]
20098    pub fn heap_index(mut self, heap_index: u32) -> Self {
20099        self.heap_index = heap_index;
20100        self
20101    }
20102}
20103#[repr(C)]
20104#[cfg_attr(feature = "debug", derive(Debug))]
20105#[derive(Copy, Clone)]
20106#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryHostPointerInfoEXT.html>"]
20107#[must_use]
20108pub struct ImportMemoryHostPointerInfoEXT<'a> {
20109    pub s_type: StructureType,
20110    pub p_next: *const c_void,
20111    pub handle_type: ExternalMemoryHandleTypeFlags,
20112    pub p_host_pointer: *mut c_void,
20113    pub _marker: PhantomData<&'a ()>,
20114}
20115unsafe impl Send for ImportMemoryHostPointerInfoEXT<'_> {}
20116unsafe impl Sync for ImportMemoryHostPointerInfoEXT<'_> {}
20117impl ::core::default::Default for ImportMemoryHostPointerInfoEXT<'_> {
20118    #[inline]
20119    fn default() -> Self {
20120        Self {
20121            s_type: Self::STRUCTURE_TYPE,
20122            p_next: ::core::ptr::null(),
20123            handle_type: ExternalMemoryHandleTypeFlags::default(),
20124            p_host_pointer: ::core::ptr::null_mut(),
20125            _marker: PhantomData,
20126        }
20127    }
20128}
20129unsafe impl<'a> TaggedStructure for ImportMemoryHostPointerInfoEXT<'a> {
20130    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_HOST_POINTER_INFO_EXT;
20131}
20132unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryHostPointerInfoEXT<'_> {}
20133impl<'a> ImportMemoryHostPointerInfoEXT<'a> {
20134    #[inline]
20135    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
20136        self.handle_type = handle_type;
20137        self
20138    }
20139    #[inline]
20140    pub fn host_pointer(mut self, host_pointer: *mut c_void) -> Self {
20141        self.p_host_pointer = host_pointer;
20142        self
20143    }
20144}
20145#[repr(C)]
20146#[cfg_attr(feature = "debug", derive(Debug))]
20147#[derive(Copy, Clone)]
20148#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryHostPointerPropertiesEXT.html>"]
20149#[must_use]
20150pub struct MemoryHostPointerPropertiesEXT<'a> {
20151    pub s_type: StructureType,
20152    pub p_next: *mut c_void,
20153    pub memory_type_bits: u32,
20154    pub _marker: PhantomData<&'a ()>,
20155}
20156unsafe impl Send for MemoryHostPointerPropertiesEXT<'_> {}
20157unsafe impl Sync for MemoryHostPointerPropertiesEXT<'_> {}
20158impl ::core::default::Default for MemoryHostPointerPropertiesEXT<'_> {
20159    #[inline]
20160    fn default() -> Self {
20161        Self {
20162            s_type: Self::STRUCTURE_TYPE,
20163            p_next: ::core::ptr::null_mut(),
20164            memory_type_bits: u32::default(),
20165            _marker: PhantomData,
20166        }
20167    }
20168}
20169unsafe impl<'a> TaggedStructure for MemoryHostPointerPropertiesEXT<'a> {
20170    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_HOST_POINTER_PROPERTIES_EXT;
20171}
20172impl<'a> MemoryHostPointerPropertiesEXT<'a> {
20173    #[inline]
20174    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
20175        self.memory_type_bits = memory_type_bits;
20176        self
20177    }
20178}
20179#[repr(C)]
20180#[cfg_attr(feature = "debug", derive(Debug))]
20181#[derive(Copy, Clone)]
20182#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalMemoryHostPropertiesEXT.html>"]
20183#[must_use]
20184pub struct PhysicalDeviceExternalMemoryHostPropertiesEXT<'a> {
20185    pub s_type: StructureType,
20186    pub p_next: *mut c_void,
20187    pub min_imported_host_pointer_alignment: DeviceSize,
20188    pub _marker: PhantomData<&'a ()>,
20189}
20190unsafe impl Send for PhysicalDeviceExternalMemoryHostPropertiesEXT<'_> {}
20191unsafe impl Sync for PhysicalDeviceExternalMemoryHostPropertiesEXT<'_> {}
20192impl ::core::default::Default for PhysicalDeviceExternalMemoryHostPropertiesEXT<'_> {
20193    #[inline]
20194    fn default() -> Self {
20195        Self {
20196            s_type: Self::STRUCTURE_TYPE,
20197            p_next: ::core::ptr::null_mut(),
20198            min_imported_host_pointer_alignment: DeviceSize::default(),
20199            _marker: PhantomData,
20200        }
20201    }
20202}
20203unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalMemoryHostPropertiesEXT<'a> {
20204    const STRUCTURE_TYPE: StructureType =
20205        StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT;
20206}
20207unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceExternalMemoryHostPropertiesEXT<'_> {}
20208impl<'a> PhysicalDeviceExternalMemoryHostPropertiesEXT<'a> {
20209    #[inline]
20210    pub fn min_imported_host_pointer_alignment(
20211        mut self,
20212        min_imported_host_pointer_alignment: DeviceSize,
20213    ) -> Self {
20214        self.min_imported_host_pointer_alignment = min_imported_host_pointer_alignment;
20215        self
20216    }
20217}
20218#[repr(C)]
20219#[cfg_attr(feature = "debug", derive(Debug))]
20220#[derive(Copy, Clone)]
20221#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.html>"]
20222#[must_use]
20223pub struct PhysicalDeviceConservativeRasterizationPropertiesEXT<'a> {
20224    pub s_type: StructureType,
20225    pub p_next: *mut c_void,
20226    pub primitive_overestimation_size: f32,
20227    pub max_extra_primitive_overestimation_size: f32,
20228    pub extra_primitive_overestimation_size_granularity: f32,
20229    pub primitive_underestimation: Bool32,
20230    pub conservative_point_and_line_rasterization: Bool32,
20231    pub degenerate_triangles_rasterized: Bool32,
20232    pub degenerate_lines_rasterized: Bool32,
20233    pub fully_covered_fragment_shader_input_variable: Bool32,
20234    pub conservative_rasterization_post_depth_coverage: Bool32,
20235    pub _marker: PhantomData<&'a ()>,
20236}
20237unsafe impl Send for PhysicalDeviceConservativeRasterizationPropertiesEXT<'_> {}
20238unsafe impl Sync for PhysicalDeviceConservativeRasterizationPropertiesEXT<'_> {}
20239impl ::core::default::Default for PhysicalDeviceConservativeRasterizationPropertiesEXT<'_> {
20240    #[inline]
20241    fn default() -> Self {
20242        Self {
20243            s_type: Self::STRUCTURE_TYPE,
20244            p_next: ::core::ptr::null_mut(),
20245            primitive_overestimation_size: f32::default(),
20246            max_extra_primitive_overestimation_size: f32::default(),
20247            extra_primitive_overestimation_size_granularity: f32::default(),
20248            primitive_underestimation: Bool32::default(),
20249            conservative_point_and_line_rasterization: Bool32::default(),
20250            degenerate_triangles_rasterized: Bool32::default(),
20251            degenerate_lines_rasterized: Bool32::default(),
20252            fully_covered_fragment_shader_input_variable: Bool32::default(),
20253            conservative_rasterization_post_depth_coverage: Bool32::default(),
20254            _marker: PhantomData,
20255        }
20256    }
20257}
20258unsafe impl<'a> TaggedStructure for PhysicalDeviceConservativeRasterizationPropertiesEXT<'a> {
20259    const STRUCTURE_TYPE: StructureType =
20260        StructureType::PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT;
20261}
20262unsafe impl ExtendsPhysicalDeviceProperties2
20263    for PhysicalDeviceConservativeRasterizationPropertiesEXT<'_>
20264{
20265}
20266impl<'a> PhysicalDeviceConservativeRasterizationPropertiesEXT<'a> {
20267    #[inline]
20268    pub fn primitive_overestimation_size(mut self, primitive_overestimation_size: f32) -> Self {
20269        self.primitive_overestimation_size = primitive_overestimation_size;
20270        self
20271    }
20272    #[inline]
20273    pub fn max_extra_primitive_overestimation_size(
20274        mut self,
20275        max_extra_primitive_overestimation_size: f32,
20276    ) -> Self {
20277        self.max_extra_primitive_overestimation_size = max_extra_primitive_overestimation_size;
20278        self
20279    }
20280    #[inline]
20281    pub fn extra_primitive_overestimation_size_granularity(
20282        mut self,
20283        extra_primitive_overestimation_size_granularity: f32,
20284    ) -> Self {
20285        self.extra_primitive_overestimation_size_granularity =
20286            extra_primitive_overestimation_size_granularity;
20287        self
20288    }
20289    #[inline]
20290    pub fn primitive_underestimation(mut self, primitive_underestimation: bool) -> Self {
20291        self.primitive_underestimation = primitive_underestimation.into();
20292        self
20293    }
20294    #[inline]
20295    pub fn conservative_point_and_line_rasterization(
20296        mut self,
20297        conservative_point_and_line_rasterization: bool,
20298    ) -> Self {
20299        self.conservative_point_and_line_rasterization =
20300            conservative_point_and_line_rasterization.into();
20301        self
20302    }
20303    #[inline]
20304    pub fn degenerate_triangles_rasterized(
20305        mut self,
20306        degenerate_triangles_rasterized: bool,
20307    ) -> Self {
20308        self.degenerate_triangles_rasterized = degenerate_triangles_rasterized.into();
20309        self
20310    }
20311    #[inline]
20312    pub fn degenerate_lines_rasterized(mut self, degenerate_lines_rasterized: bool) -> Self {
20313        self.degenerate_lines_rasterized = degenerate_lines_rasterized.into();
20314        self
20315    }
20316    #[inline]
20317    pub fn fully_covered_fragment_shader_input_variable(
20318        mut self,
20319        fully_covered_fragment_shader_input_variable: bool,
20320    ) -> Self {
20321        self.fully_covered_fragment_shader_input_variable =
20322            fully_covered_fragment_shader_input_variable.into();
20323        self
20324    }
20325    #[inline]
20326    pub fn conservative_rasterization_post_depth_coverage(
20327        mut self,
20328        conservative_rasterization_post_depth_coverage: bool,
20329    ) -> Self {
20330        self.conservative_rasterization_post_depth_coverage =
20331            conservative_rasterization_post_depth_coverage.into();
20332        self
20333    }
20334}
20335#[repr(C)]
20336#[cfg_attr(feature = "debug", derive(Debug))]
20337#[derive(Copy, Clone)]
20338#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCalibratedTimestampInfoKHR.html>"]
20339#[must_use]
20340pub struct CalibratedTimestampInfoKHR<'a> {
20341    pub s_type: StructureType,
20342    pub p_next: *const c_void,
20343    pub time_domain: TimeDomainKHR,
20344    pub _marker: PhantomData<&'a ()>,
20345}
20346unsafe impl Send for CalibratedTimestampInfoKHR<'_> {}
20347unsafe impl Sync for CalibratedTimestampInfoKHR<'_> {}
20348impl ::core::default::Default for CalibratedTimestampInfoKHR<'_> {
20349    #[inline]
20350    fn default() -> Self {
20351        Self {
20352            s_type: Self::STRUCTURE_TYPE,
20353            p_next: ::core::ptr::null(),
20354            time_domain: TimeDomainKHR::default(),
20355            _marker: PhantomData,
20356        }
20357    }
20358}
20359unsafe impl<'a> TaggedStructure for CalibratedTimestampInfoKHR<'a> {
20360    const STRUCTURE_TYPE: StructureType = StructureType::CALIBRATED_TIMESTAMP_INFO_KHR;
20361}
20362impl<'a> CalibratedTimestampInfoKHR<'a> {
20363    #[inline]
20364    pub fn time_domain(mut self, time_domain: TimeDomainKHR) -> Self {
20365        self.time_domain = time_domain;
20366        self
20367    }
20368}
20369#[repr(C)]
20370#[cfg_attr(feature = "debug", derive(Debug))]
20371#[derive(Copy, Clone)]
20372#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderCorePropertiesAMD.html>"]
20373#[must_use]
20374pub struct PhysicalDeviceShaderCorePropertiesAMD<'a> {
20375    pub s_type: StructureType,
20376    pub p_next: *mut c_void,
20377    pub shader_engine_count: u32,
20378    pub shader_arrays_per_engine_count: u32,
20379    pub compute_units_per_shader_array: u32,
20380    pub simd_per_compute_unit: u32,
20381    pub wavefronts_per_simd: u32,
20382    pub wavefront_size: u32,
20383    pub sgprs_per_simd: u32,
20384    pub min_sgpr_allocation: u32,
20385    pub max_sgpr_allocation: u32,
20386    pub sgpr_allocation_granularity: u32,
20387    pub vgprs_per_simd: u32,
20388    pub min_vgpr_allocation: u32,
20389    pub max_vgpr_allocation: u32,
20390    pub vgpr_allocation_granularity: u32,
20391    pub _marker: PhantomData<&'a ()>,
20392}
20393unsafe impl Send for PhysicalDeviceShaderCorePropertiesAMD<'_> {}
20394unsafe impl Sync for PhysicalDeviceShaderCorePropertiesAMD<'_> {}
20395impl ::core::default::Default for PhysicalDeviceShaderCorePropertiesAMD<'_> {
20396    #[inline]
20397    fn default() -> Self {
20398        Self {
20399            s_type: Self::STRUCTURE_TYPE,
20400            p_next: ::core::ptr::null_mut(),
20401            shader_engine_count: u32::default(),
20402            shader_arrays_per_engine_count: u32::default(),
20403            compute_units_per_shader_array: u32::default(),
20404            simd_per_compute_unit: u32::default(),
20405            wavefronts_per_simd: u32::default(),
20406            wavefront_size: u32::default(),
20407            sgprs_per_simd: u32::default(),
20408            min_sgpr_allocation: u32::default(),
20409            max_sgpr_allocation: u32::default(),
20410            sgpr_allocation_granularity: u32::default(),
20411            vgprs_per_simd: u32::default(),
20412            min_vgpr_allocation: u32::default(),
20413            max_vgpr_allocation: u32::default(),
20414            vgpr_allocation_granularity: u32::default(),
20415            _marker: PhantomData,
20416        }
20417    }
20418}
20419unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderCorePropertiesAMD<'a> {
20420    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD;
20421}
20422unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCorePropertiesAMD<'_> {}
20423impl<'a> PhysicalDeviceShaderCorePropertiesAMD<'a> {
20424    #[inline]
20425    pub fn shader_engine_count(mut self, shader_engine_count: u32) -> Self {
20426        self.shader_engine_count = shader_engine_count;
20427        self
20428    }
20429    #[inline]
20430    pub fn shader_arrays_per_engine_count(mut self, shader_arrays_per_engine_count: u32) -> Self {
20431        self.shader_arrays_per_engine_count = shader_arrays_per_engine_count;
20432        self
20433    }
20434    #[inline]
20435    pub fn compute_units_per_shader_array(mut self, compute_units_per_shader_array: u32) -> Self {
20436        self.compute_units_per_shader_array = compute_units_per_shader_array;
20437        self
20438    }
20439    #[inline]
20440    pub fn simd_per_compute_unit(mut self, simd_per_compute_unit: u32) -> Self {
20441        self.simd_per_compute_unit = simd_per_compute_unit;
20442        self
20443    }
20444    #[inline]
20445    pub fn wavefronts_per_simd(mut self, wavefronts_per_simd: u32) -> Self {
20446        self.wavefronts_per_simd = wavefronts_per_simd;
20447        self
20448    }
20449    #[inline]
20450    pub fn wavefront_size(mut self, wavefront_size: u32) -> Self {
20451        self.wavefront_size = wavefront_size;
20452        self
20453    }
20454    #[inline]
20455    pub fn sgprs_per_simd(mut self, sgprs_per_simd: u32) -> Self {
20456        self.sgprs_per_simd = sgprs_per_simd;
20457        self
20458    }
20459    #[inline]
20460    pub fn min_sgpr_allocation(mut self, min_sgpr_allocation: u32) -> Self {
20461        self.min_sgpr_allocation = min_sgpr_allocation;
20462        self
20463    }
20464    #[inline]
20465    pub fn max_sgpr_allocation(mut self, max_sgpr_allocation: u32) -> Self {
20466        self.max_sgpr_allocation = max_sgpr_allocation;
20467        self
20468    }
20469    #[inline]
20470    pub fn sgpr_allocation_granularity(mut self, sgpr_allocation_granularity: u32) -> Self {
20471        self.sgpr_allocation_granularity = sgpr_allocation_granularity;
20472        self
20473    }
20474    #[inline]
20475    pub fn vgprs_per_simd(mut self, vgprs_per_simd: u32) -> Self {
20476        self.vgprs_per_simd = vgprs_per_simd;
20477        self
20478    }
20479    #[inline]
20480    pub fn min_vgpr_allocation(mut self, min_vgpr_allocation: u32) -> Self {
20481        self.min_vgpr_allocation = min_vgpr_allocation;
20482        self
20483    }
20484    #[inline]
20485    pub fn max_vgpr_allocation(mut self, max_vgpr_allocation: u32) -> Self {
20486        self.max_vgpr_allocation = max_vgpr_allocation;
20487        self
20488    }
20489    #[inline]
20490    pub fn vgpr_allocation_granularity(mut self, vgpr_allocation_granularity: u32) -> Self {
20491        self.vgpr_allocation_granularity = vgpr_allocation_granularity;
20492        self
20493    }
20494}
20495#[repr(C)]
20496#[cfg_attr(feature = "debug", derive(Debug))]
20497#[derive(Copy, Clone)]
20498#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderCoreProperties2AMD.html>"]
20499#[must_use]
20500pub struct PhysicalDeviceShaderCoreProperties2AMD<'a> {
20501    pub s_type: StructureType,
20502    pub p_next: *mut c_void,
20503    pub shader_core_features: ShaderCorePropertiesFlagsAMD,
20504    pub active_compute_unit_count: u32,
20505    pub _marker: PhantomData<&'a ()>,
20506}
20507unsafe impl Send for PhysicalDeviceShaderCoreProperties2AMD<'_> {}
20508unsafe impl Sync for PhysicalDeviceShaderCoreProperties2AMD<'_> {}
20509impl ::core::default::Default for PhysicalDeviceShaderCoreProperties2AMD<'_> {
20510    #[inline]
20511    fn default() -> Self {
20512        Self {
20513            s_type: Self::STRUCTURE_TYPE,
20514            p_next: ::core::ptr::null_mut(),
20515            shader_core_features: ShaderCorePropertiesFlagsAMD::default(),
20516            active_compute_unit_count: u32::default(),
20517            _marker: PhantomData,
20518        }
20519    }
20520}
20521unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderCoreProperties2AMD<'a> {
20522    const STRUCTURE_TYPE: StructureType =
20523        StructureType::PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD;
20524}
20525unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCoreProperties2AMD<'_> {}
20526impl<'a> PhysicalDeviceShaderCoreProperties2AMD<'a> {
20527    #[inline]
20528    pub fn shader_core_features(
20529        mut self,
20530        shader_core_features: ShaderCorePropertiesFlagsAMD,
20531    ) -> Self {
20532        self.shader_core_features = shader_core_features;
20533        self
20534    }
20535    #[inline]
20536    pub fn active_compute_unit_count(mut self, active_compute_unit_count: u32) -> Self {
20537        self.active_compute_unit_count = active_compute_unit_count;
20538        self
20539    }
20540}
20541#[repr(C)]
20542#[cfg_attr(feature = "debug", derive(Debug))]
20543#[derive(Copy, Clone)]
20544#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationConservativeStateCreateInfoEXT.html>"]
20545#[must_use]
20546pub struct PipelineRasterizationConservativeStateCreateInfoEXT<'a> {
20547    pub s_type: StructureType,
20548    pub p_next: *const c_void,
20549    pub flags: PipelineRasterizationConservativeStateCreateFlagsEXT,
20550    pub conservative_rasterization_mode: ConservativeRasterizationModeEXT,
20551    pub extra_primitive_overestimation_size: f32,
20552    pub _marker: PhantomData<&'a ()>,
20553}
20554unsafe impl Send for PipelineRasterizationConservativeStateCreateInfoEXT<'_> {}
20555unsafe impl Sync for PipelineRasterizationConservativeStateCreateInfoEXT<'_> {}
20556impl ::core::default::Default for PipelineRasterizationConservativeStateCreateInfoEXT<'_> {
20557    #[inline]
20558    fn default() -> Self {
20559        Self {
20560            s_type: Self::STRUCTURE_TYPE,
20561            p_next: ::core::ptr::null(),
20562            flags: PipelineRasterizationConservativeStateCreateFlagsEXT::default(),
20563            conservative_rasterization_mode: ConservativeRasterizationModeEXT::default(),
20564            extra_primitive_overestimation_size: f32::default(),
20565            _marker: PhantomData,
20566        }
20567    }
20568}
20569unsafe impl<'a> TaggedStructure for PipelineRasterizationConservativeStateCreateInfoEXT<'a> {
20570    const STRUCTURE_TYPE: StructureType =
20571        StructureType::PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT;
20572}
20573unsafe impl ExtendsPipelineRasterizationStateCreateInfo
20574    for PipelineRasterizationConservativeStateCreateInfoEXT<'_>
20575{
20576}
20577impl<'a> PipelineRasterizationConservativeStateCreateInfoEXT<'a> {
20578    #[inline]
20579    pub fn flags(mut self, flags: PipelineRasterizationConservativeStateCreateFlagsEXT) -> Self {
20580        self.flags = flags;
20581        self
20582    }
20583    #[inline]
20584    pub fn conservative_rasterization_mode(
20585        mut self,
20586        conservative_rasterization_mode: ConservativeRasterizationModeEXT,
20587    ) -> Self {
20588        self.conservative_rasterization_mode = conservative_rasterization_mode;
20589        self
20590    }
20591    #[inline]
20592    pub fn extra_primitive_overestimation_size(
20593        mut self,
20594        extra_primitive_overestimation_size: f32,
20595    ) -> Self {
20596        self.extra_primitive_overestimation_size = extra_primitive_overestimation_size;
20597        self
20598    }
20599}
20600#[repr(C)]
20601#[cfg_attr(feature = "debug", derive(Debug))]
20602#[derive(Copy, Clone)]
20603#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html>"]
20604#[must_use]
20605pub struct PhysicalDeviceDescriptorIndexingFeatures<'a> {
20606    pub s_type: StructureType,
20607    pub p_next: *mut c_void,
20608    pub shader_input_attachment_array_dynamic_indexing: Bool32,
20609    pub shader_uniform_texel_buffer_array_dynamic_indexing: Bool32,
20610    pub shader_storage_texel_buffer_array_dynamic_indexing: Bool32,
20611    pub shader_uniform_buffer_array_non_uniform_indexing: Bool32,
20612    pub shader_sampled_image_array_non_uniform_indexing: Bool32,
20613    pub shader_storage_buffer_array_non_uniform_indexing: Bool32,
20614    pub shader_storage_image_array_non_uniform_indexing: Bool32,
20615    pub shader_input_attachment_array_non_uniform_indexing: Bool32,
20616    pub shader_uniform_texel_buffer_array_non_uniform_indexing: Bool32,
20617    pub shader_storage_texel_buffer_array_non_uniform_indexing: Bool32,
20618    pub descriptor_binding_uniform_buffer_update_after_bind: Bool32,
20619    pub descriptor_binding_sampled_image_update_after_bind: Bool32,
20620    pub descriptor_binding_storage_image_update_after_bind: Bool32,
20621    pub descriptor_binding_storage_buffer_update_after_bind: Bool32,
20622    pub descriptor_binding_uniform_texel_buffer_update_after_bind: Bool32,
20623    pub descriptor_binding_storage_texel_buffer_update_after_bind: Bool32,
20624    pub descriptor_binding_update_unused_while_pending: Bool32,
20625    pub descriptor_binding_partially_bound: Bool32,
20626    pub descriptor_binding_variable_descriptor_count: Bool32,
20627    pub runtime_descriptor_array: Bool32,
20628    pub _marker: PhantomData<&'a ()>,
20629}
20630unsafe impl Send for PhysicalDeviceDescriptorIndexingFeatures<'_> {}
20631unsafe impl Sync for PhysicalDeviceDescriptorIndexingFeatures<'_> {}
20632impl ::core::default::Default for PhysicalDeviceDescriptorIndexingFeatures<'_> {
20633    #[inline]
20634    fn default() -> Self {
20635        Self {
20636            s_type: Self::STRUCTURE_TYPE,
20637            p_next: ::core::ptr::null_mut(),
20638            shader_input_attachment_array_dynamic_indexing: Bool32::default(),
20639            shader_uniform_texel_buffer_array_dynamic_indexing: Bool32::default(),
20640            shader_storage_texel_buffer_array_dynamic_indexing: Bool32::default(),
20641            shader_uniform_buffer_array_non_uniform_indexing: Bool32::default(),
20642            shader_sampled_image_array_non_uniform_indexing: Bool32::default(),
20643            shader_storage_buffer_array_non_uniform_indexing: Bool32::default(),
20644            shader_storage_image_array_non_uniform_indexing: Bool32::default(),
20645            shader_input_attachment_array_non_uniform_indexing: Bool32::default(),
20646            shader_uniform_texel_buffer_array_non_uniform_indexing: Bool32::default(),
20647            shader_storage_texel_buffer_array_non_uniform_indexing: Bool32::default(),
20648            descriptor_binding_uniform_buffer_update_after_bind: Bool32::default(),
20649            descriptor_binding_sampled_image_update_after_bind: Bool32::default(),
20650            descriptor_binding_storage_image_update_after_bind: Bool32::default(),
20651            descriptor_binding_storage_buffer_update_after_bind: Bool32::default(),
20652            descriptor_binding_uniform_texel_buffer_update_after_bind: Bool32::default(),
20653            descriptor_binding_storage_texel_buffer_update_after_bind: Bool32::default(),
20654            descriptor_binding_update_unused_while_pending: Bool32::default(),
20655            descriptor_binding_partially_bound: Bool32::default(),
20656            descriptor_binding_variable_descriptor_count: Bool32::default(),
20657            runtime_descriptor_array: Bool32::default(),
20658            _marker: PhantomData,
20659        }
20660    }
20661}
20662unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorIndexingFeatures<'a> {
20663    const STRUCTURE_TYPE: StructureType =
20664        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES;
20665}
20666unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDescriptorIndexingFeatures<'_> {}
20667unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDescriptorIndexingFeatures<'_> {}
20668impl<'a> PhysicalDeviceDescriptorIndexingFeatures<'a> {
20669    #[inline]
20670    pub fn shader_input_attachment_array_dynamic_indexing(
20671        mut self,
20672        shader_input_attachment_array_dynamic_indexing: bool,
20673    ) -> Self {
20674        self.shader_input_attachment_array_dynamic_indexing =
20675            shader_input_attachment_array_dynamic_indexing.into();
20676        self
20677    }
20678    #[inline]
20679    pub fn shader_uniform_texel_buffer_array_dynamic_indexing(
20680        mut self,
20681        shader_uniform_texel_buffer_array_dynamic_indexing: bool,
20682    ) -> Self {
20683        self.shader_uniform_texel_buffer_array_dynamic_indexing =
20684            shader_uniform_texel_buffer_array_dynamic_indexing.into();
20685        self
20686    }
20687    #[inline]
20688    pub fn shader_storage_texel_buffer_array_dynamic_indexing(
20689        mut self,
20690        shader_storage_texel_buffer_array_dynamic_indexing: bool,
20691    ) -> Self {
20692        self.shader_storage_texel_buffer_array_dynamic_indexing =
20693            shader_storage_texel_buffer_array_dynamic_indexing.into();
20694        self
20695    }
20696    #[inline]
20697    pub fn shader_uniform_buffer_array_non_uniform_indexing(
20698        mut self,
20699        shader_uniform_buffer_array_non_uniform_indexing: bool,
20700    ) -> Self {
20701        self.shader_uniform_buffer_array_non_uniform_indexing =
20702            shader_uniform_buffer_array_non_uniform_indexing.into();
20703        self
20704    }
20705    #[inline]
20706    pub fn shader_sampled_image_array_non_uniform_indexing(
20707        mut self,
20708        shader_sampled_image_array_non_uniform_indexing: bool,
20709    ) -> Self {
20710        self.shader_sampled_image_array_non_uniform_indexing =
20711            shader_sampled_image_array_non_uniform_indexing.into();
20712        self
20713    }
20714    #[inline]
20715    pub fn shader_storage_buffer_array_non_uniform_indexing(
20716        mut self,
20717        shader_storage_buffer_array_non_uniform_indexing: bool,
20718    ) -> Self {
20719        self.shader_storage_buffer_array_non_uniform_indexing =
20720            shader_storage_buffer_array_non_uniform_indexing.into();
20721        self
20722    }
20723    #[inline]
20724    pub fn shader_storage_image_array_non_uniform_indexing(
20725        mut self,
20726        shader_storage_image_array_non_uniform_indexing: bool,
20727    ) -> Self {
20728        self.shader_storage_image_array_non_uniform_indexing =
20729            shader_storage_image_array_non_uniform_indexing.into();
20730        self
20731    }
20732    #[inline]
20733    pub fn shader_input_attachment_array_non_uniform_indexing(
20734        mut self,
20735        shader_input_attachment_array_non_uniform_indexing: bool,
20736    ) -> Self {
20737        self.shader_input_attachment_array_non_uniform_indexing =
20738            shader_input_attachment_array_non_uniform_indexing.into();
20739        self
20740    }
20741    #[inline]
20742    pub fn shader_uniform_texel_buffer_array_non_uniform_indexing(
20743        mut self,
20744        shader_uniform_texel_buffer_array_non_uniform_indexing: bool,
20745    ) -> Self {
20746        self.shader_uniform_texel_buffer_array_non_uniform_indexing =
20747            shader_uniform_texel_buffer_array_non_uniform_indexing.into();
20748        self
20749    }
20750    #[inline]
20751    pub fn shader_storage_texel_buffer_array_non_uniform_indexing(
20752        mut self,
20753        shader_storage_texel_buffer_array_non_uniform_indexing: bool,
20754    ) -> Self {
20755        self.shader_storage_texel_buffer_array_non_uniform_indexing =
20756            shader_storage_texel_buffer_array_non_uniform_indexing.into();
20757        self
20758    }
20759    #[inline]
20760    pub fn descriptor_binding_uniform_buffer_update_after_bind(
20761        mut self,
20762        descriptor_binding_uniform_buffer_update_after_bind: bool,
20763    ) -> Self {
20764        self.descriptor_binding_uniform_buffer_update_after_bind =
20765            descriptor_binding_uniform_buffer_update_after_bind.into();
20766        self
20767    }
20768    #[inline]
20769    pub fn descriptor_binding_sampled_image_update_after_bind(
20770        mut self,
20771        descriptor_binding_sampled_image_update_after_bind: bool,
20772    ) -> Self {
20773        self.descriptor_binding_sampled_image_update_after_bind =
20774            descriptor_binding_sampled_image_update_after_bind.into();
20775        self
20776    }
20777    #[inline]
20778    pub fn descriptor_binding_storage_image_update_after_bind(
20779        mut self,
20780        descriptor_binding_storage_image_update_after_bind: bool,
20781    ) -> Self {
20782        self.descriptor_binding_storage_image_update_after_bind =
20783            descriptor_binding_storage_image_update_after_bind.into();
20784        self
20785    }
20786    #[inline]
20787    pub fn descriptor_binding_storage_buffer_update_after_bind(
20788        mut self,
20789        descriptor_binding_storage_buffer_update_after_bind: bool,
20790    ) -> Self {
20791        self.descriptor_binding_storage_buffer_update_after_bind =
20792            descriptor_binding_storage_buffer_update_after_bind.into();
20793        self
20794    }
20795    #[inline]
20796    pub fn descriptor_binding_uniform_texel_buffer_update_after_bind(
20797        mut self,
20798        descriptor_binding_uniform_texel_buffer_update_after_bind: bool,
20799    ) -> Self {
20800        self.descriptor_binding_uniform_texel_buffer_update_after_bind =
20801            descriptor_binding_uniform_texel_buffer_update_after_bind.into();
20802        self
20803    }
20804    #[inline]
20805    pub fn descriptor_binding_storage_texel_buffer_update_after_bind(
20806        mut self,
20807        descriptor_binding_storage_texel_buffer_update_after_bind: bool,
20808    ) -> Self {
20809        self.descriptor_binding_storage_texel_buffer_update_after_bind =
20810            descriptor_binding_storage_texel_buffer_update_after_bind.into();
20811        self
20812    }
20813    #[inline]
20814    pub fn descriptor_binding_update_unused_while_pending(
20815        mut self,
20816        descriptor_binding_update_unused_while_pending: bool,
20817    ) -> Self {
20818        self.descriptor_binding_update_unused_while_pending =
20819            descriptor_binding_update_unused_while_pending.into();
20820        self
20821    }
20822    #[inline]
20823    pub fn descriptor_binding_partially_bound(
20824        mut self,
20825        descriptor_binding_partially_bound: bool,
20826    ) -> Self {
20827        self.descriptor_binding_partially_bound = descriptor_binding_partially_bound.into();
20828        self
20829    }
20830    #[inline]
20831    pub fn descriptor_binding_variable_descriptor_count(
20832        mut self,
20833        descriptor_binding_variable_descriptor_count: bool,
20834    ) -> Self {
20835        self.descriptor_binding_variable_descriptor_count =
20836            descriptor_binding_variable_descriptor_count.into();
20837        self
20838    }
20839    #[inline]
20840    pub fn runtime_descriptor_array(mut self, runtime_descriptor_array: bool) -> Self {
20841        self.runtime_descriptor_array = runtime_descriptor_array.into();
20842        self
20843    }
20844}
20845#[repr(C)]
20846#[cfg_attr(feature = "debug", derive(Debug))]
20847#[derive(Copy, Clone)]
20848#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html>"]
20849#[must_use]
20850pub struct PhysicalDeviceDescriptorIndexingProperties<'a> {
20851    pub s_type: StructureType,
20852    pub p_next: *mut c_void,
20853    pub max_update_after_bind_descriptors_in_all_pools: u32,
20854    pub shader_uniform_buffer_array_non_uniform_indexing_native: Bool32,
20855    pub shader_sampled_image_array_non_uniform_indexing_native: Bool32,
20856    pub shader_storage_buffer_array_non_uniform_indexing_native: Bool32,
20857    pub shader_storage_image_array_non_uniform_indexing_native: Bool32,
20858    pub shader_input_attachment_array_non_uniform_indexing_native: Bool32,
20859    pub robust_buffer_access_update_after_bind: Bool32,
20860    pub quad_divergent_implicit_lod: Bool32,
20861    pub max_per_stage_descriptor_update_after_bind_samplers: u32,
20862    pub max_per_stage_descriptor_update_after_bind_uniform_buffers: u32,
20863    pub max_per_stage_descriptor_update_after_bind_storage_buffers: u32,
20864    pub max_per_stage_descriptor_update_after_bind_sampled_images: u32,
20865    pub max_per_stage_descriptor_update_after_bind_storage_images: u32,
20866    pub max_per_stage_descriptor_update_after_bind_input_attachments: u32,
20867    pub max_per_stage_update_after_bind_resources: u32,
20868    pub max_descriptor_set_update_after_bind_samplers: u32,
20869    pub max_descriptor_set_update_after_bind_uniform_buffers: u32,
20870    pub max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32,
20871    pub max_descriptor_set_update_after_bind_storage_buffers: u32,
20872    pub max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32,
20873    pub max_descriptor_set_update_after_bind_sampled_images: u32,
20874    pub max_descriptor_set_update_after_bind_storage_images: u32,
20875    pub max_descriptor_set_update_after_bind_input_attachments: u32,
20876    pub _marker: PhantomData<&'a ()>,
20877}
20878unsafe impl Send for PhysicalDeviceDescriptorIndexingProperties<'_> {}
20879unsafe impl Sync for PhysicalDeviceDescriptorIndexingProperties<'_> {}
20880impl ::core::default::Default for PhysicalDeviceDescriptorIndexingProperties<'_> {
20881    #[inline]
20882    fn default() -> Self {
20883        Self {
20884            s_type: Self::STRUCTURE_TYPE,
20885            p_next: ::core::ptr::null_mut(),
20886            max_update_after_bind_descriptors_in_all_pools: u32::default(),
20887            shader_uniform_buffer_array_non_uniform_indexing_native: Bool32::default(),
20888            shader_sampled_image_array_non_uniform_indexing_native: Bool32::default(),
20889            shader_storage_buffer_array_non_uniform_indexing_native: Bool32::default(),
20890            shader_storage_image_array_non_uniform_indexing_native: Bool32::default(),
20891            shader_input_attachment_array_non_uniform_indexing_native: Bool32::default(),
20892            robust_buffer_access_update_after_bind: Bool32::default(),
20893            quad_divergent_implicit_lod: Bool32::default(),
20894            max_per_stage_descriptor_update_after_bind_samplers: u32::default(),
20895            max_per_stage_descriptor_update_after_bind_uniform_buffers: u32::default(),
20896            max_per_stage_descriptor_update_after_bind_storage_buffers: u32::default(),
20897            max_per_stage_descriptor_update_after_bind_sampled_images: u32::default(),
20898            max_per_stage_descriptor_update_after_bind_storage_images: u32::default(),
20899            max_per_stage_descriptor_update_after_bind_input_attachments: u32::default(),
20900            max_per_stage_update_after_bind_resources: u32::default(),
20901            max_descriptor_set_update_after_bind_samplers: u32::default(),
20902            max_descriptor_set_update_after_bind_uniform_buffers: u32::default(),
20903            max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32::default(),
20904            max_descriptor_set_update_after_bind_storage_buffers: u32::default(),
20905            max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32::default(),
20906            max_descriptor_set_update_after_bind_sampled_images: u32::default(),
20907            max_descriptor_set_update_after_bind_storage_images: u32::default(),
20908            max_descriptor_set_update_after_bind_input_attachments: u32::default(),
20909            _marker: PhantomData,
20910        }
20911    }
20912}
20913unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorIndexingProperties<'a> {
20914    const STRUCTURE_TYPE: StructureType =
20915        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES;
20916}
20917unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDescriptorIndexingProperties<'_> {}
20918impl<'a> PhysicalDeviceDescriptorIndexingProperties<'a> {
20919    #[inline]
20920    pub fn max_update_after_bind_descriptors_in_all_pools(
20921        mut self,
20922        max_update_after_bind_descriptors_in_all_pools: u32,
20923    ) -> Self {
20924        self.max_update_after_bind_descriptors_in_all_pools =
20925            max_update_after_bind_descriptors_in_all_pools;
20926        self
20927    }
20928    #[inline]
20929    pub fn shader_uniform_buffer_array_non_uniform_indexing_native(
20930        mut self,
20931        shader_uniform_buffer_array_non_uniform_indexing_native: bool,
20932    ) -> Self {
20933        self.shader_uniform_buffer_array_non_uniform_indexing_native =
20934            shader_uniform_buffer_array_non_uniform_indexing_native.into();
20935        self
20936    }
20937    #[inline]
20938    pub fn shader_sampled_image_array_non_uniform_indexing_native(
20939        mut self,
20940        shader_sampled_image_array_non_uniform_indexing_native: bool,
20941    ) -> Self {
20942        self.shader_sampled_image_array_non_uniform_indexing_native =
20943            shader_sampled_image_array_non_uniform_indexing_native.into();
20944        self
20945    }
20946    #[inline]
20947    pub fn shader_storage_buffer_array_non_uniform_indexing_native(
20948        mut self,
20949        shader_storage_buffer_array_non_uniform_indexing_native: bool,
20950    ) -> Self {
20951        self.shader_storage_buffer_array_non_uniform_indexing_native =
20952            shader_storage_buffer_array_non_uniform_indexing_native.into();
20953        self
20954    }
20955    #[inline]
20956    pub fn shader_storage_image_array_non_uniform_indexing_native(
20957        mut self,
20958        shader_storage_image_array_non_uniform_indexing_native: bool,
20959    ) -> Self {
20960        self.shader_storage_image_array_non_uniform_indexing_native =
20961            shader_storage_image_array_non_uniform_indexing_native.into();
20962        self
20963    }
20964    #[inline]
20965    pub fn shader_input_attachment_array_non_uniform_indexing_native(
20966        mut self,
20967        shader_input_attachment_array_non_uniform_indexing_native: bool,
20968    ) -> Self {
20969        self.shader_input_attachment_array_non_uniform_indexing_native =
20970            shader_input_attachment_array_non_uniform_indexing_native.into();
20971        self
20972    }
20973    #[inline]
20974    pub fn robust_buffer_access_update_after_bind(
20975        mut self,
20976        robust_buffer_access_update_after_bind: bool,
20977    ) -> Self {
20978        self.robust_buffer_access_update_after_bind = robust_buffer_access_update_after_bind.into();
20979        self
20980    }
20981    #[inline]
20982    pub fn quad_divergent_implicit_lod(mut self, quad_divergent_implicit_lod: bool) -> Self {
20983        self.quad_divergent_implicit_lod = quad_divergent_implicit_lod.into();
20984        self
20985    }
20986    #[inline]
20987    pub fn max_per_stage_descriptor_update_after_bind_samplers(
20988        mut self,
20989        max_per_stage_descriptor_update_after_bind_samplers: u32,
20990    ) -> Self {
20991        self.max_per_stage_descriptor_update_after_bind_samplers =
20992            max_per_stage_descriptor_update_after_bind_samplers;
20993        self
20994    }
20995    #[inline]
20996    pub fn max_per_stage_descriptor_update_after_bind_uniform_buffers(
20997        mut self,
20998        max_per_stage_descriptor_update_after_bind_uniform_buffers: u32,
20999    ) -> Self {
21000        self.max_per_stage_descriptor_update_after_bind_uniform_buffers =
21001            max_per_stage_descriptor_update_after_bind_uniform_buffers;
21002        self
21003    }
21004    #[inline]
21005    pub fn max_per_stage_descriptor_update_after_bind_storage_buffers(
21006        mut self,
21007        max_per_stage_descriptor_update_after_bind_storage_buffers: u32,
21008    ) -> Self {
21009        self.max_per_stage_descriptor_update_after_bind_storage_buffers =
21010            max_per_stage_descriptor_update_after_bind_storage_buffers;
21011        self
21012    }
21013    #[inline]
21014    pub fn max_per_stage_descriptor_update_after_bind_sampled_images(
21015        mut self,
21016        max_per_stage_descriptor_update_after_bind_sampled_images: u32,
21017    ) -> Self {
21018        self.max_per_stage_descriptor_update_after_bind_sampled_images =
21019            max_per_stage_descriptor_update_after_bind_sampled_images;
21020        self
21021    }
21022    #[inline]
21023    pub fn max_per_stage_descriptor_update_after_bind_storage_images(
21024        mut self,
21025        max_per_stage_descriptor_update_after_bind_storage_images: u32,
21026    ) -> Self {
21027        self.max_per_stage_descriptor_update_after_bind_storage_images =
21028            max_per_stage_descriptor_update_after_bind_storage_images;
21029        self
21030    }
21031    #[inline]
21032    pub fn max_per_stage_descriptor_update_after_bind_input_attachments(
21033        mut self,
21034        max_per_stage_descriptor_update_after_bind_input_attachments: u32,
21035    ) -> Self {
21036        self.max_per_stage_descriptor_update_after_bind_input_attachments =
21037            max_per_stage_descriptor_update_after_bind_input_attachments;
21038        self
21039    }
21040    #[inline]
21041    pub fn max_per_stage_update_after_bind_resources(
21042        mut self,
21043        max_per_stage_update_after_bind_resources: u32,
21044    ) -> Self {
21045        self.max_per_stage_update_after_bind_resources = max_per_stage_update_after_bind_resources;
21046        self
21047    }
21048    #[inline]
21049    pub fn max_descriptor_set_update_after_bind_samplers(
21050        mut self,
21051        max_descriptor_set_update_after_bind_samplers: u32,
21052    ) -> Self {
21053        self.max_descriptor_set_update_after_bind_samplers =
21054            max_descriptor_set_update_after_bind_samplers;
21055        self
21056    }
21057    #[inline]
21058    pub fn max_descriptor_set_update_after_bind_uniform_buffers(
21059        mut self,
21060        max_descriptor_set_update_after_bind_uniform_buffers: u32,
21061    ) -> Self {
21062        self.max_descriptor_set_update_after_bind_uniform_buffers =
21063            max_descriptor_set_update_after_bind_uniform_buffers;
21064        self
21065    }
21066    #[inline]
21067    pub fn max_descriptor_set_update_after_bind_uniform_buffers_dynamic(
21068        mut self,
21069        max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32,
21070    ) -> Self {
21071        self.max_descriptor_set_update_after_bind_uniform_buffers_dynamic =
21072            max_descriptor_set_update_after_bind_uniform_buffers_dynamic;
21073        self
21074    }
21075    #[inline]
21076    pub fn max_descriptor_set_update_after_bind_storage_buffers(
21077        mut self,
21078        max_descriptor_set_update_after_bind_storage_buffers: u32,
21079    ) -> Self {
21080        self.max_descriptor_set_update_after_bind_storage_buffers =
21081            max_descriptor_set_update_after_bind_storage_buffers;
21082        self
21083    }
21084    #[inline]
21085    pub fn max_descriptor_set_update_after_bind_storage_buffers_dynamic(
21086        mut self,
21087        max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32,
21088    ) -> Self {
21089        self.max_descriptor_set_update_after_bind_storage_buffers_dynamic =
21090            max_descriptor_set_update_after_bind_storage_buffers_dynamic;
21091        self
21092    }
21093    #[inline]
21094    pub fn max_descriptor_set_update_after_bind_sampled_images(
21095        mut self,
21096        max_descriptor_set_update_after_bind_sampled_images: u32,
21097    ) -> Self {
21098        self.max_descriptor_set_update_after_bind_sampled_images =
21099            max_descriptor_set_update_after_bind_sampled_images;
21100        self
21101    }
21102    #[inline]
21103    pub fn max_descriptor_set_update_after_bind_storage_images(
21104        mut self,
21105        max_descriptor_set_update_after_bind_storage_images: u32,
21106    ) -> Self {
21107        self.max_descriptor_set_update_after_bind_storage_images =
21108            max_descriptor_set_update_after_bind_storage_images;
21109        self
21110    }
21111    #[inline]
21112    pub fn max_descriptor_set_update_after_bind_input_attachments(
21113        mut self,
21114        max_descriptor_set_update_after_bind_input_attachments: u32,
21115    ) -> Self {
21116        self.max_descriptor_set_update_after_bind_input_attachments =
21117            max_descriptor_set_update_after_bind_input_attachments;
21118        self
21119    }
21120}
21121#[repr(C)]
21122#[cfg_attr(feature = "debug", derive(Debug))]
21123#[derive(Copy, Clone)]
21124#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutBindingFlagsCreateInfo.html>"]
21125#[must_use]
21126pub struct DescriptorSetLayoutBindingFlagsCreateInfo<'a> {
21127    pub s_type: StructureType,
21128    pub p_next: *const c_void,
21129    pub binding_count: u32,
21130    pub p_binding_flags: *const DescriptorBindingFlags,
21131    pub _marker: PhantomData<&'a ()>,
21132}
21133unsafe impl Send for DescriptorSetLayoutBindingFlagsCreateInfo<'_> {}
21134unsafe impl Sync for DescriptorSetLayoutBindingFlagsCreateInfo<'_> {}
21135impl ::core::default::Default for DescriptorSetLayoutBindingFlagsCreateInfo<'_> {
21136    #[inline]
21137    fn default() -> Self {
21138        Self {
21139            s_type: Self::STRUCTURE_TYPE,
21140            p_next: ::core::ptr::null(),
21141            binding_count: u32::default(),
21142            p_binding_flags: ::core::ptr::null(),
21143            _marker: PhantomData,
21144        }
21145    }
21146}
21147unsafe impl<'a> TaggedStructure for DescriptorSetLayoutBindingFlagsCreateInfo<'a> {
21148    const STRUCTURE_TYPE: StructureType =
21149        StructureType::DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO;
21150}
21151unsafe impl ExtendsDescriptorSetLayoutCreateInfo for DescriptorSetLayoutBindingFlagsCreateInfo<'_> {}
21152impl<'a> DescriptorSetLayoutBindingFlagsCreateInfo<'a> {
21153    #[inline]
21154    pub fn binding_flags(mut self, binding_flags: &'a [DescriptorBindingFlags]) -> Self {
21155        self.binding_count = binding_flags.len() as _;
21156        self.p_binding_flags = binding_flags.as_ptr();
21157        self
21158    }
21159}
21160#[repr(C)]
21161#[cfg_attr(feature = "debug", derive(Debug))]
21162#[derive(Copy, Clone)]
21163#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetVariableDescriptorCountAllocateInfo.html>"]
21164#[must_use]
21165pub struct DescriptorSetVariableDescriptorCountAllocateInfo<'a> {
21166    pub s_type: StructureType,
21167    pub p_next: *const c_void,
21168    pub descriptor_set_count: u32,
21169    pub p_descriptor_counts: *const u32,
21170    pub _marker: PhantomData<&'a ()>,
21171}
21172unsafe impl Send for DescriptorSetVariableDescriptorCountAllocateInfo<'_> {}
21173unsafe impl Sync for DescriptorSetVariableDescriptorCountAllocateInfo<'_> {}
21174impl ::core::default::Default for DescriptorSetVariableDescriptorCountAllocateInfo<'_> {
21175    #[inline]
21176    fn default() -> Self {
21177        Self {
21178            s_type: Self::STRUCTURE_TYPE,
21179            p_next: ::core::ptr::null(),
21180            descriptor_set_count: u32::default(),
21181            p_descriptor_counts: ::core::ptr::null(),
21182            _marker: PhantomData,
21183        }
21184    }
21185}
21186unsafe impl<'a> TaggedStructure for DescriptorSetVariableDescriptorCountAllocateInfo<'a> {
21187    const STRUCTURE_TYPE: StructureType =
21188        StructureType::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO;
21189}
21190unsafe impl ExtendsDescriptorSetAllocateInfo
21191    for DescriptorSetVariableDescriptorCountAllocateInfo<'_>
21192{
21193}
21194impl<'a> DescriptorSetVariableDescriptorCountAllocateInfo<'a> {
21195    #[inline]
21196    pub fn descriptor_counts(mut self, descriptor_counts: &'a [u32]) -> Self {
21197        self.descriptor_set_count = descriptor_counts.len() as _;
21198        self.p_descriptor_counts = descriptor_counts.as_ptr();
21199        self
21200    }
21201}
21202#[repr(C)]
21203#[cfg_attr(feature = "debug", derive(Debug))]
21204#[derive(Copy, Clone)]
21205#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetVariableDescriptorCountLayoutSupport.html>"]
21206#[must_use]
21207pub struct DescriptorSetVariableDescriptorCountLayoutSupport<'a> {
21208    pub s_type: StructureType,
21209    pub p_next: *mut c_void,
21210    pub max_variable_descriptor_count: u32,
21211    pub _marker: PhantomData<&'a ()>,
21212}
21213unsafe impl Send for DescriptorSetVariableDescriptorCountLayoutSupport<'_> {}
21214unsafe impl Sync for DescriptorSetVariableDescriptorCountLayoutSupport<'_> {}
21215impl ::core::default::Default for DescriptorSetVariableDescriptorCountLayoutSupport<'_> {
21216    #[inline]
21217    fn default() -> Self {
21218        Self {
21219            s_type: Self::STRUCTURE_TYPE,
21220            p_next: ::core::ptr::null_mut(),
21221            max_variable_descriptor_count: u32::default(),
21222            _marker: PhantomData,
21223        }
21224    }
21225}
21226unsafe impl<'a> TaggedStructure for DescriptorSetVariableDescriptorCountLayoutSupport<'a> {
21227    const STRUCTURE_TYPE: StructureType =
21228        StructureType::DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT;
21229}
21230unsafe impl ExtendsDescriptorSetLayoutSupport
21231    for DescriptorSetVariableDescriptorCountLayoutSupport<'_>
21232{
21233}
21234impl<'a> DescriptorSetVariableDescriptorCountLayoutSupport<'a> {
21235    #[inline]
21236    pub fn max_variable_descriptor_count(mut self, max_variable_descriptor_count: u32) -> Self {
21237        self.max_variable_descriptor_count = max_variable_descriptor_count;
21238        self
21239    }
21240}
21241#[repr(C)]
21242#[cfg_attr(feature = "debug", derive(Debug))]
21243#[derive(Copy, Clone)]
21244#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentDescription2.html>"]
21245#[must_use]
21246pub struct AttachmentDescription2<'a> {
21247    pub s_type: StructureType,
21248    pub p_next: *const c_void,
21249    pub flags: AttachmentDescriptionFlags,
21250    pub format: Format,
21251    pub samples: SampleCountFlags,
21252    pub load_op: AttachmentLoadOp,
21253    pub store_op: AttachmentStoreOp,
21254    pub stencil_load_op: AttachmentLoadOp,
21255    pub stencil_store_op: AttachmentStoreOp,
21256    pub initial_layout: ImageLayout,
21257    pub final_layout: ImageLayout,
21258    pub _marker: PhantomData<&'a ()>,
21259}
21260unsafe impl Send for AttachmentDescription2<'_> {}
21261unsafe impl Sync for AttachmentDescription2<'_> {}
21262impl ::core::default::Default for AttachmentDescription2<'_> {
21263    #[inline]
21264    fn default() -> Self {
21265        Self {
21266            s_type: Self::STRUCTURE_TYPE,
21267            p_next: ::core::ptr::null(),
21268            flags: AttachmentDescriptionFlags::default(),
21269            format: Format::default(),
21270            samples: SampleCountFlags::default(),
21271            load_op: AttachmentLoadOp::default(),
21272            store_op: AttachmentStoreOp::default(),
21273            stencil_load_op: AttachmentLoadOp::default(),
21274            stencil_store_op: AttachmentStoreOp::default(),
21275            initial_layout: ImageLayout::default(),
21276            final_layout: ImageLayout::default(),
21277            _marker: PhantomData,
21278        }
21279    }
21280}
21281unsafe impl<'a> TaggedStructure for AttachmentDescription2<'a> {
21282    const STRUCTURE_TYPE: StructureType = StructureType::ATTACHMENT_DESCRIPTION_2;
21283}
21284pub unsafe trait ExtendsAttachmentDescription2 {}
21285impl<'a> AttachmentDescription2<'a> {
21286    #[inline]
21287    pub fn flags(mut self, flags: AttachmentDescriptionFlags) -> Self {
21288        self.flags = flags;
21289        self
21290    }
21291    #[inline]
21292    pub fn format(mut self, format: Format) -> Self {
21293        self.format = format;
21294        self
21295    }
21296    #[inline]
21297    pub fn samples(mut self, samples: SampleCountFlags) -> Self {
21298        self.samples = samples;
21299        self
21300    }
21301    #[inline]
21302    pub fn load_op(mut self, load_op: AttachmentLoadOp) -> Self {
21303        self.load_op = load_op;
21304        self
21305    }
21306    #[inline]
21307    pub fn store_op(mut self, store_op: AttachmentStoreOp) -> Self {
21308        self.store_op = store_op;
21309        self
21310    }
21311    #[inline]
21312    pub fn stencil_load_op(mut self, stencil_load_op: AttachmentLoadOp) -> Self {
21313        self.stencil_load_op = stencil_load_op;
21314        self
21315    }
21316    #[inline]
21317    pub fn stencil_store_op(mut self, stencil_store_op: AttachmentStoreOp) -> Self {
21318        self.stencil_store_op = stencil_store_op;
21319        self
21320    }
21321    #[inline]
21322    pub fn initial_layout(mut self, initial_layout: ImageLayout) -> Self {
21323        self.initial_layout = initial_layout;
21324        self
21325    }
21326    #[inline]
21327    pub fn final_layout(mut self, final_layout: ImageLayout) -> Self {
21328        self.final_layout = final_layout;
21329        self
21330    }
21331    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21332    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21333    #[doc = r" valid extension structs can be pushed into the chain."]
21334    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21335    #[doc = r" chain will look like `A -> D -> B -> C`."]
21336    pub fn push_next<T: ExtendsAttachmentDescription2 + ?Sized>(mut self, next: &'a mut T) -> Self {
21337        unsafe {
21338            let next_ptr = <*const T>::cast(next);
21339            let last_next = ptr_chain_iter(next).last().unwrap();
21340            (*last_next).p_next = self.p_next as _;
21341            self.p_next = next_ptr;
21342        }
21343        self
21344    }
21345}
21346#[repr(C)]
21347#[cfg_attr(feature = "debug", derive(Debug))]
21348#[derive(Copy, Clone)]
21349#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentReference2.html>"]
21350#[must_use]
21351pub struct AttachmentReference2<'a> {
21352    pub s_type: StructureType,
21353    pub p_next: *const c_void,
21354    pub attachment: u32,
21355    pub layout: ImageLayout,
21356    pub aspect_mask: ImageAspectFlags,
21357    pub _marker: PhantomData<&'a ()>,
21358}
21359unsafe impl Send for AttachmentReference2<'_> {}
21360unsafe impl Sync for AttachmentReference2<'_> {}
21361impl ::core::default::Default for AttachmentReference2<'_> {
21362    #[inline]
21363    fn default() -> Self {
21364        Self {
21365            s_type: Self::STRUCTURE_TYPE,
21366            p_next: ::core::ptr::null(),
21367            attachment: u32::default(),
21368            layout: ImageLayout::default(),
21369            aspect_mask: ImageAspectFlags::default(),
21370            _marker: PhantomData,
21371        }
21372    }
21373}
21374unsafe impl<'a> TaggedStructure for AttachmentReference2<'a> {
21375    const STRUCTURE_TYPE: StructureType = StructureType::ATTACHMENT_REFERENCE_2;
21376}
21377pub unsafe trait ExtendsAttachmentReference2 {}
21378impl<'a> AttachmentReference2<'a> {
21379    #[inline]
21380    pub fn attachment(mut self, attachment: u32) -> Self {
21381        self.attachment = attachment;
21382        self
21383    }
21384    #[inline]
21385    pub fn layout(mut self, layout: ImageLayout) -> Self {
21386        self.layout = layout;
21387        self
21388    }
21389    #[inline]
21390    pub fn aspect_mask(mut self, aspect_mask: ImageAspectFlags) -> Self {
21391        self.aspect_mask = aspect_mask;
21392        self
21393    }
21394    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21395    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21396    #[doc = r" valid extension structs can be pushed into the chain."]
21397    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21398    #[doc = r" chain will look like `A -> D -> B -> C`."]
21399    pub fn push_next<T: ExtendsAttachmentReference2 + ?Sized>(mut self, next: &'a mut T) -> Self {
21400        unsafe {
21401            let next_ptr = <*const T>::cast(next);
21402            let last_next = ptr_chain_iter(next).last().unwrap();
21403            (*last_next).p_next = self.p_next as _;
21404            self.p_next = next_ptr;
21405        }
21406        self
21407    }
21408}
21409#[repr(C)]
21410#[cfg_attr(feature = "debug", derive(Debug))]
21411#[derive(Copy, Clone)]
21412#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassDescription2.html>"]
21413#[must_use]
21414pub struct SubpassDescription2<'a> {
21415    pub s_type: StructureType,
21416    pub p_next: *const c_void,
21417    pub flags: SubpassDescriptionFlags,
21418    pub pipeline_bind_point: PipelineBindPoint,
21419    pub view_mask: u32,
21420    pub input_attachment_count: u32,
21421    pub p_input_attachments: *const AttachmentReference2<'a>,
21422    pub color_attachment_count: u32,
21423    pub p_color_attachments: *const AttachmentReference2<'a>,
21424    pub p_resolve_attachments: *const AttachmentReference2<'a>,
21425    pub p_depth_stencil_attachment: *const AttachmentReference2<'a>,
21426    pub preserve_attachment_count: u32,
21427    pub p_preserve_attachments: *const u32,
21428    pub _marker: PhantomData<&'a ()>,
21429}
21430unsafe impl Send for SubpassDescription2<'_> {}
21431unsafe impl Sync for SubpassDescription2<'_> {}
21432impl ::core::default::Default for SubpassDescription2<'_> {
21433    #[inline]
21434    fn default() -> Self {
21435        Self {
21436            s_type: Self::STRUCTURE_TYPE,
21437            p_next: ::core::ptr::null(),
21438            flags: SubpassDescriptionFlags::default(),
21439            pipeline_bind_point: PipelineBindPoint::default(),
21440            view_mask: u32::default(),
21441            input_attachment_count: u32::default(),
21442            p_input_attachments: ::core::ptr::null(),
21443            color_attachment_count: u32::default(),
21444            p_color_attachments: ::core::ptr::null(),
21445            p_resolve_attachments: ::core::ptr::null(),
21446            p_depth_stencil_attachment: ::core::ptr::null(),
21447            preserve_attachment_count: u32::default(),
21448            p_preserve_attachments: ::core::ptr::null(),
21449            _marker: PhantomData,
21450        }
21451    }
21452}
21453unsafe impl<'a> TaggedStructure for SubpassDescription2<'a> {
21454    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_DESCRIPTION_2;
21455}
21456pub unsafe trait ExtendsSubpassDescription2 {}
21457impl<'a> SubpassDescription2<'a> {
21458    #[inline]
21459    pub fn flags(mut self, flags: SubpassDescriptionFlags) -> Self {
21460        self.flags = flags;
21461        self
21462    }
21463    #[inline]
21464    pub fn pipeline_bind_point(mut self, pipeline_bind_point: PipelineBindPoint) -> Self {
21465        self.pipeline_bind_point = pipeline_bind_point;
21466        self
21467    }
21468    #[inline]
21469    pub fn view_mask(mut self, view_mask: u32) -> Self {
21470        self.view_mask = view_mask;
21471        self
21472    }
21473    #[inline]
21474    pub fn input_attachments(mut self, input_attachments: &'a [AttachmentReference2<'a>]) -> Self {
21475        self.input_attachment_count = input_attachments.len() as _;
21476        self.p_input_attachments = input_attachments.as_ptr();
21477        self
21478    }
21479    #[inline]
21480    pub fn color_attachments(mut self, color_attachments: &'a [AttachmentReference2<'a>]) -> Self {
21481        self.color_attachment_count = color_attachments.len() as _;
21482        self.p_color_attachments = color_attachments.as_ptr();
21483        self
21484    }
21485    #[inline]
21486    pub fn resolve_attachments(
21487        mut self,
21488        resolve_attachments: &'a [AttachmentReference2<'a>],
21489    ) -> Self {
21490        self.color_attachment_count = resolve_attachments.len() as _;
21491        self.p_resolve_attachments = resolve_attachments.as_ptr();
21492        self
21493    }
21494    #[inline]
21495    pub fn depth_stencil_attachment(
21496        mut self,
21497        depth_stencil_attachment: &'a AttachmentReference2<'a>,
21498    ) -> Self {
21499        self.p_depth_stencil_attachment = depth_stencil_attachment;
21500        self
21501    }
21502    #[inline]
21503    pub fn preserve_attachments(mut self, preserve_attachments: &'a [u32]) -> Self {
21504        self.preserve_attachment_count = preserve_attachments.len() as _;
21505        self.p_preserve_attachments = preserve_attachments.as_ptr();
21506        self
21507    }
21508    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21509    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21510    #[doc = r" valid extension structs can be pushed into the chain."]
21511    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21512    #[doc = r" chain will look like `A -> D -> B -> C`."]
21513    pub fn push_next<T: ExtendsSubpassDescription2 + ?Sized>(mut self, next: &'a mut T) -> Self {
21514        unsafe {
21515            let next_ptr = <*const T>::cast(next);
21516            let last_next = ptr_chain_iter(next).last().unwrap();
21517            (*last_next).p_next = self.p_next as _;
21518            self.p_next = next_ptr;
21519        }
21520        self
21521    }
21522}
21523#[repr(C)]
21524#[cfg_attr(feature = "debug", derive(Debug))]
21525#[derive(Copy, Clone)]
21526#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassDependency2.html>"]
21527#[must_use]
21528pub struct SubpassDependency2<'a> {
21529    pub s_type: StructureType,
21530    pub p_next: *const c_void,
21531    pub src_subpass: u32,
21532    pub dst_subpass: u32,
21533    pub src_stage_mask: PipelineStageFlags,
21534    pub dst_stage_mask: PipelineStageFlags,
21535    pub src_access_mask: AccessFlags,
21536    pub dst_access_mask: AccessFlags,
21537    pub dependency_flags: DependencyFlags,
21538    pub view_offset: i32,
21539    pub _marker: PhantomData<&'a ()>,
21540}
21541unsafe impl Send for SubpassDependency2<'_> {}
21542unsafe impl Sync for SubpassDependency2<'_> {}
21543impl ::core::default::Default for SubpassDependency2<'_> {
21544    #[inline]
21545    fn default() -> Self {
21546        Self {
21547            s_type: Self::STRUCTURE_TYPE,
21548            p_next: ::core::ptr::null(),
21549            src_subpass: u32::default(),
21550            dst_subpass: u32::default(),
21551            src_stage_mask: PipelineStageFlags::default(),
21552            dst_stage_mask: PipelineStageFlags::default(),
21553            src_access_mask: AccessFlags::default(),
21554            dst_access_mask: AccessFlags::default(),
21555            dependency_flags: DependencyFlags::default(),
21556            view_offset: i32::default(),
21557            _marker: PhantomData,
21558        }
21559    }
21560}
21561unsafe impl<'a> TaggedStructure for SubpassDependency2<'a> {
21562    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_DEPENDENCY_2;
21563}
21564pub unsafe trait ExtendsSubpassDependency2 {}
21565impl<'a> SubpassDependency2<'a> {
21566    #[inline]
21567    pub fn src_subpass(mut self, src_subpass: u32) -> Self {
21568        self.src_subpass = src_subpass;
21569        self
21570    }
21571    #[inline]
21572    pub fn dst_subpass(mut self, dst_subpass: u32) -> Self {
21573        self.dst_subpass = dst_subpass;
21574        self
21575    }
21576    #[inline]
21577    pub fn src_stage_mask(mut self, src_stage_mask: PipelineStageFlags) -> Self {
21578        self.src_stage_mask = src_stage_mask;
21579        self
21580    }
21581    #[inline]
21582    pub fn dst_stage_mask(mut self, dst_stage_mask: PipelineStageFlags) -> Self {
21583        self.dst_stage_mask = dst_stage_mask;
21584        self
21585    }
21586    #[inline]
21587    pub fn src_access_mask(mut self, src_access_mask: AccessFlags) -> Self {
21588        self.src_access_mask = src_access_mask;
21589        self
21590    }
21591    #[inline]
21592    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags) -> Self {
21593        self.dst_access_mask = dst_access_mask;
21594        self
21595    }
21596    #[inline]
21597    pub fn dependency_flags(mut self, dependency_flags: DependencyFlags) -> Self {
21598        self.dependency_flags = dependency_flags;
21599        self
21600    }
21601    #[inline]
21602    pub fn view_offset(mut self, view_offset: i32) -> Self {
21603        self.view_offset = view_offset;
21604        self
21605    }
21606    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21607    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21608    #[doc = r" valid extension structs can be pushed into the chain."]
21609    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21610    #[doc = r" chain will look like `A -> D -> B -> C`."]
21611    pub fn push_next<T: ExtendsSubpassDependency2 + ?Sized>(mut self, next: &'a mut T) -> Self {
21612        unsafe {
21613            let next_ptr = <*const T>::cast(next);
21614            let last_next = ptr_chain_iter(next).last().unwrap();
21615            (*last_next).p_next = self.p_next as _;
21616            self.p_next = next_ptr;
21617        }
21618        self
21619    }
21620}
21621#[repr(C)]
21622#[cfg_attr(feature = "debug", derive(Debug))]
21623#[derive(Copy, Clone)]
21624#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassCreateInfo2.html>"]
21625#[must_use]
21626pub struct RenderPassCreateInfo2<'a> {
21627    pub s_type: StructureType,
21628    pub p_next: *const c_void,
21629    pub flags: RenderPassCreateFlags,
21630    pub attachment_count: u32,
21631    pub p_attachments: *const AttachmentDescription2<'a>,
21632    pub subpass_count: u32,
21633    pub p_subpasses: *const SubpassDescription2<'a>,
21634    pub dependency_count: u32,
21635    pub p_dependencies: *const SubpassDependency2<'a>,
21636    pub correlated_view_mask_count: u32,
21637    pub p_correlated_view_masks: *const u32,
21638    pub _marker: PhantomData<&'a ()>,
21639}
21640unsafe impl Send for RenderPassCreateInfo2<'_> {}
21641unsafe impl Sync for RenderPassCreateInfo2<'_> {}
21642impl ::core::default::Default for RenderPassCreateInfo2<'_> {
21643    #[inline]
21644    fn default() -> Self {
21645        Self {
21646            s_type: Self::STRUCTURE_TYPE,
21647            p_next: ::core::ptr::null(),
21648            flags: RenderPassCreateFlags::default(),
21649            attachment_count: u32::default(),
21650            p_attachments: ::core::ptr::null(),
21651            subpass_count: u32::default(),
21652            p_subpasses: ::core::ptr::null(),
21653            dependency_count: u32::default(),
21654            p_dependencies: ::core::ptr::null(),
21655            correlated_view_mask_count: u32::default(),
21656            p_correlated_view_masks: ::core::ptr::null(),
21657            _marker: PhantomData,
21658        }
21659    }
21660}
21661unsafe impl<'a> TaggedStructure for RenderPassCreateInfo2<'a> {
21662    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_CREATE_INFO_2;
21663}
21664pub unsafe trait ExtendsRenderPassCreateInfo2 {}
21665impl<'a> RenderPassCreateInfo2<'a> {
21666    #[inline]
21667    pub fn flags(mut self, flags: RenderPassCreateFlags) -> Self {
21668        self.flags = flags;
21669        self
21670    }
21671    #[inline]
21672    pub fn attachments(mut self, attachments: &'a [AttachmentDescription2<'a>]) -> Self {
21673        self.attachment_count = attachments.len() as _;
21674        self.p_attachments = attachments.as_ptr();
21675        self
21676    }
21677    #[inline]
21678    pub fn subpasses(mut self, subpasses: &'a [SubpassDescription2<'a>]) -> Self {
21679        self.subpass_count = subpasses.len() as _;
21680        self.p_subpasses = subpasses.as_ptr();
21681        self
21682    }
21683    #[inline]
21684    pub fn dependencies(mut self, dependencies: &'a [SubpassDependency2<'a>]) -> Self {
21685        self.dependency_count = dependencies.len() as _;
21686        self.p_dependencies = dependencies.as_ptr();
21687        self
21688    }
21689    #[inline]
21690    pub fn correlated_view_masks(mut self, correlated_view_masks: &'a [u32]) -> Self {
21691        self.correlated_view_mask_count = correlated_view_masks.len() as _;
21692        self.p_correlated_view_masks = correlated_view_masks.as_ptr();
21693        self
21694    }
21695    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21696    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21697    #[doc = r" valid extension structs can be pushed into the chain."]
21698    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21699    #[doc = r" chain will look like `A -> D -> B -> C`."]
21700    pub fn push_next<T: ExtendsRenderPassCreateInfo2 + ?Sized>(mut self, next: &'a mut T) -> Self {
21701        unsafe {
21702            let next_ptr = <*const T>::cast(next);
21703            let last_next = ptr_chain_iter(next).last().unwrap();
21704            (*last_next).p_next = self.p_next as _;
21705            self.p_next = next_ptr;
21706        }
21707        self
21708    }
21709}
21710#[repr(C)]
21711#[cfg_attr(feature = "debug", derive(Debug))]
21712#[derive(Copy, Clone)]
21713#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassBeginInfo.html>"]
21714#[must_use]
21715pub struct SubpassBeginInfo<'a> {
21716    pub s_type: StructureType,
21717    pub p_next: *const c_void,
21718    pub contents: SubpassContents,
21719    pub _marker: PhantomData<&'a ()>,
21720}
21721unsafe impl Send for SubpassBeginInfo<'_> {}
21722unsafe impl Sync for SubpassBeginInfo<'_> {}
21723impl ::core::default::Default for SubpassBeginInfo<'_> {
21724    #[inline]
21725    fn default() -> Self {
21726        Self {
21727            s_type: Self::STRUCTURE_TYPE,
21728            p_next: ::core::ptr::null(),
21729            contents: SubpassContents::default(),
21730            _marker: PhantomData,
21731        }
21732    }
21733}
21734unsafe impl<'a> TaggedStructure for SubpassBeginInfo<'a> {
21735    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_BEGIN_INFO;
21736}
21737impl<'a> SubpassBeginInfo<'a> {
21738    #[inline]
21739    pub fn contents(mut self, contents: SubpassContents) -> Self {
21740        self.contents = contents;
21741        self
21742    }
21743}
21744#[repr(C)]
21745#[cfg_attr(feature = "debug", derive(Debug))]
21746#[derive(Copy, Clone)]
21747#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassEndInfo.html>"]
21748#[must_use]
21749pub struct SubpassEndInfo<'a> {
21750    pub s_type: StructureType,
21751    pub p_next: *const c_void,
21752    pub _marker: PhantomData<&'a ()>,
21753}
21754unsafe impl Send for SubpassEndInfo<'_> {}
21755unsafe impl Sync for SubpassEndInfo<'_> {}
21756impl ::core::default::Default for SubpassEndInfo<'_> {
21757    #[inline]
21758    fn default() -> Self {
21759        Self {
21760            s_type: Self::STRUCTURE_TYPE,
21761            p_next: ::core::ptr::null(),
21762            _marker: PhantomData,
21763        }
21764    }
21765}
21766unsafe impl<'a> TaggedStructure for SubpassEndInfo<'a> {
21767    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_END_INFO;
21768}
21769pub unsafe trait ExtendsSubpassEndInfo {}
21770impl<'a> SubpassEndInfo<'a> {
21771    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
21772    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
21773    #[doc = r" valid extension structs can be pushed into the chain."]
21774    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
21775    #[doc = r" chain will look like `A -> D -> B -> C`."]
21776    pub fn push_next<T: ExtendsSubpassEndInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
21777        unsafe {
21778            let next_ptr = <*const T>::cast(next);
21779            let last_next = ptr_chain_iter(next).last().unwrap();
21780            (*last_next).p_next = self.p_next as _;
21781            self.p_next = next_ptr;
21782        }
21783        self
21784    }
21785}
21786#[repr(C)]
21787#[cfg_attr(feature = "debug", derive(Debug))]
21788#[derive(Copy, Clone)]
21789#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTimelineSemaphoreFeatures.html>"]
21790#[must_use]
21791pub struct PhysicalDeviceTimelineSemaphoreFeatures<'a> {
21792    pub s_type: StructureType,
21793    pub p_next: *mut c_void,
21794    pub timeline_semaphore: Bool32,
21795    pub _marker: PhantomData<&'a ()>,
21796}
21797unsafe impl Send for PhysicalDeviceTimelineSemaphoreFeatures<'_> {}
21798unsafe impl Sync for PhysicalDeviceTimelineSemaphoreFeatures<'_> {}
21799impl ::core::default::Default for PhysicalDeviceTimelineSemaphoreFeatures<'_> {
21800    #[inline]
21801    fn default() -> Self {
21802        Self {
21803            s_type: Self::STRUCTURE_TYPE,
21804            p_next: ::core::ptr::null_mut(),
21805            timeline_semaphore: Bool32::default(),
21806            _marker: PhantomData,
21807        }
21808    }
21809}
21810unsafe impl<'a> TaggedStructure for PhysicalDeviceTimelineSemaphoreFeatures<'a> {
21811    const STRUCTURE_TYPE: StructureType =
21812        StructureType::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES;
21813}
21814unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceTimelineSemaphoreFeatures<'_> {}
21815unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceTimelineSemaphoreFeatures<'_> {}
21816impl<'a> PhysicalDeviceTimelineSemaphoreFeatures<'a> {
21817    #[inline]
21818    pub fn timeline_semaphore(mut self, timeline_semaphore: bool) -> Self {
21819        self.timeline_semaphore = timeline_semaphore.into();
21820        self
21821    }
21822}
21823#[repr(C)]
21824#[cfg_attr(feature = "debug", derive(Debug))]
21825#[derive(Copy, Clone)]
21826#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTimelineSemaphoreProperties.html>"]
21827#[must_use]
21828pub struct PhysicalDeviceTimelineSemaphoreProperties<'a> {
21829    pub s_type: StructureType,
21830    pub p_next: *mut c_void,
21831    pub max_timeline_semaphore_value_difference: u64,
21832    pub _marker: PhantomData<&'a ()>,
21833}
21834unsafe impl Send for PhysicalDeviceTimelineSemaphoreProperties<'_> {}
21835unsafe impl Sync for PhysicalDeviceTimelineSemaphoreProperties<'_> {}
21836impl ::core::default::Default for PhysicalDeviceTimelineSemaphoreProperties<'_> {
21837    #[inline]
21838    fn default() -> Self {
21839        Self {
21840            s_type: Self::STRUCTURE_TYPE,
21841            p_next: ::core::ptr::null_mut(),
21842            max_timeline_semaphore_value_difference: u64::default(),
21843            _marker: PhantomData,
21844        }
21845    }
21846}
21847unsafe impl<'a> TaggedStructure for PhysicalDeviceTimelineSemaphoreProperties<'a> {
21848    const STRUCTURE_TYPE: StructureType =
21849        StructureType::PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES;
21850}
21851unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceTimelineSemaphoreProperties<'_> {}
21852impl<'a> PhysicalDeviceTimelineSemaphoreProperties<'a> {
21853    #[inline]
21854    pub fn max_timeline_semaphore_value_difference(
21855        mut self,
21856        max_timeline_semaphore_value_difference: u64,
21857    ) -> Self {
21858        self.max_timeline_semaphore_value_difference = max_timeline_semaphore_value_difference;
21859        self
21860    }
21861}
21862#[repr(C)]
21863#[cfg_attr(feature = "debug", derive(Debug))]
21864#[derive(Copy, Clone)]
21865#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreTypeCreateInfo.html>"]
21866#[must_use]
21867pub struct SemaphoreTypeCreateInfo<'a> {
21868    pub s_type: StructureType,
21869    pub p_next: *const c_void,
21870    pub semaphore_type: SemaphoreType,
21871    pub initial_value: u64,
21872    pub _marker: PhantomData<&'a ()>,
21873}
21874unsafe impl Send for SemaphoreTypeCreateInfo<'_> {}
21875unsafe impl Sync for SemaphoreTypeCreateInfo<'_> {}
21876impl ::core::default::Default for SemaphoreTypeCreateInfo<'_> {
21877    #[inline]
21878    fn default() -> Self {
21879        Self {
21880            s_type: Self::STRUCTURE_TYPE,
21881            p_next: ::core::ptr::null(),
21882            semaphore_type: SemaphoreType::default(),
21883            initial_value: u64::default(),
21884            _marker: PhantomData,
21885        }
21886    }
21887}
21888unsafe impl<'a> TaggedStructure for SemaphoreTypeCreateInfo<'a> {
21889    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_TYPE_CREATE_INFO;
21890}
21891unsafe impl ExtendsSemaphoreCreateInfo for SemaphoreTypeCreateInfo<'_> {}
21892unsafe impl ExtendsPhysicalDeviceExternalSemaphoreInfo for SemaphoreTypeCreateInfo<'_> {}
21893impl<'a> SemaphoreTypeCreateInfo<'a> {
21894    #[inline]
21895    pub fn semaphore_type(mut self, semaphore_type: SemaphoreType) -> Self {
21896        self.semaphore_type = semaphore_type;
21897        self
21898    }
21899    #[inline]
21900    pub fn initial_value(mut self, initial_value: u64) -> Self {
21901        self.initial_value = initial_value;
21902        self
21903    }
21904}
21905#[repr(C)]
21906#[cfg_attr(feature = "debug", derive(Debug))]
21907#[derive(Copy, Clone)]
21908#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTimelineSemaphoreSubmitInfo.html>"]
21909#[must_use]
21910pub struct TimelineSemaphoreSubmitInfo<'a> {
21911    pub s_type: StructureType,
21912    pub p_next: *const c_void,
21913    pub wait_semaphore_value_count: u32,
21914    pub p_wait_semaphore_values: *const u64,
21915    pub signal_semaphore_value_count: u32,
21916    pub p_signal_semaphore_values: *const u64,
21917    pub _marker: PhantomData<&'a ()>,
21918}
21919unsafe impl Send for TimelineSemaphoreSubmitInfo<'_> {}
21920unsafe impl Sync for TimelineSemaphoreSubmitInfo<'_> {}
21921impl ::core::default::Default for TimelineSemaphoreSubmitInfo<'_> {
21922    #[inline]
21923    fn default() -> Self {
21924        Self {
21925            s_type: Self::STRUCTURE_TYPE,
21926            p_next: ::core::ptr::null(),
21927            wait_semaphore_value_count: u32::default(),
21928            p_wait_semaphore_values: ::core::ptr::null(),
21929            signal_semaphore_value_count: u32::default(),
21930            p_signal_semaphore_values: ::core::ptr::null(),
21931            _marker: PhantomData,
21932        }
21933    }
21934}
21935unsafe impl<'a> TaggedStructure for TimelineSemaphoreSubmitInfo<'a> {
21936    const STRUCTURE_TYPE: StructureType = StructureType::TIMELINE_SEMAPHORE_SUBMIT_INFO;
21937}
21938unsafe impl ExtendsSubmitInfo for TimelineSemaphoreSubmitInfo<'_> {}
21939unsafe impl ExtendsBindSparseInfo for TimelineSemaphoreSubmitInfo<'_> {}
21940impl<'a> TimelineSemaphoreSubmitInfo<'a> {
21941    #[inline]
21942    pub fn wait_semaphore_values(mut self, wait_semaphore_values: &'a [u64]) -> Self {
21943        self.wait_semaphore_value_count = wait_semaphore_values.len() as _;
21944        self.p_wait_semaphore_values = wait_semaphore_values.as_ptr();
21945        self
21946    }
21947    #[inline]
21948    pub fn signal_semaphore_values(mut self, signal_semaphore_values: &'a [u64]) -> Self {
21949        self.signal_semaphore_value_count = signal_semaphore_values.len() as _;
21950        self.p_signal_semaphore_values = signal_semaphore_values.as_ptr();
21951        self
21952    }
21953}
21954#[repr(C)]
21955#[cfg_attr(feature = "debug", derive(Debug))]
21956#[derive(Copy, Clone)]
21957#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreWaitInfo.html>"]
21958#[must_use]
21959pub struct SemaphoreWaitInfo<'a> {
21960    pub s_type: StructureType,
21961    pub p_next: *const c_void,
21962    pub flags: SemaphoreWaitFlags,
21963    pub semaphore_count: u32,
21964    pub p_semaphores: *const Semaphore,
21965    pub p_values: *const u64,
21966    pub _marker: PhantomData<&'a ()>,
21967}
21968unsafe impl Send for SemaphoreWaitInfo<'_> {}
21969unsafe impl Sync for SemaphoreWaitInfo<'_> {}
21970impl ::core::default::Default for SemaphoreWaitInfo<'_> {
21971    #[inline]
21972    fn default() -> Self {
21973        Self {
21974            s_type: Self::STRUCTURE_TYPE,
21975            p_next: ::core::ptr::null(),
21976            flags: SemaphoreWaitFlags::default(),
21977            semaphore_count: u32::default(),
21978            p_semaphores: ::core::ptr::null(),
21979            p_values: ::core::ptr::null(),
21980            _marker: PhantomData,
21981        }
21982    }
21983}
21984unsafe impl<'a> TaggedStructure for SemaphoreWaitInfo<'a> {
21985    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_WAIT_INFO;
21986}
21987impl<'a> SemaphoreWaitInfo<'a> {
21988    #[inline]
21989    pub fn flags(mut self, flags: SemaphoreWaitFlags) -> Self {
21990        self.flags = flags;
21991        self
21992    }
21993    #[inline]
21994    pub fn semaphores(mut self, semaphores: &'a [Semaphore]) -> Self {
21995        self.semaphore_count = semaphores.len() as _;
21996        self.p_semaphores = semaphores.as_ptr();
21997        self
21998    }
21999    #[inline]
22000    pub fn values(mut self, values: &'a [u64]) -> Self {
22001        self.semaphore_count = values.len() as _;
22002        self.p_values = values.as_ptr();
22003        self
22004    }
22005}
22006#[repr(C)]
22007#[cfg_attr(feature = "debug", derive(Debug))]
22008#[derive(Copy, Clone)]
22009#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreSignalInfo.html>"]
22010#[must_use]
22011pub struct SemaphoreSignalInfo<'a> {
22012    pub s_type: StructureType,
22013    pub p_next: *const c_void,
22014    pub semaphore: Semaphore,
22015    pub value: u64,
22016    pub _marker: PhantomData<&'a ()>,
22017}
22018unsafe impl Send for SemaphoreSignalInfo<'_> {}
22019unsafe impl Sync for SemaphoreSignalInfo<'_> {}
22020impl ::core::default::Default for SemaphoreSignalInfo<'_> {
22021    #[inline]
22022    fn default() -> Self {
22023        Self {
22024            s_type: Self::STRUCTURE_TYPE,
22025            p_next: ::core::ptr::null(),
22026            semaphore: Semaphore::default(),
22027            value: u64::default(),
22028            _marker: PhantomData,
22029        }
22030    }
22031}
22032unsafe impl<'a> TaggedStructure for SemaphoreSignalInfo<'a> {
22033    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_SIGNAL_INFO;
22034}
22035impl<'a> SemaphoreSignalInfo<'a> {
22036    #[inline]
22037    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
22038        self.semaphore = semaphore;
22039        self
22040    }
22041    #[inline]
22042    pub fn value(mut self, value: u64) -> Self {
22043        self.value = value;
22044        self
22045    }
22046}
22047#[repr(C)]
22048#[cfg_attr(feature = "debug", derive(Debug))]
22049#[derive(Copy, Clone, Default)]
22050#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVertexInputBindingDivisorDescriptionKHR.html>"]
22051#[must_use]
22052pub struct VertexInputBindingDivisorDescriptionKHR {
22053    pub binding: u32,
22054    pub divisor: u32,
22055}
22056impl VertexInputBindingDivisorDescriptionKHR {
22057    #[inline]
22058    pub fn binding(mut self, binding: u32) -> Self {
22059        self.binding = binding;
22060        self
22061    }
22062    #[inline]
22063    pub fn divisor(mut self, divisor: u32) -> Self {
22064        self.divisor = divisor;
22065        self
22066    }
22067}
22068#[repr(C)]
22069#[cfg_attr(feature = "debug", derive(Debug))]
22070#[derive(Copy, Clone)]
22071#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineVertexInputDivisorStateCreateInfoKHR.html>"]
22072#[must_use]
22073pub struct PipelineVertexInputDivisorStateCreateInfoKHR<'a> {
22074    pub s_type: StructureType,
22075    pub p_next: *const c_void,
22076    pub vertex_binding_divisor_count: u32,
22077    pub p_vertex_binding_divisors: *const VertexInputBindingDivisorDescriptionKHR,
22078    pub _marker: PhantomData<&'a ()>,
22079}
22080unsafe impl Send for PipelineVertexInputDivisorStateCreateInfoKHR<'_> {}
22081unsafe impl Sync for PipelineVertexInputDivisorStateCreateInfoKHR<'_> {}
22082impl ::core::default::Default for PipelineVertexInputDivisorStateCreateInfoKHR<'_> {
22083    #[inline]
22084    fn default() -> Self {
22085        Self {
22086            s_type: Self::STRUCTURE_TYPE,
22087            p_next: ::core::ptr::null(),
22088            vertex_binding_divisor_count: u32::default(),
22089            p_vertex_binding_divisors: ::core::ptr::null(),
22090            _marker: PhantomData,
22091        }
22092    }
22093}
22094unsafe impl<'a> TaggedStructure for PipelineVertexInputDivisorStateCreateInfoKHR<'a> {
22095    const STRUCTURE_TYPE: StructureType =
22096        StructureType::PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR;
22097}
22098unsafe impl ExtendsPipelineVertexInputStateCreateInfo
22099    for PipelineVertexInputDivisorStateCreateInfoKHR<'_>
22100{
22101}
22102impl<'a> PipelineVertexInputDivisorStateCreateInfoKHR<'a> {
22103    #[inline]
22104    pub fn vertex_binding_divisors(
22105        mut self,
22106        vertex_binding_divisors: &'a [VertexInputBindingDivisorDescriptionKHR],
22107    ) -> Self {
22108        self.vertex_binding_divisor_count = vertex_binding_divisors.len() as _;
22109        self.p_vertex_binding_divisors = vertex_binding_divisors.as_ptr();
22110        self
22111    }
22112}
22113#[repr(C)]
22114#[cfg_attr(feature = "debug", derive(Debug))]
22115#[derive(Copy, Clone)]
22116#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT.html>"]
22117#[must_use]
22118pub struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'a> {
22119    pub s_type: StructureType,
22120    pub p_next: *mut c_void,
22121    pub max_vertex_attrib_divisor: u32,
22122    pub _marker: PhantomData<&'a ()>,
22123}
22124unsafe impl Send for PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'_> {}
22125unsafe impl Sync for PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'_> {}
22126impl ::core::default::Default for PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'_> {
22127    #[inline]
22128    fn default() -> Self {
22129        Self {
22130            s_type: Self::STRUCTURE_TYPE,
22131            p_next: ::core::ptr::null_mut(),
22132            max_vertex_attrib_divisor: u32::default(),
22133            _marker: PhantomData,
22134        }
22135    }
22136}
22137unsafe impl<'a> TaggedStructure for PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'a> {
22138    const STRUCTURE_TYPE: StructureType =
22139        StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT;
22140}
22141unsafe impl ExtendsPhysicalDeviceProperties2
22142    for PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'_>
22143{
22144}
22145impl<'a> PhysicalDeviceVertexAttributeDivisorPropertiesEXT<'a> {
22146    #[inline]
22147    pub fn max_vertex_attrib_divisor(mut self, max_vertex_attrib_divisor: u32) -> Self {
22148        self.max_vertex_attrib_divisor = max_vertex_attrib_divisor;
22149        self
22150    }
22151}
22152#[repr(C)]
22153#[cfg_attr(feature = "debug", derive(Debug))]
22154#[derive(Copy, Clone)]
22155#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR.html>"]
22156#[must_use]
22157pub struct PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'a> {
22158    pub s_type: StructureType,
22159    pub p_next: *mut c_void,
22160    pub max_vertex_attrib_divisor: u32,
22161    pub supports_non_zero_first_instance: Bool32,
22162    pub _marker: PhantomData<&'a ()>,
22163}
22164unsafe impl Send for PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'_> {}
22165unsafe impl Sync for PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'_> {}
22166impl ::core::default::Default for PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'_> {
22167    #[inline]
22168    fn default() -> Self {
22169        Self {
22170            s_type: Self::STRUCTURE_TYPE,
22171            p_next: ::core::ptr::null_mut(),
22172            max_vertex_attrib_divisor: u32::default(),
22173            supports_non_zero_first_instance: Bool32::default(),
22174            _marker: PhantomData,
22175        }
22176    }
22177}
22178unsafe impl<'a> TaggedStructure for PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'a> {
22179    const STRUCTURE_TYPE: StructureType =
22180        StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR;
22181}
22182unsafe impl ExtendsPhysicalDeviceProperties2
22183    for PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'_>
22184{
22185}
22186impl<'a> PhysicalDeviceVertexAttributeDivisorPropertiesKHR<'a> {
22187    #[inline]
22188    pub fn max_vertex_attrib_divisor(mut self, max_vertex_attrib_divisor: u32) -> Self {
22189        self.max_vertex_attrib_divisor = max_vertex_attrib_divisor;
22190        self
22191    }
22192    #[inline]
22193    pub fn supports_non_zero_first_instance(
22194        mut self,
22195        supports_non_zero_first_instance: bool,
22196    ) -> Self {
22197        self.supports_non_zero_first_instance = supports_non_zero_first_instance.into();
22198        self
22199    }
22200}
22201#[repr(C)]
22202#[cfg_attr(feature = "debug", derive(Debug))]
22203#[derive(Copy, Clone)]
22204#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePCIBusInfoPropertiesEXT.html>"]
22205#[must_use]
22206pub struct PhysicalDevicePCIBusInfoPropertiesEXT<'a> {
22207    pub s_type: StructureType,
22208    pub p_next: *mut c_void,
22209    pub pci_domain: u32,
22210    pub pci_bus: u32,
22211    pub pci_device: u32,
22212    pub pci_function: u32,
22213    pub _marker: PhantomData<&'a ()>,
22214}
22215unsafe impl Send for PhysicalDevicePCIBusInfoPropertiesEXT<'_> {}
22216unsafe impl Sync for PhysicalDevicePCIBusInfoPropertiesEXT<'_> {}
22217impl ::core::default::Default for PhysicalDevicePCIBusInfoPropertiesEXT<'_> {
22218    #[inline]
22219    fn default() -> Self {
22220        Self {
22221            s_type: Self::STRUCTURE_TYPE,
22222            p_next: ::core::ptr::null_mut(),
22223            pci_domain: u32::default(),
22224            pci_bus: u32::default(),
22225            pci_device: u32::default(),
22226            pci_function: u32::default(),
22227            _marker: PhantomData,
22228        }
22229    }
22230}
22231unsafe impl<'a> TaggedStructure for PhysicalDevicePCIBusInfoPropertiesEXT<'a> {
22232    const STRUCTURE_TYPE: StructureType =
22233        StructureType::PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT;
22234}
22235unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePCIBusInfoPropertiesEXT<'_> {}
22236impl<'a> PhysicalDevicePCIBusInfoPropertiesEXT<'a> {
22237    #[inline]
22238    pub fn pci_domain(mut self, pci_domain: u32) -> Self {
22239        self.pci_domain = pci_domain;
22240        self
22241    }
22242    #[inline]
22243    pub fn pci_bus(mut self, pci_bus: u32) -> Self {
22244        self.pci_bus = pci_bus;
22245        self
22246    }
22247    #[inline]
22248    pub fn pci_device(mut self, pci_device: u32) -> Self {
22249        self.pci_device = pci_device;
22250        self
22251    }
22252    #[inline]
22253    pub fn pci_function(mut self, pci_function: u32) -> Self {
22254        self.pci_function = pci_function;
22255        self
22256    }
22257}
22258#[repr(C)]
22259#[cfg_attr(feature = "debug", derive(Debug))]
22260#[derive(Copy, Clone)]
22261#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportAndroidHardwareBufferInfoANDROID.html>"]
22262#[must_use]
22263pub struct ImportAndroidHardwareBufferInfoANDROID<'a> {
22264    pub s_type: StructureType,
22265    pub p_next: *const c_void,
22266    pub buffer: *mut AHardwareBuffer,
22267    pub _marker: PhantomData<&'a ()>,
22268}
22269unsafe impl Send for ImportAndroidHardwareBufferInfoANDROID<'_> {}
22270unsafe impl Sync for ImportAndroidHardwareBufferInfoANDROID<'_> {}
22271impl ::core::default::Default for ImportAndroidHardwareBufferInfoANDROID<'_> {
22272    #[inline]
22273    fn default() -> Self {
22274        Self {
22275            s_type: Self::STRUCTURE_TYPE,
22276            p_next: ::core::ptr::null(),
22277            buffer: ::core::ptr::null_mut(),
22278            _marker: PhantomData,
22279        }
22280    }
22281}
22282unsafe impl<'a> TaggedStructure for ImportAndroidHardwareBufferInfoANDROID<'a> {
22283    const STRUCTURE_TYPE: StructureType =
22284        StructureType::IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
22285}
22286unsafe impl ExtendsMemoryAllocateInfo for ImportAndroidHardwareBufferInfoANDROID<'_> {}
22287impl<'a> ImportAndroidHardwareBufferInfoANDROID<'a> {
22288    #[inline]
22289    pub fn buffer(mut self, buffer: *mut AHardwareBuffer) -> Self {
22290        self.buffer = buffer;
22291        self
22292    }
22293}
22294#[repr(C)]
22295#[cfg_attr(feature = "debug", derive(Debug))]
22296#[derive(Copy, Clone)]
22297#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidHardwareBufferUsageANDROID.html>"]
22298#[must_use]
22299pub struct AndroidHardwareBufferUsageANDROID<'a> {
22300    pub s_type: StructureType,
22301    pub p_next: *mut c_void,
22302    pub android_hardware_buffer_usage: u64,
22303    pub _marker: PhantomData<&'a ()>,
22304}
22305unsafe impl Send for AndroidHardwareBufferUsageANDROID<'_> {}
22306unsafe impl Sync for AndroidHardwareBufferUsageANDROID<'_> {}
22307impl ::core::default::Default for AndroidHardwareBufferUsageANDROID<'_> {
22308    #[inline]
22309    fn default() -> Self {
22310        Self {
22311            s_type: Self::STRUCTURE_TYPE,
22312            p_next: ::core::ptr::null_mut(),
22313            android_hardware_buffer_usage: u64::default(),
22314            _marker: PhantomData,
22315        }
22316    }
22317}
22318unsafe impl<'a> TaggedStructure for AndroidHardwareBufferUsageANDROID<'a> {
22319    const STRUCTURE_TYPE: StructureType = StructureType::ANDROID_HARDWARE_BUFFER_USAGE_ANDROID;
22320}
22321unsafe impl ExtendsImageFormatProperties2 for AndroidHardwareBufferUsageANDROID<'_> {}
22322impl<'a> AndroidHardwareBufferUsageANDROID<'a> {
22323    #[inline]
22324    pub fn android_hardware_buffer_usage(mut self, android_hardware_buffer_usage: u64) -> Self {
22325        self.android_hardware_buffer_usage = android_hardware_buffer_usage;
22326        self
22327    }
22328}
22329#[repr(C)]
22330#[cfg_attr(feature = "debug", derive(Debug))]
22331#[derive(Copy, Clone)]
22332#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidHardwareBufferPropertiesANDROID.html>"]
22333#[must_use]
22334pub struct AndroidHardwareBufferPropertiesANDROID<'a> {
22335    pub s_type: StructureType,
22336    pub p_next: *mut c_void,
22337    pub allocation_size: DeviceSize,
22338    pub memory_type_bits: u32,
22339    pub _marker: PhantomData<&'a ()>,
22340}
22341unsafe impl Send for AndroidHardwareBufferPropertiesANDROID<'_> {}
22342unsafe impl Sync for AndroidHardwareBufferPropertiesANDROID<'_> {}
22343impl ::core::default::Default for AndroidHardwareBufferPropertiesANDROID<'_> {
22344    #[inline]
22345    fn default() -> Self {
22346        Self {
22347            s_type: Self::STRUCTURE_TYPE,
22348            p_next: ::core::ptr::null_mut(),
22349            allocation_size: DeviceSize::default(),
22350            memory_type_bits: u32::default(),
22351            _marker: PhantomData,
22352        }
22353    }
22354}
22355unsafe impl<'a> TaggedStructure for AndroidHardwareBufferPropertiesANDROID<'a> {
22356    const STRUCTURE_TYPE: StructureType = StructureType::ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID;
22357}
22358pub unsafe trait ExtendsAndroidHardwareBufferPropertiesANDROID {}
22359impl<'a> AndroidHardwareBufferPropertiesANDROID<'a> {
22360    #[inline]
22361    pub fn allocation_size(mut self, allocation_size: DeviceSize) -> Self {
22362        self.allocation_size = allocation_size;
22363        self
22364    }
22365    #[inline]
22366    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
22367        self.memory_type_bits = memory_type_bits;
22368        self
22369    }
22370    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
22371    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
22372    #[doc = r" valid extension structs can be pushed into the chain."]
22373    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
22374    #[doc = r" chain will look like `A -> D -> B -> C`."]
22375    pub fn push_next<T: ExtendsAndroidHardwareBufferPropertiesANDROID + ?Sized>(
22376        mut self,
22377        next: &'a mut T,
22378    ) -> Self {
22379        unsafe {
22380            let next_ptr = <*mut T>::cast(next);
22381            let last_next = ptr_chain_iter(next).last().unwrap();
22382            (*last_next).p_next = self.p_next as _;
22383            self.p_next = next_ptr;
22384        }
22385        self
22386    }
22387}
22388#[repr(C)]
22389#[cfg_attr(feature = "debug", derive(Debug))]
22390#[derive(Copy, Clone)]
22391#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryGetAndroidHardwareBufferInfoANDROID.html>"]
22392#[must_use]
22393pub struct MemoryGetAndroidHardwareBufferInfoANDROID<'a> {
22394    pub s_type: StructureType,
22395    pub p_next: *const c_void,
22396    pub memory: DeviceMemory,
22397    pub _marker: PhantomData<&'a ()>,
22398}
22399unsafe impl Send for MemoryGetAndroidHardwareBufferInfoANDROID<'_> {}
22400unsafe impl Sync for MemoryGetAndroidHardwareBufferInfoANDROID<'_> {}
22401impl ::core::default::Default for MemoryGetAndroidHardwareBufferInfoANDROID<'_> {
22402    #[inline]
22403    fn default() -> Self {
22404        Self {
22405            s_type: Self::STRUCTURE_TYPE,
22406            p_next: ::core::ptr::null(),
22407            memory: DeviceMemory::default(),
22408            _marker: PhantomData,
22409        }
22410    }
22411}
22412unsafe impl<'a> TaggedStructure for MemoryGetAndroidHardwareBufferInfoANDROID<'a> {
22413    const STRUCTURE_TYPE: StructureType =
22414        StructureType::MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID;
22415}
22416impl<'a> MemoryGetAndroidHardwareBufferInfoANDROID<'a> {
22417    #[inline]
22418    pub fn memory(mut self, memory: DeviceMemory) -> Self {
22419        self.memory = memory;
22420        self
22421    }
22422}
22423#[repr(C)]
22424#[cfg_attr(feature = "debug", derive(Debug))]
22425#[derive(Copy, Clone)]
22426#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidHardwareBufferFormatPropertiesANDROID.html>"]
22427#[must_use]
22428pub struct AndroidHardwareBufferFormatPropertiesANDROID<'a> {
22429    pub s_type: StructureType,
22430    pub p_next: *mut c_void,
22431    pub format: Format,
22432    pub external_format: u64,
22433    pub format_features: FormatFeatureFlags,
22434    pub sampler_ycbcr_conversion_components: ComponentMapping,
22435    pub suggested_ycbcr_model: SamplerYcbcrModelConversion,
22436    pub suggested_ycbcr_range: SamplerYcbcrRange,
22437    pub suggested_x_chroma_offset: ChromaLocation,
22438    pub suggested_y_chroma_offset: ChromaLocation,
22439    pub _marker: PhantomData<&'a ()>,
22440}
22441unsafe impl Send for AndroidHardwareBufferFormatPropertiesANDROID<'_> {}
22442unsafe impl Sync for AndroidHardwareBufferFormatPropertiesANDROID<'_> {}
22443impl ::core::default::Default for AndroidHardwareBufferFormatPropertiesANDROID<'_> {
22444    #[inline]
22445    fn default() -> Self {
22446        Self {
22447            s_type: Self::STRUCTURE_TYPE,
22448            p_next: ::core::ptr::null_mut(),
22449            format: Format::default(),
22450            external_format: u64::default(),
22451            format_features: FormatFeatureFlags::default(),
22452            sampler_ycbcr_conversion_components: ComponentMapping::default(),
22453            suggested_ycbcr_model: SamplerYcbcrModelConversion::default(),
22454            suggested_ycbcr_range: SamplerYcbcrRange::default(),
22455            suggested_x_chroma_offset: ChromaLocation::default(),
22456            suggested_y_chroma_offset: ChromaLocation::default(),
22457            _marker: PhantomData,
22458        }
22459    }
22460}
22461unsafe impl<'a> TaggedStructure for AndroidHardwareBufferFormatPropertiesANDROID<'a> {
22462    const STRUCTURE_TYPE: StructureType =
22463        StructureType::ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID;
22464}
22465unsafe impl ExtendsAndroidHardwareBufferPropertiesANDROID
22466    for AndroidHardwareBufferFormatPropertiesANDROID<'_>
22467{
22468}
22469impl<'a> AndroidHardwareBufferFormatPropertiesANDROID<'a> {
22470    #[inline]
22471    pub fn format(mut self, format: Format) -> Self {
22472        self.format = format;
22473        self
22474    }
22475    #[inline]
22476    pub fn external_format(mut self, external_format: u64) -> Self {
22477        self.external_format = external_format;
22478        self
22479    }
22480    #[inline]
22481    pub fn format_features(mut self, format_features: FormatFeatureFlags) -> Self {
22482        self.format_features = format_features;
22483        self
22484    }
22485    #[inline]
22486    pub fn sampler_ycbcr_conversion_components(
22487        mut self,
22488        sampler_ycbcr_conversion_components: ComponentMapping,
22489    ) -> Self {
22490        self.sampler_ycbcr_conversion_components = sampler_ycbcr_conversion_components;
22491        self
22492    }
22493    #[inline]
22494    pub fn suggested_ycbcr_model(
22495        mut self,
22496        suggested_ycbcr_model: SamplerYcbcrModelConversion,
22497    ) -> Self {
22498        self.suggested_ycbcr_model = suggested_ycbcr_model;
22499        self
22500    }
22501    #[inline]
22502    pub fn suggested_ycbcr_range(mut self, suggested_ycbcr_range: SamplerYcbcrRange) -> Self {
22503        self.suggested_ycbcr_range = suggested_ycbcr_range;
22504        self
22505    }
22506    #[inline]
22507    pub fn suggested_x_chroma_offset(mut self, suggested_x_chroma_offset: ChromaLocation) -> Self {
22508        self.suggested_x_chroma_offset = suggested_x_chroma_offset;
22509        self
22510    }
22511    #[inline]
22512    pub fn suggested_y_chroma_offset(mut self, suggested_y_chroma_offset: ChromaLocation) -> Self {
22513        self.suggested_y_chroma_offset = suggested_y_chroma_offset;
22514        self
22515    }
22516}
22517#[repr(C)]
22518#[cfg_attr(feature = "debug", derive(Debug))]
22519#[derive(Copy, Clone)]
22520#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferInheritanceConditionalRenderingInfoEXT.html>"]
22521#[must_use]
22522pub struct CommandBufferInheritanceConditionalRenderingInfoEXT<'a> {
22523    pub s_type: StructureType,
22524    pub p_next: *const c_void,
22525    pub conditional_rendering_enable: Bool32,
22526    pub _marker: PhantomData<&'a ()>,
22527}
22528unsafe impl Send for CommandBufferInheritanceConditionalRenderingInfoEXT<'_> {}
22529unsafe impl Sync for CommandBufferInheritanceConditionalRenderingInfoEXT<'_> {}
22530impl ::core::default::Default for CommandBufferInheritanceConditionalRenderingInfoEXT<'_> {
22531    #[inline]
22532    fn default() -> Self {
22533        Self {
22534            s_type: Self::STRUCTURE_TYPE,
22535            p_next: ::core::ptr::null(),
22536            conditional_rendering_enable: Bool32::default(),
22537            _marker: PhantomData,
22538        }
22539    }
22540}
22541unsafe impl<'a> TaggedStructure for CommandBufferInheritanceConditionalRenderingInfoEXT<'a> {
22542    const STRUCTURE_TYPE: StructureType =
22543        StructureType::COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT;
22544}
22545unsafe impl ExtendsCommandBufferInheritanceInfo
22546    for CommandBufferInheritanceConditionalRenderingInfoEXT<'_>
22547{
22548}
22549impl<'a> CommandBufferInheritanceConditionalRenderingInfoEXT<'a> {
22550    #[inline]
22551    pub fn conditional_rendering_enable(mut self, conditional_rendering_enable: bool) -> Self {
22552        self.conditional_rendering_enable = conditional_rendering_enable.into();
22553        self
22554    }
22555}
22556#[repr(C)]
22557#[cfg_attr(feature = "debug", derive(Debug))]
22558#[derive(Copy, Clone)]
22559#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalFormatANDROID.html>"]
22560#[must_use]
22561pub struct ExternalFormatANDROID<'a> {
22562    pub s_type: StructureType,
22563    pub p_next: *mut c_void,
22564    pub external_format: u64,
22565    pub _marker: PhantomData<&'a ()>,
22566}
22567unsafe impl Send for ExternalFormatANDROID<'_> {}
22568unsafe impl Sync for ExternalFormatANDROID<'_> {}
22569impl ::core::default::Default for ExternalFormatANDROID<'_> {
22570    #[inline]
22571    fn default() -> Self {
22572        Self {
22573            s_type: Self::STRUCTURE_TYPE,
22574            p_next: ::core::ptr::null_mut(),
22575            external_format: u64::default(),
22576            _marker: PhantomData,
22577        }
22578    }
22579}
22580unsafe impl<'a> TaggedStructure for ExternalFormatANDROID<'a> {
22581    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_FORMAT_ANDROID;
22582}
22583unsafe impl ExtendsImageCreateInfo for ExternalFormatANDROID<'_> {}
22584unsafe impl ExtendsSamplerYcbcrConversionCreateInfo for ExternalFormatANDROID<'_> {}
22585unsafe impl ExtendsAttachmentDescription2 for ExternalFormatANDROID<'_> {}
22586unsafe impl ExtendsGraphicsPipelineCreateInfo for ExternalFormatANDROID<'_> {}
22587unsafe impl ExtendsCommandBufferInheritanceInfo for ExternalFormatANDROID<'_> {}
22588impl<'a> ExternalFormatANDROID<'a> {
22589    #[inline]
22590    pub fn external_format(mut self, external_format: u64) -> Self {
22591        self.external_format = external_format;
22592        self
22593    }
22594}
22595#[repr(C)]
22596#[cfg_attr(feature = "debug", derive(Debug))]
22597#[derive(Copy, Clone)]
22598#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevice8BitStorageFeatures.html>"]
22599#[must_use]
22600pub struct PhysicalDevice8BitStorageFeatures<'a> {
22601    pub s_type: StructureType,
22602    pub p_next: *mut c_void,
22603    pub storage_buffer8_bit_access: Bool32,
22604    pub uniform_and_storage_buffer8_bit_access: Bool32,
22605    pub storage_push_constant8: Bool32,
22606    pub _marker: PhantomData<&'a ()>,
22607}
22608unsafe impl Send for PhysicalDevice8BitStorageFeatures<'_> {}
22609unsafe impl Sync for PhysicalDevice8BitStorageFeatures<'_> {}
22610impl ::core::default::Default for PhysicalDevice8BitStorageFeatures<'_> {
22611    #[inline]
22612    fn default() -> Self {
22613        Self {
22614            s_type: Self::STRUCTURE_TYPE,
22615            p_next: ::core::ptr::null_mut(),
22616            storage_buffer8_bit_access: Bool32::default(),
22617            uniform_and_storage_buffer8_bit_access: Bool32::default(),
22618            storage_push_constant8: Bool32::default(),
22619            _marker: PhantomData,
22620        }
22621    }
22622}
22623unsafe impl<'a> TaggedStructure for PhysicalDevice8BitStorageFeatures<'a> {
22624    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES;
22625}
22626unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevice8BitStorageFeatures<'_> {}
22627unsafe impl ExtendsDeviceCreateInfo for PhysicalDevice8BitStorageFeatures<'_> {}
22628impl<'a> PhysicalDevice8BitStorageFeatures<'a> {
22629    #[inline]
22630    pub fn storage_buffer8_bit_access(mut self, storage_buffer8_bit_access: bool) -> Self {
22631        self.storage_buffer8_bit_access = storage_buffer8_bit_access.into();
22632        self
22633    }
22634    #[inline]
22635    pub fn uniform_and_storage_buffer8_bit_access(
22636        mut self,
22637        uniform_and_storage_buffer8_bit_access: bool,
22638    ) -> Self {
22639        self.uniform_and_storage_buffer8_bit_access = uniform_and_storage_buffer8_bit_access.into();
22640        self
22641    }
22642    #[inline]
22643    pub fn storage_push_constant8(mut self, storage_push_constant8: bool) -> Self {
22644        self.storage_push_constant8 = storage_push_constant8.into();
22645        self
22646    }
22647}
22648#[repr(C)]
22649#[cfg_attr(feature = "debug", derive(Debug))]
22650#[derive(Copy, Clone)]
22651#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceConditionalRenderingFeaturesEXT.html>"]
22652#[must_use]
22653pub struct PhysicalDeviceConditionalRenderingFeaturesEXT<'a> {
22654    pub s_type: StructureType,
22655    pub p_next: *mut c_void,
22656    pub conditional_rendering: Bool32,
22657    pub inherited_conditional_rendering: Bool32,
22658    pub _marker: PhantomData<&'a ()>,
22659}
22660unsafe impl Send for PhysicalDeviceConditionalRenderingFeaturesEXT<'_> {}
22661unsafe impl Sync for PhysicalDeviceConditionalRenderingFeaturesEXT<'_> {}
22662impl ::core::default::Default for PhysicalDeviceConditionalRenderingFeaturesEXT<'_> {
22663    #[inline]
22664    fn default() -> Self {
22665        Self {
22666            s_type: Self::STRUCTURE_TYPE,
22667            p_next: ::core::ptr::null_mut(),
22668            conditional_rendering: Bool32::default(),
22669            inherited_conditional_rendering: Bool32::default(),
22670            _marker: PhantomData,
22671        }
22672    }
22673}
22674unsafe impl<'a> TaggedStructure for PhysicalDeviceConditionalRenderingFeaturesEXT<'a> {
22675    const STRUCTURE_TYPE: StructureType =
22676        StructureType::PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT;
22677}
22678unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceConditionalRenderingFeaturesEXT<'_> {}
22679unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceConditionalRenderingFeaturesEXT<'_> {}
22680impl<'a> PhysicalDeviceConditionalRenderingFeaturesEXT<'a> {
22681    #[inline]
22682    pub fn conditional_rendering(mut self, conditional_rendering: bool) -> Self {
22683        self.conditional_rendering = conditional_rendering.into();
22684        self
22685    }
22686    #[inline]
22687    pub fn inherited_conditional_rendering(
22688        mut self,
22689        inherited_conditional_rendering: bool,
22690    ) -> Self {
22691        self.inherited_conditional_rendering = inherited_conditional_rendering.into();
22692        self
22693    }
22694}
22695#[repr(C)]
22696#[cfg_attr(feature = "debug", derive(Debug))]
22697#[derive(Copy, Clone)]
22698#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html>"]
22699#[must_use]
22700pub struct PhysicalDeviceVulkanMemoryModelFeatures<'a> {
22701    pub s_type: StructureType,
22702    pub p_next: *mut c_void,
22703    pub vulkan_memory_model: Bool32,
22704    pub vulkan_memory_model_device_scope: Bool32,
22705    pub vulkan_memory_model_availability_visibility_chains: Bool32,
22706    pub _marker: PhantomData<&'a ()>,
22707}
22708unsafe impl Send for PhysicalDeviceVulkanMemoryModelFeatures<'_> {}
22709unsafe impl Sync for PhysicalDeviceVulkanMemoryModelFeatures<'_> {}
22710impl ::core::default::Default for PhysicalDeviceVulkanMemoryModelFeatures<'_> {
22711    #[inline]
22712    fn default() -> Self {
22713        Self {
22714            s_type: Self::STRUCTURE_TYPE,
22715            p_next: ::core::ptr::null_mut(),
22716            vulkan_memory_model: Bool32::default(),
22717            vulkan_memory_model_device_scope: Bool32::default(),
22718            vulkan_memory_model_availability_visibility_chains: Bool32::default(),
22719            _marker: PhantomData,
22720        }
22721    }
22722}
22723unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkanMemoryModelFeatures<'a> {
22724    const STRUCTURE_TYPE: StructureType =
22725        StructureType::PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES;
22726}
22727unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVulkanMemoryModelFeatures<'_> {}
22728unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVulkanMemoryModelFeatures<'_> {}
22729impl<'a> PhysicalDeviceVulkanMemoryModelFeatures<'a> {
22730    #[inline]
22731    pub fn vulkan_memory_model(mut self, vulkan_memory_model: bool) -> Self {
22732        self.vulkan_memory_model = vulkan_memory_model.into();
22733        self
22734    }
22735    #[inline]
22736    pub fn vulkan_memory_model_device_scope(
22737        mut self,
22738        vulkan_memory_model_device_scope: bool,
22739    ) -> Self {
22740        self.vulkan_memory_model_device_scope = vulkan_memory_model_device_scope.into();
22741        self
22742    }
22743    #[inline]
22744    pub fn vulkan_memory_model_availability_visibility_chains(
22745        mut self,
22746        vulkan_memory_model_availability_visibility_chains: bool,
22747    ) -> Self {
22748        self.vulkan_memory_model_availability_visibility_chains =
22749            vulkan_memory_model_availability_visibility_chains.into();
22750        self
22751    }
22752}
22753#[repr(C)]
22754#[cfg_attr(feature = "debug", derive(Debug))]
22755#[derive(Copy, Clone)]
22756#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html>"]
22757#[must_use]
22758pub struct PhysicalDeviceShaderAtomicInt64Features<'a> {
22759    pub s_type: StructureType,
22760    pub p_next: *mut c_void,
22761    pub shader_buffer_int64_atomics: Bool32,
22762    pub shader_shared_int64_atomics: Bool32,
22763    pub _marker: PhantomData<&'a ()>,
22764}
22765unsafe impl Send for PhysicalDeviceShaderAtomicInt64Features<'_> {}
22766unsafe impl Sync for PhysicalDeviceShaderAtomicInt64Features<'_> {}
22767impl ::core::default::Default for PhysicalDeviceShaderAtomicInt64Features<'_> {
22768    #[inline]
22769    fn default() -> Self {
22770        Self {
22771            s_type: Self::STRUCTURE_TYPE,
22772            p_next: ::core::ptr::null_mut(),
22773            shader_buffer_int64_atomics: Bool32::default(),
22774            shader_shared_int64_atomics: Bool32::default(),
22775            _marker: PhantomData,
22776        }
22777    }
22778}
22779unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderAtomicInt64Features<'a> {
22780    const STRUCTURE_TYPE: StructureType =
22781        StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES;
22782}
22783unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderAtomicInt64Features<'_> {}
22784unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderAtomicInt64Features<'_> {}
22785impl<'a> PhysicalDeviceShaderAtomicInt64Features<'a> {
22786    #[inline]
22787    pub fn shader_buffer_int64_atomics(mut self, shader_buffer_int64_atomics: bool) -> Self {
22788        self.shader_buffer_int64_atomics = shader_buffer_int64_atomics.into();
22789        self
22790    }
22791    #[inline]
22792    pub fn shader_shared_int64_atomics(mut self, shader_shared_int64_atomics: bool) -> Self {
22793        self.shader_shared_int64_atomics = shader_shared_int64_atomics.into();
22794        self
22795    }
22796}
22797#[repr(C)]
22798#[cfg_attr(feature = "debug", derive(Debug))]
22799#[derive(Copy, Clone)]
22800#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderAtomicFloatFeaturesEXT.html>"]
22801#[must_use]
22802pub struct PhysicalDeviceShaderAtomicFloatFeaturesEXT<'a> {
22803    pub s_type: StructureType,
22804    pub p_next: *mut c_void,
22805    pub shader_buffer_float32_atomics: Bool32,
22806    pub shader_buffer_float32_atomic_add: Bool32,
22807    pub shader_buffer_float64_atomics: Bool32,
22808    pub shader_buffer_float64_atomic_add: Bool32,
22809    pub shader_shared_float32_atomics: Bool32,
22810    pub shader_shared_float32_atomic_add: Bool32,
22811    pub shader_shared_float64_atomics: Bool32,
22812    pub shader_shared_float64_atomic_add: Bool32,
22813    pub shader_image_float32_atomics: Bool32,
22814    pub shader_image_float32_atomic_add: Bool32,
22815    pub sparse_image_float32_atomics: Bool32,
22816    pub sparse_image_float32_atomic_add: Bool32,
22817    pub _marker: PhantomData<&'a ()>,
22818}
22819unsafe impl Send for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'_> {}
22820unsafe impl Sync for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'_> {}
22821impl ::core::default::Default for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'_> {
22822    #[inline]
22823    fn default() -> Self {
22824        Self {
22825            s_type: Self::STRUCTURE_TYPE,
22826            p_next: ::core::ptr::null_mut(),
22827            shader_buffer_float32_atomics: Bool32::default(),
22828            shader_buffer_float32_atomic_add: Bool32::default(),
22829            shader_buffer_float64_atomics: Bool32::default(),
22830            shader_buffer_float64_atomic_add: Bool32::default(),
22831            shader_shared_float32_atomics: Bool32::default(),
22832            shader_shared_float32_atomic_add: Bool32::default(),
22833            shader_shared_float64_atomics: Bool32::default(),
22834            shader_shared_float64_atomic_add: Bool32::default(),
22835            shader_image_float32_atomics: Bool32::default(),
22836            shader_image_float32_atomic_add: Bool32::default(),
22837            sparse_image_float32_atomics: Bool32::default(),
22838            sparse_image_float32_atomic_add: Bool32::default(),
22839            _marker: PhantomData,
22840        }
22841    }
22842}
22843unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'a> {
22844    const STRUCTURE_TYPE: StructureType =
22845        StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT;
22846}
22847unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'_> {}
22848unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderAtomicFloatFeaturesEXT<'_> {}
22849impl<'a> PhysicalDeviceShaderAtomicFloatFeaturesEXT<'a> {
22850    #[inline]
22851    pub fn shader_buffer_float32_atomics(mut self, shader_buffer_float32_atomics: bool) -> Self {
22852        self.shader_buffer_float32_atomics = shader_buffer_float32_atomics.into();
22853        self
22854    }
22855    #[inline]
22856    pub fn shader_buffer_float32_atomic_add(
22857        mut self,
22858        shader_buffer_float32_atomic_add: bool,
22859    ) -> Self {
22860        self.shader_buffer_float32_atomic_add = shader_buffer_float32_atomic_add.into();
22861        self
22862    }
22863    #[inline]
22864    pub fn shader_buffer_float64_atomics(mut self, shader_buffer_float64_atomics: bool) -> Self {
22865        self.shader_buffer_float64_atomics = shader_buffer_float64_atomics.into();
22866        self
22867    }
22868    #[inline]
22869    pub fn shader_buffer_float64_atomic_add(
22870        mut self,
22871        shader_buffer_float64_atomic_add: bool,
22872    ) -> Self {
22873        self.shader_buffer_float64_atomic_add = shader_buffer_float64_atomic_add.into();
22874        self
22875    }
22876    #[inline]
22877    pub fn shader_shared_float32_atomics(mut self, shader_shared_float32_atomics: bool) -> Self {
22878        self.shader_shared_float32_atomics = shader_shared_float32_atomics.into();
22879        self
22880    }
22881    #[inline]
22882    pub fn shader_shared_float32_atomic_add(
22883        mut self,
22884        shader_shared_float32_atomic_add: bool,
22885    ) -> Self {
22886        self.shader_shared_float32_atomic_add = shader_shared_float32_atomic_add.into();
22887        self
22888    }
22889    #[inline]
22890    pub fn shader_shared_float64_atomics(mut self, shader_shared_float64_atomics: bool) -> Self {
22891        self.shader_shared_float64_atomics = shader_shared_float64_atomics.into();
22892        self
22893    }
22894    #[inline]
22895    pub fn shader_shared_float64_atomic_add(
22896        mut self,
22897        shader_shared_float64_atomic_add: bool,
22898    ) -> Self {
22899        self.shader_shared_float64_atomic_add = shader_shared_float64_atomic_add.into();
22900        self
22901    }
22902    #[inline]
22903    pub fn shader_image_float32_atomics(mut self, shader_image_float32_atomics: bool) -> Self {
22904        self.shader_image_float32_atomics = shader_image_float32_atomics.into();
22905        self
22906    }
22907    #[inline]
22908    pub fn shader_image_float32_atomic_add(
22909        mut self,
22910        shader_image_float32_atomic_add: bool,
22911    ) -> Self {
22912        self.shader_image_float32_atomic_add = shader_image_float32_atomic_add.into();
22913        self
22914    }
22915    #[inline]
22916    pub fn sparse_image_float32_atomics(mut self, sparse_image_float32_atomics: bool) -> Self {
22917        self.sparse_image_float32_atomics = sparse_image_float32_atomics.into();
22918        self
22919    }
22920    #[inline]
22921    pub fn sparse_image_float32_atomic_add(
22922        mut self,
22923        sparse_image_float32_atomic_add: bool,
22924    ) -> Self {
22925        self.sparse_image_float32_atomic_add = sparse_image_float32_atomic_add.into();
22926        self
22927    }
22928}
22929#[repr(C)]
22930#[cfg_attr(feature = "debug", derive(Debug))]
22931#[derive(Copy, Clone)]
22932#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT.html>"]
22933#[must_use]
22934pub struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'a> {
22935    pub s_type: StructureType,
22936    pub p_next: *mut c_void,
22937    pub shader_buffer_float16_atomics: Bool32,
22938    pub shader_buffer_float16_atomic_add: Bool32,
22939    pub shader_buffer_float16_atomic_min_max: Bool32,
22940    pub shader_buffer_float32_atomic_min_max: Bool32,
22941    pub shader_buffer_float64_atomic_min_max: Bool32,
22942    pub shader_shared_float16_atomics: Bool32,
22943    pub shader_shared_float16_atomic_add: Bool32,
22944    pub shader_shared_float16_atomic_min_max: Bool32,
22945    pub shader_shared_float32_atomic_min_max: Bool32,
22946    pub shader_shared_float64_atomic_min_max: Bool32,
22947    pub shader_image_float32_atomic_min_max: Bool32,
22948    pub sparse_image_float32_atomic_min_max: Bool32,
22949    pub _marker: PhantomData<&'a ()>,
22950}
22951unsafe impl Send for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'_> {}
22952unsafe impl Sync for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'_> {}
22953impl ::core::default::Default for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'_> {
22954    #[inline]
22955    fn default() -> Self {
22956        Self {
22957            s_type: Self::STRUCTURE_TYPE,
22958            p_next: ::core::ptr::null_mut(),
22959            shader_buffer_float16_atomics: Bool32::default(),
22960            shader_buffer_float16_atomic_add: Bool32::default(),
22961            shader_buffer_float16_atomic_min_max: Bool32::default(),
22962            shader_buffer_float32_atomic_min_max: Bool32::default(),
22963            shader_buffer_float64_atomic_min_max: Bool32::default(),
22964            shader_shared_float16_atomics: Bool32::default(),
22965            shader_shared_float16_atomic_add: Bool32::default(),
22966            shader_shared_float16_atomic_min_max: Bool32::default(),
22967            shader_shared_float32_atomic_min_max: Bool32::default(),
22968            shader_shared_float64_atomic_min_max: Bool32::default(),
22969            shader_image_float32_atomic_min_max: Bool32::default(),
22970            sparse_image_float32_atomic_min_max: Bool32::default(),
22971            _marker: PhantomData,
22972        }
22973    }
22974}
22975unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'a> {
22976    const STRUCTURE_TYPE: StructureType =
22977        StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT;
22978}
22979unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'_> {}
22980unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'_> {}
22981impl<'a> PhysicalDeviceShaderAtomicFloat2FeaturesEXT<'a> {
22982    #[inline]
22983    pub fn shader_buffer_float16_atomics(mut self, shader_buffer_float16_atomics: bool) -> Self {
22984        self.shader_buffer_float16_atomics = shader_buffer_float16_atomics.into();
22985        self
22986    }
22987    #[inline]
22988    pub fn shader_buffer_float16_atomic_add(
22989        mut self,
22990        shader_buffer_float16_atomic_add: bool,
22991    ) -> Self {
22992        self.shader_buffer_float16_atomic_add = shader_buffer_float16_atomic_add.into();
22993        self
22994    }
22995    #[inline]
22996    pub fn shader_buffer_float16_atomic_min_max(
22997        mut self,
22998        shader_buffer_float16_atomic_min_max: bool,
22999    ) -> Self {
23000        self.shader_buffer_float16_atomic_min_max = shader_buffer_float16_atomic_min_max.into();
23001        self
23002    }
23003    #[inline]
23004    pub fn shader_buffer_float32_atomic_min_max(
23005        mut self,
23006        shader_buffer_float32_atomic_min_max: bool,
23007    ) -> Self {
23008        self.shader_buffer_float32_atomic_min_max = shader_buffer_float32_atomic_min_max.into();
23009        self
23010    }
23011    #[inline]
23012    pub fn shader_buffer_float64_atomic_min_max(
23013        mut self,
23014        shader_buffer_float64_atomic_min_max: bool,
23015    ) -> Self {
23016        self.shader_buffer_float64_atomic_min_max = shader_buffer_float64_atomic_min_max.into();
23017        self
23018    }
23019    #[inline]
23020    pub fn shader_shared_float16_atomics(mut self, shader_shared_float16_atomics: bool) -> Self {
23021        self.shader_shared_float16_atomics = shader_shared_float16_atomics.into();
23022        self
23023    }
23024    #[inline]
23025    pub fn shader_shared_float16_atomic_add(
23026        mut self,
23027        shader_shared_float16_atomic_add: bool,
23028    ) -> Self {
23029        self.shader_shared_float16_atomic_add = shader_shared_float16_atomic_add.into();
23030        self
23031    }
23032    #[inline]
23033    pub fn shader_shared_float16_atomic_min_max(
23034        mut self,
23035        shader_shared_float16_atomic_min_max: bool,
23036    ) -> Self {
23037        self.shader_shared_float16_atomic_min_max = shader_shared_float16_atomic_min_max.into();
23038        self
23039    }
23040    #[inline]
23041    pub fn shader_shared_float32_atomic_min_max(
23042        mut self,
23043        shader_shared_float32_atomic_min_max: bool,
23044    ) -> Self {
23045        self.shader_shared_float32_atomic_min_max = shader_shared_float32_atomic_min_max.into();
23046        self
23047    }
23048    #[inline]
23049    pub fn shader_shared_float64_atomic_min_max(
23050        mut self,
23051        shader_shared_float64_atomic_min_max: bool,
23052    ) -> Self {
23053        self.shader_shared_float64_atomic_min_max = shader_shared_float64_atomic_min_max.into();
23054        self
23055    }
23056    #[inline]
23057    pub fn shader_image_float32_atomic_min_max(
23058        mut self,
23059        shader_image_float32_atomic_min_max: bool,
23060    ) -> Self {
23061        self.shader_image_float32_atomic_min_max = shader_image_float32_atomic_min_max.into();
23062        self
23063    }
23064    #[inline]
23065    pub fn sparse_image_float32_atomic_min_max(
23066        mut self,
23067        sparse_image_float32_atomic_min_max: bool,
23068    ) -> Self {
23069        self.sparse_image_float32_atomic_min_max = sparse_image_float32_atomic_min_max.into();
23070        self
23071    }
23072}
23073#[repr(C)]
23074#[cfg_attr(feature = "debug", derive(Debug))]
23075#[derive(Copy, Clone)]
23076#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR.html>"]
23077#[must_use]
23078pub struct PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'a> {
23079    pub s_type: StructureType,
23080    pub p_next: *mut c_void,
23081    pub vertex_attribute_instance_rate_divisor: Bool32,
23082    pub vertex_attribute_instance_rate_zero_divisor: Bool32,
23083    pub _marker: PhantomData<&'a ()>,
23084}
23085unsafe impl Send for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'_> {}
23086unsafe impl Sync for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'_> {}
23087impl ::core::default::Default for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'_> {
23088    #[inline]
23089    fn default() -> Self {
23090        Self {
23091            s_type: Self::STRUCTURE_TYPE,
23092            p_next: ::core::ptr::null_mut(),
23093            vertex_attribute_instance_rate_divisor: Bool32::default(),
23094            vertex_attribute_instance_rate_zero_divisor: Bool32::default(),
23095            _marker: PhantomData,
23096        }
23097    }
23098}
23099unsafe impl<'a> TaggedStructure for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'a> {
23100    const STRUCTURE_TYPE: StructureType =
23101        StructureType::PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR;
23102}
23103unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'_> {}
23104unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'_> {}
23105impl<'a> PhysicalDeviceVertexAttributeDivisorFeaturesKHR<'a> {
23106    #[inline]
23107    pub fn vertex_attribute_instance_rate_divisor(
23108        mut self,
23109        vertex_attribute_instance_rate_divisor: bool,
23110    ) -> Self {
23111        self.vertex_attribute_instance_rate_divisor = vertex_attribute_instance_rate_divisor.into();
23112        self
23113    }
23114    #[inline]
23115    pub fn vertex_attribute_instance_rate_zero_divisor(
23116        mut self,
23117        vertex_attribute_instance_rate_zero_divisor: bool,
23118    ) -> Self {
23119        self.vertex_attribute_instance_rate_zero_divisor =
23120            vertex_attribute_instance_rate_zero_divisor.into();
23121        self
23122    }
23123}
23124#[repr(C)]
23125#[cfg_attr(feature = "debug", derive(Debug))]
23126#[derive(Copy, Clone)]
23127#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyCheckpointPropertiesNV.html>"]
23128#[must_use]
23129pub struct QueueFamilyCheckpointPropertiesNV<'a> {
23130    pub s_type: StructureType,
23131    pub p_next: *mut c_void,
23132    pub checkpoint_execution_stage_mask: PipelineStageFlags,
23133    pub _marker: PhantomData<&'a ()>,
23134}
23135unsafe impl Send for QueueFamilyCheckpointPropertiesNV<'_> {}
23136unsafe impl Sync for QueueFamilyCheckpointPropertiesNV<'_> {}
23137impl ::core::default::Default for QueueFamilyCheckpointPropertiesNV<'_> {
23138    #[inline]
23139    fn default() -> Self {
23140        Self {
23141            s_type: Self::STRUCTURE_TYPE,
23142            p_next: ::core::ptr::null_mut(),
23143            checkpoint_execution_stage_mask: PipelineStageFlags::default(),
23144            _marker: PhantomData,
23145        }
23146    }
23147}
23148unsafe impl<'a> TaggedStructure for QueueFamilyCheckpointPropertiesNV<'a> {
23149    const STRUCTURE_TYPE: StructureType = StructureType::QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV;
23150}
23151unsafe impl ExtendsQueueFamilyProperties2 for QueueFamilyCheckpointPropertiesNV<'_> {}
23152impl<'a> QueueFamilyCheckpointPropertiesNV<'a> {
23153    #[inline]
23154    pub fn checkpoint_execution_stage_mask(
23155        mut self,
23156        checkpoint_execution_stage_mask: PipelineStageFlags,
23157    ) -> Self {
23158        self.checkpoint_execution_stage_mask = checkpoint_execution_stage_mask;
23159        self
23160    }
23161}
23162#[repr(C)]
23163#[cfg_attr(feature = "debug", derive(Debug))]
23164#[derive(Copy, Clone)]
23165#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCheckpointDataNV.html>"]
23166#[must_use]
23167pub struct CheckpointDataNV<'a> {
23168    pub s_type: StructureType,
23169    pub p_next: *mut c_void,
23170    pub stage: PipelineStageFlags,
23171    pub p_checkpoint_marker: *mut c_void,
23172    pub _marker: PhantomData<&'a ()>,
23173}
23174unsafe impl Send for CheckpointDataNV<'_> {}
23175unsafe impl Sync for CheckpointDataNV<'_> {}
23176impl ::core::default::Default for CheckpointDataNV<'_> {
23177    #[inline]
23178    fn default() -> Self {
23179        Self {
23180            s_type: Self::STRUCTURE_TYPE,
23181            p_next: ::core::ptr::null_mut(),
23182            stage: PipelineStageFlags::default(),
23183            p_checkpoint_marker: ::core::ptr::null_mut(),
23184            _marker: PhantomData,
23185        }
23186    }
23187}
23188unsafe impl<'a> TaggedStructure for CheckpointDataNV<'a> {
23189    const STRUCTURE_TYPE: StructureType = StructureType::CHECKPOINT_DATA_NV;
23190}
23191impl<'a> CheckpointDataNV<'a> {
23192    #[inline]
23193    pub fn stage(mut self, stage: PipelineStageFlags) -> Self {
23194        self.stage = stage;
23195        self
23196    }
23197    #[inline]
23198    pub fn checkpoint_marker(mut self, checkpoint_marker: *mut c_void) -> Self {
23199        self.p_checkpoint_marker = checkpoint_marker;
23200        self
23201    }
23202}
23203#[repr(C)]
23204#[cfg_attr(feature = "debug", derive(Debug))]
23205#[derive(Copy, Clone)]
23206#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthStencilResolveProperties.html>"]
23207#[must_use]
23208pub struct PhysicalDeviceDepthStencilResolveProperties<'a> {
23209    pub s_type: StructureType,
23210    pub p_next: *mut c_void,
23211    pub supported_depth_resolve_modes: ResolveModeFlags,
23212    pub supported_stencil_resolve_modes: ResolveModeFlags,
23213    pub independent_resolve_none: Bool32,
23214    pub independent_resolve: Bool32,
23215    pub _marker: PhantomData<&'a ()>,
23216}
23217unsafe impl Send for PhysicalDeviceDepthStencilResolveProperties<'_> {}
23218unsafe impl Sync for PhysicalDeviceDepthStencilResolveProperties<'_> {}
23219impl ::core::default::Default for PhysicalDeviceDepthStencilResolveProperties<'_> {
23220    #[inline]
23221    fn default() -> Self {
23222        Self {
23223            s_type: Self::STRUCTURE_TYPE,
23224            p_next: ::core::ptr::null_mut(),
23225            supported_depth_resolve_modes: ResolveModeFlags::default(),
23226            supported_stencil_resolve_modes: ResolveModeFlags::default(),
23227            independent_resolve_none: Bool32::default(),
23228            independent_resolve: Bool32::default(),
23229            _marker: PhantomData,
23230        }
23231    }
23232}
23233unsafe impl<'a> TaggedStructure for PhysicalDeviceDepthStencilResolveProperties<'a> {
23234    const STRUCTURE_TYPE: StructureType =
23235        StructureType::PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES;
23236}
23237unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDepthStencilResolveProperties<'_> {}
23238impl<'a> PhysicalDeviceDepthStencilResolveProperties<'a> {
23239    #[inline]
23240    pub fn supported_depth_resolve_modes(
23241        mut self,
23242        supported_depth_resolve_modes: ResolveModeFlags,
23243    ) -> Self {
23244        self.supported_depth_resolve_modes = supported_depth_resolve_modes;
23245        self
23246    }
23247    #[inline]
23248    pub fn supported_stencil_resolve_modes(
23249        mut self,
23250        supported_stencil_resolve_modes: ResolveModeFlags,
23251    ) -> Self {
23252        self.supported_stencil_resolve_modes = supported_stencil_resolve_modes;
23253        self
23254    }
23255    #[inline]
23256    pub fn independent_resolve_none(mut self, independent_resolve_none: bool) -> Self {
23257        self.independent_resolve_none = independent_resolve_none.into();
23258        self
23259    }
23260    #[inline]
23261    pub fn independent_resolve(mut self, independent_resolve: bool) -> Self {
23262        self.independent_resolve = independent_resolve.into();
23263        self
23264    }
23265}
23266#[repr(C)]
23267#[cfg_attr(feature = "debug", derive(Debug))]
23268#[derive(Copy, Clone)]
23269#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassDescriptionDepthStencilResolve.html>"]
23270#[must_use]
23271pub struct SubpassDescriptionDepthStencilResolve<'a> {
23272    pub s_type: StructureType,
23273    pub p_next: *const c_void,
23274    pub depth_resolve_mode: ResolveModeFlags,
23275    pub stencil_resolve_mode: ResolveModeFlags,
23276    pub p_depth_stencil_resolve_attachment: *const AttachmentReference2<'a>,
23277    pub _marker: PhantomData<&'a ()>,
23278}
23279unsafe impl Send for SubpassDescriptionDepthStencilResolve<'_> {}
23280unsafe impl Sync for SubpassDescriptionDepthStencilResolve<'_> {}
23281impl ::core::default::Default for SubpassDescriptionDepthStencilResolve<'_> {
23282    #[inline]
23283    fn default() -> Self {
23284        Self {
23285            s_type: Self::STRUCTURE_TYPE,
23286            p_next: ::core::ptr::null(),
23287            depth_resolve_mode: ResolveModeFlags::default(),
23288            stencil_resolve_mode: ResolveModeFlags::default(),
23289            p_depth_stencil_resolve_attachment: ::core::ptr::null(),
23290            _marker: PhantomData,
23291        }
23292    }
23293}
23294unsafe impl<'a> TaggedStructure for SubpassDescriptionDepthStencilResolve<'a> {
23295    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE;
23296}
23297unsafe impl ExtendsSubpassDescription2 for SubpassDescriptionDepthStencilResolve<'_> {}
23298impl<'a> SubpassDescriptionDepthStencilResolve<'a> {
23299    #[inline]
23300    pub fn depth_resolve_mode(mut self, depth_resolve_mode: ResolveModeFlags) -> Self {
23301        self.depth_resolve_mode = depth_resolve_mode;
23302        self
23303    }
23304    #[inline]
23305    pub fn stencil_resolve_mode(mut self, stencil_resolve_mode: ResolveModeFlags) -> Self {
23306        self.stencil_resolve_mode = stencil_resolve_mode;
23307        self
23308    }
23309    #[inline]
23310    pub fn depth_stencil_resolve_attachment(
23311        mut self,
23312        depth_stencil_resolve_attachment: &'a AttachmentReference2<'a>,
23313    ) -> Self {
23314        self.p_depth_stencil_resolve_attachment = depth_stencil_resolve_attachment;
23315        self
23316    }
23317}
23318#[repr(C)]
23319#[cfg_attr(feature = "debug", derive(Debug))]
23320#[derive(Copy, Clone)]
23321#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewASTCDecodeModeEXT.html>"]
23322#[must_use]
23323pub struct ImageViewASTCDecodeModeEXT<'a> {
23324    pub s_type: StructureType,
23325    pub p_next: *const c_void,
23326    pub decode_mode: Format,
23327    pub _marker: PhantomData<&'a ()>,
23328}
23329unsafe impl Send for ImageViewASTCDecodeModeEXT<'_> {}
23330unsafe impl Sync for ImageViewASTCDecodeModeEXT<'_> {}
23331impl ::core::default::Default for ImageViewASTCDecodeModeEXT<'_> {
23332    #[inline]
23333    fn default() -> Self {
23334        Self {
23335            s_type: Self::STRUCTURE_TYPE,
23336            p_next: ::core::ptr::null(),
23337            decode_mode: Format::default(),
23338            _marker: PhantomData,
23339        }
23340    }
23341}
23342unsafe impl<'a> TaggedStructure for ImageViewASTCDecodeModeEXT<'a> {
23343    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_ASTC_DECODE_MODE_EXT;
23344}
23345unsafe impl ExtendsImageViewCreateInfo for ImageViewASTCDecodeModeEXT<'_> {}
23346impl<'a> ImageViewASTCDecodeModeEXT<'a> {
23347    #[inline]
23348    pub fn decode_mode(mut self, decode_mode: Format) -> Self {
23349        self.decode_mode = decode_mode;
23350        self
23351    }
23352}
23353#[repr(C)]
23354#[cfg_attr(feature = "debug", derive(Debug))]
23355#[derive(Copy, Clone)]
23356#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceASTCDecodeFeaturesEXT.html>"]
23357#[must_use]
23358pub struct PhysicalDeviceASTCDecodeFeaturesEXT<'a> {
23359    pub s_type: StructureType,
23360    pub p_next: *mut c_void,
23361    pub decode_mode_shared_exponent: Bool32,
23362    pub _marker: PhantomData<&'a ()>,
23363}
23364unsafe impl Send for PhysicalDeviceASTCDecodeFeaturesEXT<'_> {}
23365unsafe impl Sync for PhysicalDeviceASTCDecodeFeaturesEXT<'_> {}
23366impl ::core::default::Default for PhysicalDeviceASTCDecodeFeaturesEXT<'_> {
23367    #[inline]
23368    fn default() -> Self {
23369        Self {
23370            s_type: Self::STRUCTURE_TYPE,
23371            p_next: ::core::ptr::null_mut(),
23372            decode_mode_shared_exponent: Bool32::default(),
23373            _marker: PhantomData,
23374        }
23375    }
23376}
23377unsafe impl<'a> TaggedStructure for PhysicalDeviceASTCDecodeFeaturesEXT<'a> {
23378    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT;
23379}
23380unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceASTCDecodeFeaturesEXT<'_> {}
23381unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceASTCDecodeFeaturesEXT<'_> {}
23382impl<'a> PhysicalDeviceASTCDecodeFeaturesEXT<'a> {
23383    #[inline]
23384    pub fn decode_mode_shared_exponent(mut self, decode_mode_shared_exponent: bool) -> Self {
23385        self.decode_mode_shared_exponent = decode_mode_shared_exponent.into();
23386        self
23387    }
23388}
23389#[repr(C)]
23390#[cfg_attr(feature = "debug", derive(Debug))]
23391#[derive(Copy, Clone)]
23392#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTransformFeedbackFeaturesEXT.html>"]
23393#[must_use]
23394pub struct PhysicalDeviceTransformFeedbackFeaturesEXT<'a> {
23395    pub s_type: StructureType,
23396    pub p_next: *mut c_void,
23397    pub transform_feedback: Bool32,
23398    pub geometry_streams: Bool32,
23399    pub _marker: PhantomData<&'a ()>,
23400}
23401unsafe impl Send for PhysicalDeviceTransformFeedbackFeaturesEXT<'_> {}
23402unsafe impl Sync for PhysicalDeviceTransformFeedbackFeaturesEXT<'_> {}
23403impl ::core::default::Default for PhysicalDeviceTransformFeedbackFeaturesEXT<'_> {
23404    #[inline]
23405    fn default() -> Self {
23406        Self {
23407            s_type: Self::STRUCTURE_TYPE,
23408            p_next: ::core::ptr::null_mut(),
23409            transform_feedback: Bool32::default(),
23410            geometry_streams: Bool32::default(),
23411            _marker: PhantomData,
23412        }
23413    }
23414}
23415unsafe impl<'a> TaggedStructure for PhysicalDeviceTransformFeedbackFeaturesEXT<'a> {
23416    const STRUCTURE_TYPE: StructureType =
23417        StructureType::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT;
23418}
23419unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceTransformFeedbackFeaturesEXT<'_> {}
23420unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceTransformFeedbackFeaturesEXT<'_> {}
23421impl<'a> PhysicalDeviceTransformFeedbackFeaturesEXT<'a> {
23422    #[inline]
23423    pub fn transform_feedback(mut self, transform_feedback: bool) -> Self {
23424        self.transform_feedback = transform_feedback.into();
23425        self
23426    }
23427    #[inline]
23428    pub fn geometry_streams(mut self, geometry_streams: bool) -> Self {
23429        self.geometry_streams = geometry_streams.into();
23430        self
23431    }
23432}
23433#[repr(C)]
23434#[cfg_attr(feature = "debug", derive(Debug))]
23435#[derive(Copy, Clone)]
23436#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html>"]
23437#[must_use]
23438pub struct PhysicalDeviceTransformFeedbackPropertiesEXT<'a> {
23439    pub s_type: StructureType,
23440    pub p_next: *mut c_void,
23441    pub max_transform_feedback_streams: u32,
23442    pub max_transform_feedback_buffers: u32,
23443    pub max_transform_feedback_buffer_size: DeviceSize,
23444    pub max_transform_feedback_stream_data_size: u32,
23445    pub max_transform_feedback_buffer_data_size: u32,
23446    pub max_transform_feedback_buffer_data_stride: u32,
23447    pub transform_feedback_queries: Bool32,
23448    pub transform_feedback_streams_lines_triangles: Bool32,
23449    pub transform_feedback_rasterization_stream_select: Bool32,
23450    pub transform_feedback_draw: Bool32,
23451    pub _marker: PhantomData<&'a ()>,
23452}
23453unsafe impl Send for PhysicalDeviceTransformFeedbackPropertiesEXT<'_> {}
23454unsafe impl Sync for PhysicalDeviceTransformFeedbackPropertiesEXT<'_> {}
23455impl ::core::default::Default for PhysicalDeviceTransformFeedbackPropertiesEXT<'_> {
23456    #[inline]
23457    fn default() -> Self {
23458        Self {
23459            s_type: Self::STRUCTURE_TYPE,
23460            p_next: ::core::ptr::null_mut(),
23461            max_transform_feedback_streams: u32::default(),
23462            max_transform_feedback_buffers: u32::default(),
23463            max_transform_feedback_buffer_size: DeviceSize::default(),
23464            max_transform_feedback_stream_data_size: u32::default(),
23465            max_transform_feedback_buffer_data_size: u32::default(),
23466            max_transform_feedback_buffer_data_stride: u32::default(),
23467            transform_feedback_queries: Bool32::default(),
23468            transform_feedback_streams_lines_triangles: Bool32::default(),
23469            transform_feedback_rasterization_stream_select: Bool32::default(),
23470            transform_feedback_draw: Bool32::default(),
23471            _marker: PhantomData,
23472        }
23473    }
23474}
23475unsafe impl<'a> TaggedStructure for PhysicalDeviceTransformFeedbackPropertiesEXT<'a> {
23476    const STRUCTURE_TYPE: StructureType =
23477        StructureType::PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT;
23478}
23479unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceTransformFeedbackPropertiesEXT<'_> {}
23480impl<'a> PhysicalDeviceTransformFeedbackPropertiesEXT<'a> {
23481    #[inline]
23482    pub fn max_transform_feedback_streams(mut self, max_transform_feedback_streams: u32) -> Self {
23483        self.max_transform_feedback_streams = max_transform_feedback_streams;
23484        self
23485    }
23486    #[inline]
23487    pub fn max_transform_feedback_buffers(mut self, max_transform_feedback_buffers: u32) -> Self {
23488        self.max_transform_feedback_buffers = max_transform_feedback_buffers;
23489        self
23490    }
23491    #[inline]
23492    pub fn max_transform_feedback_buffer_size(
23493        mut self,
23494        max_transform_feedback_buffer_size: DeviceSize,
23495    ) -> Self {
23496        self.max_transform_feedback_buffer_size = max_transform_feedback_buffer_size;
23497        self
23498    }
23499    #[inline]
23500    pub fn max_transform_feedback_stream_data_size(
23501        mut self,
23502        max_transform_feedback_stream_data_size: u32,
23503    ) -> Self {
23504        self.max_transform_feedback_stream_data_size = max_transform_feedback_stream_data_size;
23505        self
23506    }
23507    #[inline]
23508    pub fn max_transform_feedback_buffer_data_size(
23509        mut self,
23510        max_transform_feedback_buffer_data_size: u32,
23511    ) -> Self {
23512        self.max_transform_feedback_buffer_data_size = max_transform_feedback_buffer_data_size;
23513        self
23514    }
23515    #[inline]
23516    pub fn max_transform_feedback_buffer_data_stride(
23517        mut self,
23518        max_transform_feedback_buffer_data_stride: u32,
23519    ) -> Self {
23520        self.max_transform_feedback_buffer_data_stride = max_transform_feedback_buffer_data_stride;
23521        self
23522    }
23523    #[inline]
23524    pub fn transform_feedback_queries(mut self, transform_feedback_queries: bool) -> Self {
23525        self.transform_feedback_queries = transform_feedback_queries.into();
23526        self
23527    }
23528    #[inline]
23529    pub fn transform_feedback_streams_lines_triangles(
23530        mut self,
23531        transform_feedback_streams_lines_triangles: bool,
23532    ) -> Self {
23533        self.transform_feedback_streams_lines_triangles =
23534            transform_feedback_streams_lines_triangles.into();
23535        self
23536    }
23537    #[inline]
23538    pub fn transform_feedback_rasterization_stream_select(
23539        mut self,
23540        transform_feedback_rasterization_stream_select: bool,
23541    ) -> Self {
23542        self.transform_feedback_rasterization_stream_select =
23543            transform_feedback_rasterization_stream_select.into();
23544        self
23545    }
23546    #[inline]
23547    pub fn transform_feedback_draw(mut self, transform_feedback_draw: bool) -> Self {
23548        self.transform_feedback_draw = transform_feedback_draw.into();
23549        self
23550    }
23551}
23552#[repr(C)]
23553#[cfg_attr(feature = "debug", derive(Debug))]
23554#[derive(Copy, Clone)]
23555#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationStateStreamCreateInfoEXT.html>"]
23556#[must_use]
23557pub struct PipelineRasterizationStateStreamCreateInfoEXT<'a> {
23558    pub s_type: StructureType,
23559    pub p_next: *const c_void,
23560    pub flags: PipelineRasterizationStateStreamCreateFlagsEXT,
23561    pub rasterization_stream: u32,
23562    pub _marker: PhantomData<&'a ()>,
23563}
23564unsafe impl Send for PipelineRasterizationStateStreamCreateInfoEXT<'_> {}
23565unsafe impl Sync for PipelineRasterizationStateStreamCreateInfoEXT<'_> {}
23566impl ::core::default::Default for PipelineRasterizationStateStreamCreateInfoEXT<'_> {
23567    #[inline]
23568    fn default() -> Self {
23569        Self {
23570            s_type: Self::STRUCTURE_TYPE,
23571            p_next: ::core::ptr::null(),
23572            flags: PipelineRasterizationStateStreamCreateFlagsEXT::default(),
23573            rasterization_stream: u32::default(),
23574            _marker: PhantomData,
23575        }
23576    }
23577}
23578unsafe impl<'a> TaggedStructure for PipelineRasterizationStateStreamCreateInfoEXT<'a> {
23579    const STRUCTURE_TYPE: StructureType =
23580        StructureType::PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT;
23581}
23582unsafe impl ExtendsPipelineRasterizationStateCreateInfo
23583    for PipelineRasterizationStateStreamCreateInfoEXT<'_>
23584{
23585}
23586impl<'a> PipelineRasterizationStateStreamCreateInfoEXT<'a> {
23587    #[inline]
23588    pub fn flags(mut self, flags: PipelineRasterizationStateStreamCreateFlagsEXT) -> Self {
23589        self.flags = flags;
23590        self
23591    }
23592    #[inline]
23593    pub fn rasterization_stream(mut self, rasterization_stream: u32) -> Self {
23594        self.rasterization_stream = rasterization_stream;
23595        self
23596    }
23597}
23598#[repr(C)]
23599#[cfg_attr(feature = "debug", derive(Debug))]
23600#[derive(Copy, Clone)]
23601#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV.html>"]
23602#[must_use]
23603pub struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'a> {
23604    pub s_type: StructureType,
23605    pub p_next: *mut c_void,
23606    pub representative_fragment_test: Bool32,
23607    pub _marker: PhantomData<&'a ()>,
23608}
23609unsafe impl Send for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'_> {}
23610unsafe impl Sync for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'_> {}
23611impl ::core::default::Default for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'_> {
23612    #[inline]
23613    fn default() -> Self {
23614        Self {
23615            s_type: Self::STRUCTURE_TYPE,
23616            p_next: ::core::ptr::null_mut(),
23617            representative_fragment_test: Bool32::default(),
23618            _marker: PhantomData,
23619        }
23620    }
23621}
23622unsafe impl<'a> TaggedStructure for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'a> {
23623    const STRUCTURE_TYPE: StructureType =
23624        StructureType::PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV;
23625}
23626unsafe impl ExtendsPhysicalDeviceFeatures2
23627    for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'_>
23628{
23629}
23630unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'_> {}
23631impl<'a> PhysicalDeviceRepresentativeFragmentTestFeaturesNV<'a> {
23632    #[inline]
23633    pub fn representative_fragment_test(mut self, representative_fragment_test: bool) -> Self {
23634        self.representative_fragment_test = representative_fragment_test.into();
23635        self
23636    }
23637}
23638#[repr(C)]
23639#[cfg_attr(feature = "debug", derive(Debug))]
23640#[derive(Copy, Clone)]
23641#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRepresentativeFragmentTestStateCreateInfoNV.html>"]
23642#[must_use]
23643pub struct PipelineRepresentativeFragmentTestStateCreateInfoNV<'a> {
23644    pub s_type: StructureType,
23645    pub p_next: *const c_void,
23646    pub representative_fragment_test_enable: Bool32,
23647    pub _marker: PhantomData<&'a ()>,
23648}
23649unsafe impl Send for PipelineRepresentativeFragmentTestStateCreateInfoNV<'_> {}
23650unsafe impl Sync for PipelineRepresentativeFragmentTestStateCreateInfoNV<'_> {}
23651impl ::core::default::Default for PipelineRepresentativeFragmentTestStateCreateInfoNV<'_> {
23652    #[inline]
23653    fn default() -> Self {
23654        Self {
23655            s_type: Self::STRUCTURE_TYPE,
23656            p_next: ::core::ptr::null(),
23657            representative_fragment_test_enable: Bool32::default(),
23658            _marker: PhantomData,
23659        }
23660    }
23661}
23662unsafe impl<'a> TaggedStructure for PipelineRepresentativeFragmentTestStateCreateInfoNV<'a> {
23663    const STRUCTURE_TYPE: StructureType =
23664        StructureType::PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV;
23665}
23666unsafe impl ExtendsGraphicsPipelineCreateInfo
23667    for PipelineRepresentativeFragmentTestStateCreateInfoNV<'_>
23668{
23669}
23670impl<'a> PipelineRepresentativeFragmentTestStateCreateInfoNV<'a> {
23671    #[inline]
23672    pub fn representative_fragment_test_enable(
23673        mut self,
23674        representative_fragment_test_enable: bool,
23675    ) -> Self {
23676        self.representative_fragment_test_enable = representative_fragment_test_enable.into();
23677        self
23678    }
23679}
23680#[repr(C)]
23681#[cfg_attr(feature = "debug", derive(Debug))]
23682#[derive(Copy, Clone)]
23683#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExclusiveScissorFeaturesNV.html>"]
23684#[must_use]
23685pub struct PhysicalDeviceExclusiveScissorFeaturesNV<'a> {
23686    pub s_type: StructureType,
23687    pub p_next: *mut c_void,
23688    pub exclusive_scissor: Bool32,
23689    pub _marker: PhantomData<&'a ()>,
23690}
23691unsafe impl Send for PhysicalDeviceExclusiveScissorFeaturesNV<'_> {}
23692unsafe impl Sync for PhysicalDeviceExclusiveScissorFeaturesNV<'_> {}
23693impl ::core::default::Default for PhysicalDeviceExclusiveScissorFeaturesNV<'_> {
23694    #[inline]
23695    fn default() -> Self {
23696        Self {
23697            s_type: Self::STRUCTURE_TYPE,
23698            p_next: ::core::ptr::null_mut(),
23699            exclusive_scissor: Bool32::default(),
23700            _marker: PhantomData,
23701        }
23702    }
23703}
23704unsafe impl<'a> TaggedStructure for PhysicalDeviceExclusiveScissorFeaturesNV<'a> {
23705    const STRUCTURE_TYPE: StructureType =
23706        StructureType::PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV;
23707}
23708unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceExclusiveScissorFeaturesNV<'_> {}
23709unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExclusiveScissorFeaturesNV<'_> {}
23710impl<'a> PhysicalDeviceExclusiveScissorFeaturesNV<'a> {
23711    #[inline]
23712    pub fn exclusive_scissor(mut self, exclusive_scissor: bool) -> Self {
23713        self.exclusive_scissor = exclusive_scissor.into();
23714        self
23715    }
23716}
23717#[repr(C)]
23718#[cfg_attr(feature = "debug", derive(Debug))]
23719#[derive(Copy, Clone)]
23720#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportExclusiveScissorStateCreateInfoNV.html>"]
23721#[must_use]
23722pub struct PipelineViewportExclusiveScissorStateCreateInfoNV<'a> {
23723    pub s_type: StructureType,
23724    pub p_next: *const c_void,
23725    pub exclusive_scissor_count: u32,
23726    pub p_exclusive_scissors: *const Rect2D,
23727    pub _marker: PhantomData<&'a ()>,
23728}
23729unsafe impl Send for PipelineViewportExclusiveScissorStateCreateInfoNV<'_> {}
23730unsafe impl Sync for PipelineViewportExclusiveScissorStateCreateInfoNV<'_> {}
23731impl ::core::default::Default for PipelineViewportExclusiveScissorStateCreateInfoNV<'_> {
23732    #[inline]
23733    fn default() -> Self {
23734        Self {
23735            s_type: Self::STRUCTURE_TYPE,
23736            p_next: ::core::ptr::null(),
23737            exclusive_scissor_count: u32::default(),
23738            p_exclusive_scissors: ::core::ptr::null(),
23739            _marker: PhantomData,
23740        }
23741    }
23742}
23743unsafe impl<'a> TaggedStructure for PipelineViewportExclusiveScissorStateCreateInfoNV<'a> {
23744    const STRUCTURE_TYPE: StructureType =
23745        StructureType::PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV;
23746}
23747unsafe impl ExtendsPipelineViewportStateCreateInfo
23748    for PipelineViewportExclusiveScissorStateCreateInfoNV<'_>
23749{
23750}
23751impl<'a> PipelineViewportExclusiveScissorStateCreateInfoNV<'a> {
23752    #[inline]
23753    pub fn exclusive_scissors(mut self, exclusive_scissors: &'a [Rect2D]) -> Self {
23754        self.exclusive_scissor_count = exclusive_scissors.len() as _;
23755        self.p_exclusive_scissors = exclusive_scissors.as_ptr();
23756        self
23757    }
23758}
23759#[repr(C)]
23760#[cfg_attr(feature = "debug", derive(Debug))]
23761#[derive(Copy, Clone)]
23762#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCornerSampledImageFeaturesNV.html>"]
23763#[must_use]
23764pub struct PhysicalDeviceCornerSampledImageFeaturesNV<'a> {
23765    pub s_type: StructureType,
23766    pub p_next: *mut c_void,
23767    pub corner_sampled_image: Bool32,
23768    pub _marker: PhantomData<&'a ()>,
23769}
23770unsafe impl Send for PhysicalDeviceCornerSampledImageFeaturesNV<'_> {}
23771unsafe impl Sync for PhysicalDeviceCornerSampledImageFeaturesNV<'_> {}
23772impl ::core::default::Default for PhysicalDeviceCornerSampledImageFeaturesNV<'_> {
23773    #[inline]
23774    fn default() -> Self {
23775        Self {
23776            s_type: Self::STRUCTURE_TYPE,
23777            p_next: ::core::ptr::null_mut(),
23778            corner_sampled_image: Bool32::default(),
23779            _marker: PhantomData,
23780        }
23781    }
23782}
23783unsafe impl<'a> TaggedStructure for PhysicalDeviceCornerSampledImageFeaturesNV<'a> {
23784    const STRUCTURE_TYPE: StructureType =
23785        StructureType::PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV;
23786}
23787unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCornerSampledImageFeaturesNV<'_> {}
23788unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCornerSampledImageFeaturesNV<'_> {}
23789impl<'a> PhysicalDeviceCornerSampledImageFeaturesNV<'a> {
23790    #[inline]
23791    pub fn corner_sampled_image(mut self, corner_sampled_image: bool) -> Self {
23792        self.corner_sampled_image = corner_sampled_image.into();
23793        self
23794    }
23795}
23796#[repr(C)]
23797#[cfg_attr(feature = "debug", derive(Debug))]
23798#[derive(Copy, Clone)]
23799#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.html>"]
23800#[must_use]
23801pub struct PhysicalDeviceComputeShaderDerivativesFeaturesNV<'a> {
23802    pub s_type: StructureType,
23803    pub p_next: *mut c_void,
23804    pub compute_derivative_group_quads: Bool32,
23805    pub compute_derivative_group_linear: Bool32,
23806    pub _marker: PhantomData<&'a ()>,
23807}
23808unsafe impl Send for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'_> {}
23809unsafe impl Sync for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'_> {}
23810impl ::core::default::Default for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'_> {
23811    #[inline]
23812    fn default() -> Self {
23813        Self {
23814            s_type: Self::STRUCTURE_TYPE,
23815            p_next: ::core::ptr::null_mut(),
23816            compute_derivative_group_quads: Bool32::default(),
23817            compute_derivative_group_linear: Bool32::default(),
23818            _marker: PhantomData,
23819        }
23820    }
23821}
23822unsafe impl<'a> TaggedStructure for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'a> {
23823    const STRUCTURE_TYPE: StructureType =
23824        StructureType::PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV;
23825}
23826unsafe impl ExtendsPhysicalDeviceFeatures2
23827    for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'_>
23828{
23829}
23830unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceComputeShaderDerivativesFeaturesNV<'_> {}
23831impl<'a> PhysicalDeviceComputeShaderDerivativesFeaturesNV<'a> {
23832    #[inline]
23833    pub fn compute_derivative_group_quads(mut self, compute_derivative_group_quads: bool) -> Self {
23834        self.compute_derivative_group_quads = compute_derivative_group_quads.into();
23835        self
23836    }
23837    #[inline]
23838    pub fn compute_derivative_group_linear(
23839        mut self,
23840        compute_derivative_group_linear: bool,
23841    ) -> Self {
23842        self.compute_derivative_group_linear = compute_derivative_group_linear.into();
23843        self
23844    }
23845}
23846#[repr(C)]
23847#[cfg_attr(feature = "debug", derive(Debug))]
23848#[derive(Copy, Clone)]
23849#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderImageFootprintFeaturesNV.html>"]
23850#[must_use]
23851pub struct PhysicalDeviceShaderImageFootprintFeaturesNV<'a> {
23852    pub s_type: StructureType,
23853    pub p_next: *mut c_void,
23854    pub image_footprint: Bool32,
23855    pub _marker: PhantomData<&'a ()>,
23856}
23857unsafe impl Send for PhysicalDeviceShaderImageFootprintFeaturesNV<'_> {}
23858unsafe impl Sync for PhysicalDeviceShaderImageFootprintFeaturesNV<'_> {}
23859impl ::core::default::Default for PhysicalDeviceShaderImageFootprintFeaturesNV<'_> {
23860    #[inline]
23861    fn default() -> Self {
23862        Self {
23863            s_type: Self::STRUCTURE_TYPE,
23864            p_next: ::core::ptr::null_mut(),
23865            image_footprint: Bool32::default(),
23866            _marker: PhantomData,
23867        }
23868    }
23869}
23870unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderImageFootprintFeaturesNV<'a> {
23871    const STRUCTURE_TYPE: StructureType =
23872        StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV;
23873}
23874unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderImageFootprintFeaturesNV<'_> {}
23875unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderImageFootprintFeaturesNV<'_> {}
23876impl<'a> PhysicalDeviceShaderImageFootprintFeaturesNV<'a> {
23877    #[inline]
23878    pub fn image_footprint(mut self, image_footprint: bool) -> Self {
23879        self.image_footprint = image_footprint.into();
23880        self
23881    }
23882}
23883#[repr(C)]
23884#[cfg_attr(feature = "debug", derive(Debug))]
23885#[derive(Copy, Clone)]
23886#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV.html>"]
23887#[must_use]
23888pub struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'a> {
23889    pub s_type: StructureType,
23890    pub p_next: *mut c_void,
23891    pub dedicated_allocation_image_aliasing: Bool32,
23892    pub _marker: PhantomData<&'a ()>,
23893}
23894unsafe impl Send for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'_> {}
23895unsafe impl Sync for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'_> {}
23896impl ::core::default::Default for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'_> {
23897    #[inline]
23898    fn default() -> Self {
23899        Self {
23900            s_type: Self::STRUCTURE_TYPE,
23901            p_next: ::core::ptr::null_mut(),
23902            dedicated_allocation_image_aliasing: Bool32::default(),
23903            _marker: PhantomData,
23904        }
23905    }
23906}
23907unsafe impl<'a> TaggedStructure for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'a> {
23908    const STRUCTURE_TYPE: StructureType =
23909        StructureType::PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV;
23910}
23911unsafe impl ExtendsPhysicalDeviceFeatures2
23912    for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'_>
23913{
23914}
23915unsafe impl ExtendsDeviceCreateInfo
23916    for PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'_>
23917{
23918}
23919impl<'a> PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV<'a> {
23920    #[inline]
23921    pub fn dedicated_allocation_image_aliasing(
23922        mut self,
23923        dedicated_allocation_image_aliasing: bool,
23924    ) -> Self {
23925        self.dedicated_allocation_image_aliasing = dedicated_allocation_image_aliasing.into();
23926        self
23927    }
23928}
23929#[repr(C)]
23930#[cfg_attr(feature = "debug", derive(Debug))]
23931#[derive(Copy, Clone)]
23932#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCopyMemoryIndirectFeaturesNV.html>"]
23933#[must_use]
23934pub struct PhysicalDeviceCopyMemoryIndirectFeaturesNV<'a> {
23935    pub s_type: StructureType,
23936    pub p_next: *mut c_void,
23937    pub indirect_copy: Bool32,
23938    pub _marker: PhantomData<&'a ()>,
23939}
23940unsafe impl Send for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'_> {}
23941unsafe impl Sync for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'_> {}
23942impl ::core::default::Default for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'_> {
23943    #[inline]
23944    fn default() -> Self {
23945        Self {
23946            s_type: Self::STRUCTURE_TYPE,
23947            p_next: ::core::ptr::null_mut(),
23948            indirect_copy: Bool32::default(),
23949            _marker: PhantomData,
23950        }
23951    }
23952}
23953unsafe impl<'a> TaggedStructure for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'a> {
23954    const STRUCTURE_TYPE: StructureType =
23955        StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV;
23956}
23957unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'_> {}
23958unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCopyMemoryIndirectFeaturesNV<'_> {}
23959impl<'a> PhysicalDeviceCopyMemoryIndirectFeaturesNV<'a> {
23960    #[inline]
23961    pub fn indirect_copy(mut self, indirect_copy: bool) -> Self {
23962        self.indirect_copy = indirect_copy.into();
23963        self
23964    }
23965}
23966#[repr(C)]
23967#[cfg_attr(feature = "debug", derive(Debug))]
23968#[derive(Copy, Clone)]
23969#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCopyMemoryIndirectPropertiesNV.html>"]
23970#[must_use]
23971pub struct PhysicalDeviceCopyMemoryIndirectPropertiesNV<'a> {
23972    pub s_type: StructureType,
23973    pub p_next: *mut c_void,
23974    pub supported_queues: QueueFlags,
23975    pub _marker: PhantomData<&'a ()>,
23976}
23977unsafe impl Send for PhysicalDeviceCopyMemoryIndirectPropertiesNV<'_> {}
23978unsafe impl Sync for PhysicalDeviceCopyMemoryIndirectPropertiesNV<'_> {}
23979impl ::core::default::Default for PhysicalDeviceCopyMemoryIndirectPropertiesNV<'_> {
23980    #[inline]
23981    fn default() -> Self {
23982        Self {
23983            s_type: Self::STRUCTURE_TYPE,
23984            p_next: ::core::ptr::null_mut(),
23985            supported_queues: QueueFlags::default(),
23986            _marker: PhantomData,
23987        }
23988    }
23989}
23990unsafe impl<'a> TaggedStructure for PhysicalDeviceCopyMemoryIndirectPropertiesNV<'a> {
23991    const STRUCTURE_TYPE: StructureType =
23992        StructureType::PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV;
23993}
23994unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceCopyMemoryIndirectPropertiesNV<'_> {}
23995impl<'a> PhysicalDeviceCopyMemoryIndirectPropertiesNV<'a> {
23996    #[inline]
23997    pub fn supported_queues(mut self, supported_queues: QueueFlags) -> Self {
23998        self.supported_queues = supported_queues;
23999        self
24000    }
24001}
24002#[repr(C)]
24003#[cfg_attr(feature = "debug", derive(Debug))]
24004#[derive(Copy, Clone)]
24005#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryDecompressionFeaturesNV.html>"]
24006#[must_use]
24007pub struct PhysicalDeviceMemoryDecompressionFeaturesNV<'a> {
24008    pub s_type: StructureType,
24009    pub p_next: *mut c_void,
24010    pub memory_decompression: Bool32,
24011    pub _marker: PhantomData<&'a ()>,
24012}
24013unsafe impl Send for PhysicalDeviceMemoryDecompressionFeaturesNV<'_> {}
24014unsafe impl Sync for PhysicalDeviceMemoryDecompressionFeaturesNV<'_> {}
24015impl ::core::default::Default for PhysicalDeviceMemoryDecompressionFeaturesNV<'_> {
24016    #[inline]
24017    fn default() -> Self {
24018        Self {
24019            s_type: Self::STRUCTURE_TYPE,
24020            p_next: ::core::ptr::null_mut(),
24021            memory_decompression: Bool32::default(),
24022            _marker: PhantomData,
24023        }
24024    }
24025}
24026unsafe impl<'a> TaggedStructure for PhysicalDeviceMemoryDecompressionFeaturesNV<'a> {
24027    const STRUCTURE_TYPE: StructureType =
24028        StructureType::PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV;
24029}
24030unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMemoryDecompressionFeaturesNV<'_> {}
24031unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMemoryDecompressionFeaturesNV<'_> {}
24032impl<'a> PhysicalDeviceMemoryDecompressionFeaturesNV<'a> {
24033    #[inline]
24034    pub fn memory_decompression(mut self, memory_decompression: bool) -> Self {
24035        self.memory_decompression = memory_decompression.into();
24036        self
24037    }
24038}
24039#[repr(C)]
24040#[cfg_attr(feature = "debug", derive(Debug))]
24041#[derive(Copy, Clone)]
24042#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryDecompressionPropertiesNV.html>"]
24043#[must_use]
24044pub struct PhysicalDeviceMemoryDecompressionPropertiesNV<'a> {
24045    pub s_type: StructureType,
24046    pub p_next: *mut c_void,
24047    pub decompression_methods: MemoryDecompressionMethodFlagsNV,
24048    pub max_decompression_indirect_count: u64,
24049    pub _marker: PhantomData<&'a ()>,
24050}
24051unsafe impl Send for PhysicalDeviceMemoryDecompressionPropertiesNV<'_> {}
24052unsafe impl Sync for PhysicalDeviceMemoryDecompressionPropertiesNV<'_> {}
24053impl ::core::default::Default for PhysicalDeviceMemoryDecompressionPropertiesNV<'_> {
24054    #[inline]
24055    fn default() -> Self {
24056        Self {
24057            s_type: Self::STRUCTURE_TYPE,
24058            p_next: ::core::ptr::null_mut(),
24059            decompression_methods: MemoryDecompressionMethodFlagsNV::default(),
24060            max_decompression_indirect_count: u64::default(),
24061            _marker: PhantomData,
24062        }
24063    }
24064}
24065unsafe impl<'a> TaggedStructure for PhysicalDeviceMemoryDecompressionPropertiesNV<'a> {
24066    const STRUCTURE_TYPE: StructureType =
24067        StructureType::PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV;
24068}
24069unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMemoryDecompressionPropertiesNV<'_> {}
24070impl<'a> PhysicalDeviceMemoryDecompressionPropertiesNV<'a> {
24071    #[inline]
24072    pub fn decompression_methods(
24073        mut self,
24074        decompression_methods: MemoryDecompressionMethodFlagsNV,
24075    ) -> Self {
24076        self.decompression_methods = decompression_methods;
24077        self
24078    }
24079    #[inline]
24080    pub fn max_decompression_indirect_count(
24081        mut self,
24082        max_decompression_indirect_count: u64,
24083    ) -> Self {
24084        self.max_decompression_indirect_count = max_decompression_indirect_count;
24085        self
24086    }
24087}
24088#[repr(C)]
24089#[cfg_attr(feature = "debug", derive(Debug))]
24090#[derive(Copy, Clone)]
24091#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShadingRatePaletteNV.html>"]
24092#[must_use]
24093pub struct ShadingRatePaletteNV<'a> {
24094    pub shading_rate_palette_entry_count: u32,
24095    pub p_shading_rate_palette_entries: *const ShadingRatePaletteEntryNV,
24096    pub _marker: PhantomData<&'a ()>,
24097}
24098unsafe impl Send for ShadingRatePaletteNV<'_> {}
24099unsafe impl Sync for ShadingRatePaletteNV<'_> {}
24100impl ::core::default::Default for ShadingRatePaletteNV<'_> {
24101    #[inline]
24102    fn default() -> Self {
24103        Self {
24104            shading_rate_palette_entry_count: u32::default(),
24105            p_shading_rate_palette_entries: ::core::ptr::null(),
24106            _marker: PhantomData,
24107        }
24108    }
24109}
24110impl<'a> ShadingRatePaletteNV<'a> {
24111    #[inline]
24112    pub fn shading_rate_palette_entries(
24113        mut self,
24114        shading_rate_palette_entries: &'a [ShadingRatePaletteEntryNV],
24115    ) -> Self {
24116        self.shading_rate_palette_entry_count = shading_rate_palette_entries.len() as _;
24117        self.p_shading_rate_palette_entries = shading_rate_palette_entries.as_ptr();
24118        self
24119    }
24120}
24121#[repr(C)]
24122#[cfg_attr(feature = "debug", derive(Debug))]
24123#[derive(Copy, Clone)]
24124#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportShadingRateImageStateCreateInfoNV.html>"]
24125#[must_use]
24126pub struct PipelineViewportShadingRateImageStateCreateInfoNV<'a> {
24127    pub s_type: StructureType,
24128    pub p_next: *const c_void,
24129    pub shading_rate_image_enable: Bool32,
24130    pub viewport_count: u32,
24131    pub p_shading_rate_palettes: *const ShadingRatePaletteNV<'a>,
24132    pub _marker: PhantomData<&'a ()>,
24133}
24134unsafe impl Send for PipelineViewportShadingRateImageStateCreateInfoNV<'_> {}
24135unsafe impl Sync for PipelineViewportShadingRateImageStateCreateInfoNV<'_> {}
24136impl ::core::default::Default for PipelineViewportShadingRateImageStateCreateInfoNV<'_> {
24137    #[inline]
24138    fn default() -> Self {
24139        Self {
24140            s_type: Self::STRUCTURE_TYPE,
24141            p_next: ::core::ptr::null(),
24142            shading_rate_image_enable: Bool32::default(),
24143            viewport_count: u32::default(),
24144            p_shading_rate_palettes: ::core::ptr::null(),
24145            _marker: PhantomData,
24146        }
24147    }
24148}
24149unsafe impl<'a> TaggedStructure for PipelineViewportShadingRateImageStateCreateInfoNV<'a> {
24150    const STRUCTURE_TYPE: StructureType =
24151        StructureType::PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV;
24152}
24153unsafe impl ExtendsPipelineViewportStateCreateInfo
24154    for PipelineViewportShadingRateImageStateCreateInfoNV<'_>
24155{
24156}
24157impl<'a> PipelineViewportShadingRateImageStateCreateInfoNV<'a> {
24158    #[inline]
24159    pub fn shading_rate_image_enable(mut self, shading_rate_image_enable: bool) -> Self {
24160        self.shading_rate_image_enable = shading_rate_image_enable.into();
24161        self
24162    }
24163    #[inline]
24164    pub fn shading_rate_palettes(
24165        mut self,
24166        shading_rate_palettes: &'a [ShadingRatePaletteNV<'a>],
24167    ) -> Self {
24168        self.viewport_count = shading_rate_palettes.len() as _;
24169        self.p_shading_rate_palettes = shading_rate_palettes.as_ptr();
24170        self
24171    }
24172}
24173#[repr(C)]
24174#[cfg_attr(feature = "debug", derive(Debug))]
24175#[derive(Copy, Clone)]
24176#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShadingRateImageFeaturesNV.html>"]
24177#[must_use]
24178pub struct PhysicalDeviceShadingRateImageFeaturesNV<'a> {
24179    pub s_type: StructureType,
24180    pub p_next: *mut c_void,
24181    pub shading_rate_image: Bool32,
24182    pub shading_rate_coarse_sample_order: Bool32,
24183    pub _marker: PhantomData<&'a ()>,
24184}
24185unsafe impl Send for PhysicalDeviceShadingRateImageFeaturesNV<'_> {}
24186unsafe impl Sync for PhysicalDeviceShadingRateImageFeaturesNV<'_> {}
24187impl ::core::default::Default for PhysicalDeviceShadingRateImageFeaturesNV<'_> {
24188    #[inline]
24189    fn default() -> Self {
24190        Self {
24191            s_type: Self::STRUCTURE_TYPE,
24192            p_next: ::core::ptr::null_mut(),
24193            shading_rate_image: Bool32::default(),
24194            shading_rate_coarse_sample_order: Bool32::default(),
24195            _marker: PhantomData,
24196        }
24197    }
24198}
24199unsafe impl<'a> TaggedStructure for PhysicalDeviceShadingRateImageFeaturesNV<'a> {
24200    const STRUCTURE_TYPE: StructureType =
24201        StructureType::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV;
24202}
24203unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShadingRateImageFeaturesNV<'_> {}
24204unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShadingRateImageFeaturesNV<'_> {}
24205impl<'a> PhysicalDeviceShadingRateImageFeaturesNV<'a> {
24206    #[inline]
24207    pub fn shading_rate_image(mut self, shading_rate_image: bool) -> Self {
24208        self.shading_rate_image = shading_rate_image.into();
24209        self
24210    }
24211    #[inline]
24212    pub fn shading_rate_coarse_sample_order(
24213        mut self,
24214        shading_rate_coarse_sample_order: bool,
24215    ) -> Self {
24216        self.shading_rate_coarse_sample_order = shading_rate_coarse_sample_order.into();
24217        self
24218    }
24219}
24220#[repr(C)]
24221#[cfg_attr(feature = "debug", derive(Debug))]
24222#[derive(Copy, Clone)]
24223#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShadingRateImagePropertiesNV.html>"]
24224#[must_use]
24225pub struct PhysicalDeviceShadingRateImagePropertiesNV<'a> {
24226    pub s_type: StructureType,
24227    pub p_next: *mut c_void,
24228    pub shading_rate_texel_size: Extent2D,
24229    pub shading_rate_palette_size: u32,
24230    pub shading_rate_max_coarse_samples: u32,
24231    pub _marker: PhantomData<&'a ()>,
24232}
24233unsafe impl Send for PhysicalDeviceShadingRateImagePropertiesNV<'_> {}
24234unsafe impl Sync for PhysicalDeviceShadingRateImagePropertiesNV<'_> {}
24235impl ::core::default::Default for PhysicalDeviceShadingRateImagePropertiesNV<'_> {
24236    #[inline]
24237    fn default() -> Self {
24238        Self {
24239            s_type: Self::STRUCTURE_TYPE,
24240            p_next: ::core::ptr::null_mut(),
24241            shading_rate_texel_size: Extent2D::default(),
24242            shading_rate_palette_size: u32::default(),
24243            shading_rate_max_coarse_samples: u32::default(),
24244            _marker: PhantomData,
24245        }
24246    }
24247}
24248unsafe impl<'a> TaggedStructure for PhysicalDeviceShadingRateImagePropertiesNV<'a> {
24249    const STRUCTURE_TYPE: StructureType =
24250        StructureType::PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV;
24251}
24252unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShadingRateImagePropertiesNV<'_> {}
24253impl<'a> PhysicalDeviceShadingRateImagePropertiesNV<'a> {
24254    #[inline]
24255    pub fn shading_rate_texel_size(mut self, shading_rate_texel_size: Extent2D) -> Self {
24256        self.shading_rate_texel_size = shading_rate_texel_size;
24257        self
24258    }
24259    #[inline]
24260    pub fn shading_rate_palette_size(mut self, shading_rate_palette_size: u32) -> Self {
24261        self.shading_rate_palette_size = shading_rate_palette_size;
24262        self
24263    }
24264    #[inline]
24265    pub fn shading_rate_max_coarse_samples(mut self, shading_rate_max_coarse_samples: u32) -> Self {
24266        self.shading_rate_max_coarse_samples = shading_rate_max_coarse_samples;
24267        self
24268    }
24269}
24270#[repr(C)]
24271#[cfg_attr(feature = "debug", derive(Debug))]
24272#[derive(Copy, Clone)]
24273#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceInvocationMaskFeaturesHUAWEI.html>"]
24274#[must_use]
24275pub struct PhysicalDeviceInvocationMaskFeaturesHUAWEI<'a> {
24276    pub s_type: StructureType,
24277    pub p_next: *mut c_void,
24278    pub invocation_mask: Bool32,
24279    pub _marker: PhantomData<&'a ()>,
24280}
24281unsafe impl Send for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'_> {}
24282unsafe impl Sync for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'_> {}
24283impl ::core::default::Default for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'_> {
24284    #[inline]
24285    fn default() -> Self {
24286        Self {
24287            s_type: Self::STRUCTURE_TYPE,
24288            p_next: ::core::ptr::null_mut(),
24289            invocation_mask: Bool32::default(),
24290            _marker: PhantomData,
24291        }
24292    }
24293}
24294unsafe impl<'a> TaggedStructure for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'a> {
24295    const STRUCTURE_TYPE: StructureType =
24296        StructureType::PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI;
24297}
24298unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'_> {}
24299unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceInvocationMaskFeaturesHUAWEI<'_> {}
24300impl<'a> PhysicalDeviceInvocationMaskFeaturesHUAWEI<'a> {
24301    #[inline]
24302    pub fn invocation_mask(mut self, invocation_mask: bool) -> Self {
24303        self.invocation_mask = invocation_mask.into();
24304        self
24305    }
24306}
24307#[repr(C)]
24308#[cfg_attr(feature = "debug", derive(Debug))]
24309#[derive(Copy, Clone, Default)]
24310#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCoarseSampleLocationNV.html>"]
24311#[must_use]
24312pub struct CoarseSampleLocationNV {
24313    pub pixel_x: u32,
24314    pub pixel_y: u32,
24315    pub sample: u32,
24316}
24317impl CoarseSampleLocationNV {
24318    #[inline]
24319    pub fn pixel_x(mut self, pixel_x: u32) -> Self {
24320        self.pixel_x = pixel_x;
24321        self
24322    }
24323    #[inline]
24324    pub fn pixel_y(mut self, pixel_y: u32) -> Self {
24325        self.pixel_y = pixel_y;
24326        self
24327    }
24328    #[inline]
24329    pub fn sample(mut self, sample: u32) -> Self {
24330        self.sample = sample;
24331        self
24332    }
24333}
24334#[repr(C)]
24335#[cfg_attr(feature = "debug", derive(Debug))]
24336#[derive(Copy, Clone)]
24337#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCoarseSampleOrderCustomNV.html>"]
24338#[must_use]
24339pub struct CoarseSampleOrderCustomNV<'a> {
24340    pub shading_rate: ShadingRatePaletteEntryNV,
24341    pub sample_count: u32,
24342    pub sample_location_count: u32,
24343    pub p_sample_locations: *const CoarseSampleLocationNV,
24344    pub _marker: PhantomData<&'a ()>,
24345}
24346unsafe impl Send for CoarseSampleOrderCustomNV<'_> {}
24347unsafe impl Sync for CoarseSampleOrderCustomNV<'_> {}
24348impl ::core::default::Default for CoarseSampleOrderCustomNV<'_> {
24349    #[inline]
24350    fn default() -> Self {
24351        Self {
24352            shading_rate: ShadingRatePaletteEntryNV::default(),
24353            sample_count: u32::default(),
24354            sample_location_count: u32::default(),
24355            p_sample_locations: ::core::ptr::null(),
24356            _marker: PhantomData,
24357        }
24358    }
24359}
24360impl<'a> CoarseSampleOrderCustomNV<'a> {
24361    #[inline]
24362    pub fn shading_rate(mut self, shading_rate: ShadingRatePaletteEntryNV) -> Self {
24363        self.shading_rate = shading_rate;
24364        self
24365    }
24366    #[inline]
24367    pub fn sample_count(mut self, sample_count: u32) -> Self {
24368        self.sample_count = sample_count;
24369        self
24370    }
24371    #[inline]
24372    pub fn sample_locations(mut self, sample_locations: &'a [CoarseSampleLocationNV]) -> Self {
24373        self.sample_location_count = sample_locations.len() as _;
24374        self.p_sample_locations = sample_locations.as_ptr();
24375        self
24376    }
24377}
24378#[repr(C)]
24379#[cfg_attr(feature = "debug", derive(Debug))]
24380#[derive(Copy, Clone)]
24381#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportCoarseSampleOrderStateCreateInfoNV.html>"]
24382#[must_use]
24383pub struct PipelineViewportCoarseSampleOrderStateCreateInfoNV<'a> {
24384    pub s_type: StructureType,
24385    pub p_next: *const c_void,
24386    pub sample_order_type: CoarseSampleOrderTypeNV,
24387    pub custom_sample_order_count: u32,
24388    pub p_custom_sample_orders: *const CoarseSampleOrderCustomNV<'a>,
24389    pub _marker: PhantomData<&'a ()>,
24390}
24391unsafe impl Send for PipelineViewportCoarseSampleOrderStateCreateInfoNV<'_> {}
24392unsafe impl Sync for PipelineViewportCoarseSampleOrderStateCreateInfoNV<'_> {}
24393impl ::core::default::Default for PipelineViewportCoarseSampleOrderStateCreateInfoNV<'_> {
24394    #[inline]
24395    fn default() -> Self {
24396        Self {
24397            s_type: Self::STRUCTURE_TYPE,
24398            p_next: ::core::ptr::null(),
24399            sample_order_type: CoarseSampleOrderTypeNV::default(),
24400            custom_sample_order_count: u32::default(),
24401            p_custom_sample_orders: ::core::ptr::null(),
24402            _marker: PhantomData,
24403        }
24404    }
24405}
24406unsafe impl<'a> TaggedStructure for PipelineViewportCoarseSampleOrderStateCreateInfoNV<'a> {
24407    const STRUCTURE_TYPE: StructureType =
24408        StructureType::PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV;
24409}
24410unsafe impl ExtendsPipelineViewportStateCreateInfo
24411    for PipelineViewportCoarseSampleOrderStateCreateInfoNV<'_>
24412{
24413}
24414impl<'a> PipelineViewportCoarseSampleOrderStateCreateInfoNV<'a> {
24415    #[inline]
24416    pub fn sample_order_type(mut self, sample_order_type: CoarseSampleOrderTypeNV) -> Self {
24417        self.sample_order_type = sample_order_type;
24418        self
24419    }
24420    #[inline]
24421    pub fn custom_sample_orders(
24422        mut self,
24423        custom_sample_orders: &'a [CoarseSampleOrderCustomNV<'a>],
24424    ) -> Self {
24425        self.custom_sample_order_count = custom_sample_orders.len() as _;
24426        self.p_custom_sample_orders = custom_sample_orders.as_ptr();
24427        self
24428    }
24429}
24430#[repr(C)]
24431#[cfg_attr(feature = "debug", derive(Debug))]
24432#[derive(Copy, Clone)]
24433#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMeshShaderFeaturesNV.html>"]
24434#[must_use]
24435pub struct PhysicalDeviceMeshShaderFeaturesNV<'a> {
24436    pub s_type: StructureType,
24437    pub p_next: *mut c_void,
24438    pub task_shader: Bool32,
24439    pub mesh_shader: Bool32,
24440    pub _marker: PhantomData<&'a ()>,
24441}
24442unsafe impl Send for PhysicalDeviceMeshShaderFeaturesNV<'_> {}
24443unsafe impl Sync for PhysicalDeviceMeshShaderFeaturesNV<'_> {}
24444impl ::core::default::Default for PhysicalDeviceMeshShaderFeaturesNV<'_> {
24445    #[inline]
24446    fn default() -> Self {
24447        Self {
24448            s_type: Self::STRUCTURE_TYPE,
24449            p_next: ::core::ptr::null_mut(),
24450            task_shader: Bool32::default(),
24451            mesh_shader: Bool32::default(),
24452            _marker: PhantomData,
24453        }
24454    }
24455}
24456unsafe impl<'a> TaggedStructure for PhysicalDeviceMeshShaderFeaturesNV<'a> {
24457    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV;
24458}
24459unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMeshShaderFeaturesNV<'_> {}
24460unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMeshShaderFeaturesNV<'_> {}
24461impl<'a> PhysicalDeviceMeshShaderFeaturesNV<'a> {
24462    #[inline]
24463    pub fn task_shader(mut self, task_shader: bool) -> Self {
24464        self.task_shader = task_shader.into();
24465        self
24466    }
24467    #[inline]
24468    pub fn mesh_shader(mut self, mesh_shader: bool) -> Self {
24469        self.mesh_shader = mesh_shader.into();
24470        self
24471    }
24472}
24473#[repr(C)]
24474#[cfg_attr(feature = "debug", derive(Debug))]
24475#[derive(Copy, Clone)]
24476#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMeshShaderPropertiesNV.html>"]
24477#[must_use]
24478pub struct PhysicalDeviceMeshShaderPropertiesNV<'a> {
24479    pub s_type: StructureType,
24480    pub p_next: *mut c_void,
24481    pub max_draw_mesh_tasks_count: u32,
24482    pub max_task_work_group_invocations: u32,
24483    pub max_task_work_group_size: [u32; 3],
24484    pub max_task_total_memory_size: u32,
24485    pub max_task_output_count: u32,
24486    pub max_mesh_work_group_invocations: u32,
24487    pub max_mesh_work_group_size: [u32; 3],
24488    pub max_mesh_total_memory_size: u32,
24489    pub max_mesh_output_vertices: u32,
24490    pub max_mesh_output_primitives: u32,
24491    pub max_mesh_multiview_view_count: u32,
24492    pub mesh_output_per_vertex_granularity: u32,
24493    pub mesh_output_per_primitive_granularity: u32,
24494    pub _marker: PhantomData<&'a ()>,
24495}
24496unsafe impl Send for PhysicalDeviceMeshShaderPropertiesNV<'_> {}
24497unsafe impl Sync for PhysicalDeviceMeshShaderPropertiesNV<'_> {}
24498impl ::core::default::Default for PhysicalDeviceMeshShaderPropertiesNV<'_> {
24499    #[inline]
24500    fn default() -> Self {
24501        Self {
24502            s_type: Self::STRUCTURE_TYPE,
24503            p_next: ::core::ptr::null_mut(),
24504            max_draw_mesh_tasks_count: u32::default(),
24505            max_task_work_group_invocations: u32::default(),
24506            max_task_work_group_size: unsafe { ::core::mem::zeroed() },
24507            max_task_total_memory_size: u32::default(),
24508            max_task_output_count: u32::default(),
24509            max_mesh_work_group_invocations: u32::default(),
24510            max_mesh_work_group_size: unsafe { ::core::mem::zeroed() },
24511            max_mesh_total_memory_size: u32::default(),
24512            max_mesh_output_vertices: u32::default(),
24513            max_mesh_output_primitives: u32::default(),
24514            max_mesh_multiview_view_count: u32::default(),
24515            mesh_output_per_vertex_granularity: u32::default(),
24516            mesh_output_per_primitive_granularity: u32::default(),
24517            _marker: PhantomData,
24518        }
24519    }
24520}
24521unsafe impl<'a> TaggedStructure for PhysicalDeviceMeshShaderPropertiesNV<'a> {
24522    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV;
24523}
24524unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMeshShaderPropertiesNV<'_> {}
24525impl<'a> PhysicalDeviceMeshShaderPropertiesNV<'a> {
24526    #[inline]
24527    pub fn max_draw_mesh_tasks_count(mut self, max_draw_mesh_tasks_count: u32) -> Self {
24528        self.max_draw_mesh_tasks_count = max_draw_mesh_tasks_count;
24529        self
24530    }
24531    #[inline]
24532    pub fn max_task_work_group_invocations(mut self, max_task_work_group_invocations: u32) -> Self {
24533        self.max_task_work_group_invocations = max_task_work_group_invocations;
24534        self
24535    }
24536    #[inline]
24537    pub fn max_task_work_group_size(mut self, max_task_work_group_size: [u32; 3]) -> Self {
24538        self.max_task_work_group_size = max_task_work_group_size;
24539        self
24540    }
24541    #[inline]
24542    pub fn max_task_total_memory_size(mut self, max_task_total_memory_size: u32) -> Self {
24543        self.max_task_total_memory_size = max_task_total_memory_size;
24544        self
24545    }
24546    #[inline]
24547    pub fn max_task_output_count(mut self, max_task_output_count: u32) -> Self {
24548        self.max_task_output_count = max_task_output_count;
24549        self
24550    }
24551    #[inline]
24552    pub fn max_mesh_work_group_invocations(mut self, max_mesh_work_group_invocations: u32) -> Self {
24553        self.max_mesh_work_group_invocations = max_mesh_work_group_invocations;
24554        self
24555    }
24556    #[inline]
24557    pub fn max_mesh_work_group_size(mut self, max_mesh_work_group_size: [u32; 3]) -> Self {
24558        self.max_mesh_work_group_size = max_mesh_work_group_size;
24559        self
24560    }
24561    #[inline]
24562    pub fn max_mesh_total_memory_size(mut self, max_mesh_total_memory_size: u32) -> Self {
24563        self.max_mesh_total_memory_size = max_mesh_total_memory_size;
24564        self
24565    }
24566    #[inline]
24567    pub fn max_mesh_output_vertices(mut self, max_mesh_output_vertices: u32) -> Self {
24568        self.max_mesh_output_vertices = max_mesh_output_vertices;
24569        self
24570    }
24571    #[inline]
24572    pub fn max_mesh_output_primitives(mut self, max_mesh_output_primitives: u32) -> Self {
24573        self.max_mesh_output_primitives = max_mesh_output_primitives;
24574        self
24575    }
24576    #[inline]
24577    pub fn max_mesh_multiview_view_count(mut self, max_mesh_multiview_view_count: u32) -> Self {
24578        self.max_mesh_multiview_view_count = max_mesh_multiview_view_count;
24579        self
24580    }
24581    #[inline]
24582    pub fn mesh_output_per_vertex_granularity(
24583        mut self,
24584        mesh_output_per_vertex_granularity: u32,
24585    ) -> Self {
24586        self.mesh_output_per_vertex_granularity = mesh_output_per_vertex_granularity;
24587        self
24588    }
24589    #[inline]
24590    pub fn mesh_output_per_primitive_granularity(
24591        mut self,
24592        mesh_output_per_primitive_granularity: u32,
24593    ) -> Self {
24594        self.mesh_output_per_primitive_granularity = mesh_output_per_primitive_granularity;
24595        self
24596    }
24597}
24598#[repr(C)]
24599#[cfg_attr(feature = "debug", derive(Debug))]
24600#[derive(Copy, Clone, Default)]
24601#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawMeshTasksIndirectCommandNV.html>"]
24602#[must_use]
24603pub struct DrawMeshTasksIndirectCommandNV {
24604    pub task_count: u32,
24605    pub first_task: u32,
24606}
24607impl DrawMeshTasksIndirectCommandNV {
24608    #[inline]
24609    pub fn task_count(mut self, task_count: u32) -> Self {
24610        self.task_count = task_count;
24611        self
24612    }
24613    #[inline]
24614    pub fn first_task(mut self, first_task: u32) -> Self {
24615        self.first_task = first_task;
24616        self
24617    }
24618}
24619#[repr(C)]
24620#[cfg_attr(feature = "debug", derive(Debug))]
24621#[derive(Copy, Clone)]
24622#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMeshShaderFeaturesEXT.html>"]
24623#[must_use]
24624pub struct PhysicalDeviceMeshShaderFeaturesEXT<'a> {
24625    pub s_type: StructureType,
24626    pub p_next: *mut c_void,
24627    pub task_shader: Bool32,
24628    pub mesh_shader: Bool32,
24629    pub multiview_mesh_shader: Bool32,
24630    pub primitive_fragment_shading_rate_mesh_shader: Bool32,
24631    pub mesh_shader_queries: Bool32,
24632    pub _marker: PhantomData<&'a ()>,
24633}
24634unsafe impl Send for PhysicalDeviceMeshShaderFeaturesEXT<'_> {}
24635unsafe impl Sync for PhysicalDeviceMeshShaderFeaturesEXT<'_> {}
24636impl ::core::default::Default for PhysicalDeviceMeshShaderFeaturesEXT<'_> {
24637    #[inline]
24638    fn default() -> Self {
24639        Self {
24640            s_type: Self::STRUCTURE_TYPE,
24641            p_next: ::core::ptr::null_mut(),
24642            task_shader: Bool32::default(),
24643            mesh_shader: Bool32::default(),
24644            multiview_mesh_shader: Bool32::default(),
24645            primitive_fragment_shading_rate_mesh_shader: Bool32::default(),
24646            mesh_shader_queries: Bool32::default(),
24647            _marker: PhantomData,
24648        }
24649    }
24650}
24651unsafe impl<'a> TaggedStructure for PhysicalDeviceMeshShaderFeaturesEXT<'a> {
24652    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT;
24653}
24654unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMeshShaderFeaturesEXT<'_> {}
24655unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMeshShaderFeaturesEXT<'_> {}
24656impl<'a> PhysicalDeviceMeshShaderFeaturesEXT<'a> {
24657    #[inline]
24658    pub fn task_shader(mut self, task_shader: bool) -> Self {
24659        self.task_shader = task_shader.into();
24660        self
24661    }
24662    #[inline]
24663    pub fn mesh_shader(mut self, mesh_shader: bool) -> Self {
24664        self.mesh_shader = mesh_shader.into();
24665        self
24666    }
24667    #[inline]
24668    pub fn multiview_mesh_shader(mut self, multiview_mesh_shader: bool) -> Self {
24669        self.multiview_mesh_shader = multiview_mesh_shader.into();
24670        self
24671    }
24672    #[inline]
24673    pub fn primitive_fragment_shading_rate_mesh_shader(
24674        mut self,
24675        primitive_fragment_shading_rate_mesh_shader: bool,
24676    ) -> Self {
24677        self.primitive_fragment_shading_rate_mesh_shader =
24678            primitive_fragment_shading_rate_mesh_shader.into();
24679        self
24680    }
24681    #[inline]
24682    pub fn mesh_shader_queries(mut self, mesh_shader_queries: bool) -> Self {
24683        self.mesh_shader_queries = mesh_shader_queries.into();
24684        self
24685    }
24686}
24687#[repr(C)]
24688#[cfg_attr(feature = "debug", derive(Debug))]
24689#[derive(Copy, Clone)]
24690#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMeshShaderPropertiesEXT.html>"]
24691#[must_use]
24692pub struct PhysicalDeviceMeshShaderPropertiesEXT<'a> {
24693    pub s_type: StructureType,
24694    pub p_next: *mut c_void,
24695    pub max_task_work_group_total_count: u32,
24696    pub max_task_work_group_count: [u32; 3],
24697    pub max_task_work_group_invocations: u32,
24698    pub max_task_work_group_size: [u32; 3],
24699    pub max_task_payload_size: u32,
24700    pub max_task_shared_memory_size: u32,
24701    pub max_task_payload_and_shared_memory_size: u32,
24702    pub max_mesh_work_group_total_count: u32,
24703    pub max_mesh_work_group_count: [u32; 3],
24704    pub max_mesh_work_group_invocations: u32,
24705    pub max_mesh_work_group_size: [u32; 3],
24706    pub max_mesh_shared_memory_size: u32,
24707    pub max_mesh_payload_and_shared_memory_size: u32,
24708    pub max_mesh_output_memory_size: u32,
24709    pub max_mesh_payload_and_output_memory_size: u32,
24710    pub max_mesh_output_components: u32,
24711    pub max_mesh_output_vertices: u32,
24712    pub max_mesh_output_primitives: u32,
24713    pub max_mesh_output_layers: u32,
24714    pub max_mesh_multiview_view_count: u32,
24715    pub mesh_output_per_vertex_granularity: u32,
24716    pub mesh_output_per_primitive_granularity: u32,
24717    pub max_preferred_task_work_group_invocations: u32,
24718    pub max_preferred_mesh_work_group_invocations: u32,
24719    pub prefers_local_invocation_vertex_output: Bool32,
24720    pub prefers_local_invocation_primitive_output: Bool32,
24721    pub prefers_compact_vertex_output: Bool32,
24722    pub prefers_compact_primitive_output: Bool32,
24723    pub _marker: PhantomData<&'a ()>,
24724}
24725unsafe impl Send for PhysicalDeviceMeshShaderPropertiesEXT<'_> {}
24726unsafe impl Sync for PhysicalDeviceMeshShaderPropertiesEXT<'_> {}
24727impl ::core::default::Default for PhysicalDeviceMeshShaderPropertiesEXT<'_> {
24728    #[inline]
24729    fn default() -> Self {
24730        Self {
24731            s_type: Self::STRUCTURE_TYPE,
24732            p_next: ::core::ptr::null_mut(),
24733            max_task_work_group_total_count: u32::default(),
24734            max_task_work_group_count: unsafe { ::core::mem::zeroed() },
24735            max_task_work_group_invocations: u32::default(),
24736            max_task_work_group_size: unsafe { ::core::mem::zeroed() },
24737            max_task_payload_size: u32::default(),
24738            max_task_shared_memory_size: u32::default(),
24739            max_task_payload_and_shared_memory_size: u32::default(),
24740            max_mesh_work_group_total_count: u32::default(),
24741            max_mesh_work_group_count: unsafe { ::core::mem::zeroed() },
24742            max_mesh_work_group_invocations: u32::default(),
24743            max_mesh_work_group_size: unsafe { ::core::mem::zeroed() },
24744            max_mesh_shared_memory_size: u32::default(),
24745            max_mesh_payload_and_shared_memory_size: u32::default(),
24746            max_mesh_output_memory_size: u32::default(),
24747            max_mesh_payload_and_output_memory_size: u32::default(),
24748            max_mesh_output_components: u32::default(),
24749            max_mesh_output_vertices: u32::default(),
24750            max_mesh_output_primitives: u32::default(),
24751            max_mesh_output_layers: u32::default(),
24752            max_mesh_multiview_view_count: u32::default(),
24753            mesh_output_per_vertex_granularity: u32::default(),
24754            mesh_output_per_primitive_granularity: u32::default(),
24755            max_preferred_task_work_group_invocations: u32::default(),
24756            max_preferred_mesh_work_group_invocations: u32::default(),
24757            prefers_local_invocation_vertex_output: Bool32::default(),
24758            prefers_local_invocation_primitive_output: Bool32::default(),
24759            prefers_compact_vertex_output: Bool32::default(),
24760            prefers_compact_primitive_output: Bool32::default(),
24761            _marker: PhantomData,
24762        }
24763    }
24764}
24765unsafe impl<'a> TaggedStructure for PhysicalDeviceMeshShaderPropertiesEXT<'a> {
24766    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT;
24767}
24768unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMeshShaderPropertiesEXT<'_> {}
24769impl<'a> PhysicalDeviceMeshShaderPropertiesEXT<'a> {
24770    #[inline]
24771    pub fn max_task_work_group_total_count(mut self, max_task_work_group_total_count: u32) -> Self {
24772        self.max_task_work_group_total_count = max_task_work_group_total_count;
24773        self
24774    }
24775    #[inline]
24776    pub fn max_task_work_group_count(mut self, max_task_work_group_count: [u32; 3]) -> Self {
24777        self.max_task_work_group_count = max_task_work_group_count;
24778        self
24779    }
24780    #[inline]
24781    pub fn max_task_work_group_invocations(mut self, max_task_work_group_invocations: u32) -> Self {
24782        self.max_task_work_group_invocations = max_task_work_group_invocations;
24783        self
24784    }
24785    #[inline]
24786    pub fn max_task_work_group_size(mut self, max_task_work_group_size: [u32; 3]) -> Self {
24787        self.max_task_work_group_size = max_task_work_group_size;
24788        self
24789    }
24790    #[inline]
24791    pub fn max_task_payload_size(mut self, max_task_payload_size: u32) -> Self {
24792        self.max_task_payload_size = max_task_payload_size;
24793        self
24794    }
24795    #[inline]
24796    pub fn max_task_shared_memory_size(mut self, max_task_shared_memory_size: u32) -> Self {
24797        self.max_task_shared_memory_size = max_task_shared_memory_size;
24798        self
24799    }
24800    #[inline]
24801    pub fn max_task_payload_and_shared_memory_size(
24802        mut self,
24803        max_task_payload_and_shared_memory_size: u32,
24804    ) -> Self {
24805        self.max_task_payload_and_shared_memory_size = max_task_payload_and_shared_memory_size;
24806        self
24807    }
24808    #[inline]
24809    pub fn max_mesh_work_group_total_count(mut self, max_mesh_work_group_total_count: u32) -> Self {
24810        self.max_mesh_work_group_total_count = max_mesh_work_group_total_count;
24811        self
24812    }
24813    #[inline]
24814    pub fn max_mesh_work_group_count(mut self, max_mesh_work_group_count: [u32; 3]) -> Self {
24815        self.max_mesh_work_group_count = max_mesh_work_group_count;
24816        self
24817    }
24818    #[inline]
24819    pub fn max_mesh_work_group_invocations(mut self, max_mesh_work_group_invocations: u32) -> Self {
24820        self.max_mesh_work_group_invocations = max_mesh_work_group_invocations;
24821        self
24822    }
24823    #[inline]
24824    pub fn max_mesh_work_group_size(mut self, max_mesh_work_group_size: [u32; 3]) -> Self {
24825        self.max_mesh_work_group_size = max_mesh_work_group_size;
24826        self
24827    }
24828    #[inline]
24829    pub fn max_mesh_shared_memory_size(mut self, max_mesh_shared_memory_size: u32) -> Self {
24830        self.max_mesh_shared_memory_size = max_mesh_shared_memory_size;
24831        self
24832    }
24833    #[inline]
24834    pub fn max_mesh_payload_and_shared_memory_size(
24835        mut self,
24836        max_mesh_payload_and_shared_memory_size: u32,
24837    ) -> Self {
24838        self.max_mesh_payload_and_shared_memory_size = max_mesh_payload_and_shared_memory_size;
24839        self
24840    }
24841    #[inline]
24842    pub fn max_mesh_output_memory_size(mut self, max_mesh_output_memory_size: u32) -> Self {
24843        self.max_mesh_output_memory_size = max_mesh_output_memory_size;
24844        self
24845    }
24846    #[inline]
24847    pub fn max_mesh_payload_and_output_memory_size(
24848        mut self,
24849        max_mesh_payload_and_output_memory_size: u32,
24850    ) -> Self {
24851        self.max_mesh_payload_and_output_memory_size = max_mesh_payload_and_output_memory_size;
24852        self
24853    }
24854    #[inline]
24855    pub fn max_mesh_output_components(mut self, max_mesh_output_components: u32) -> Self {
24856        self.max_mesh_output_components = max_mesh_output_components;
24857        self
24858    }
24859    #[inline]
24860    pub fn max_mesh_output_vertices(mut self, max_mesh_output_vertices: u32) -> Self {
24861        self.max_mesh_output_vertices = max_mesh_output_vertices;
24862        self
24863    }
24864    #[inline]
24865    pub fn max_mesh_output_primitives(mut self, max_mesh_output_primitives: u32) -> Self {
24866        self.max_mesh_output_primitives = max_mesh_output_primitives;
24867        self
24868    }
24869    #[inline]
24870    pub fn max_mesh_output_layers(mut self, max_mesh_output_layers: u32) -> Self {
24871        self.max_mesh_output_layers = max_mesh_output_layers;
24872        self
24873    }
24874    #[inline]
24875    pub fn max_mesh_multiview_view_count(mut self, max_mesh_multiview_view_count: u32) -> Self {
24876        self.max_mesh_multiview_view_count = max_mesh_multiview_view_count;
24877        self
24878    }
24879    #[inline]
24880    pub fn mesh_output_per_vertex_granularity(
24881        mut self,
24882        mesh_output_per_vertex_granularity: u32,
24883    ) -> Self {
24884        self.mesh_output_per_vertex_granularity = mesh_output_per_vertex_granularity;
24885        self
24886    }
24887    #[inline]
24888    pub fn mesh_output_per_primitive_granularity(
24889        mut self,
24890        mesh_output_per_primitive_granularity: u32,
24891    ) -> Self {
24892        self.mesh_output_per_primitive_granularity = mesh_output_per_primitive_granularity;
24893        self
24894    }
24895    #[inline]
24896    pub fn max_preferred_task_work_group_invocations(
24897        mut self,
24898        max_preferred_task_work_group_invocations: u32,
24899    ) -> Self {
24900        self.max_preferred_task_work_group_invocations = max_preferred_task_work_group_invocations;
24901        self
24902    }
24903    #[inline]
24904    pub fn max_preferred_mesh_work_group_invocations(
24905        mut self,
24906        max_preferred_mesh_work_group_invocations: u32,
24907    ) -> Self {
24908        self.max_preferred_mesh_work_group_invocations = max_preferred_mesh_work_group_invocations;
24909        self
24910    }
24911    #[inline]
24912    pub fn prefers_local_invocation_vertex_output(
24913        mut self,
24914        prefers_local_invocation_vertex_output: bool,
24915    ) -> Self {
24916        self.prefers_local_invocation_vertex_output = prefers_local_invocation_vertex_output.into();
24917        self
24918    }
24919    #[inline]
24920    pub fn prefers_local_invocation_primitive_output(
24921        mut self,
24922        prefers_local_invocation_primitive_output: bool,
24923    ) -> Self {
24924        self.prefers_local_invocation_primitive_output =
24925            prefers_local_invocation_primitive_output.into();
24926        self
24927    }
24928    #[inline]
24929    pub fn prefers_compact_vertex_output(mut self, prefers_compact_vertex_output: bool) -> Self {
24930        self.prefers_compact_vertex_output = prefers_compact_vertex_output.into();
24931        self
24932    }
24933    #[inline]
24934    pub fn prefers_compact_primitive_output(
24935        mut self,
24936        prefers_compact_primitive_output: bool,
24937    ) -> Self {
24938        self.prefers_compact_primitive_output = prefers_compact_primitive_output.into();
24939        self
24940    }
24941}
24942#[repr(C)]
24943#[cfg_attr(feature = "debug", derive(Debug))]
24944#[derive(Copy, Clone, Default)]
24945#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawMeshTasksIndirectCommandEXT.html>"]
24946#[must_use]
24947pub struct DrawMeshTasksIndirectCommandEXT {
24948    pub group_count_x: u32,
24949    pub group_count_y: u32,
24950    pub group_count_z: u32,
24951}
24952impl DrawMeshTasksIndirectCommandEXT {
24953    #[inline]
24954    pub fn group_count_x(mut self, group_count_x: u32) -> Self {
24955        self.group_count_x = group_count_x;
24956        self
24957    }
24958    #[inline]
24959    pub fn group_count_y(mut self, group_count_y: u32) -> Self {
24960        self.group_count_y = group_count_y;
24961        self
24962    }
24963    #[inline]
24964    pub fn group_count_z(mut self, group_count_z: u32) -> Self {
24965        self.group_count_z = group_count_z;
24966        self
24967    }
24968}
24969#[repr(C)]
24970#[cfg_attr(feature = "debug", derive(Debug))]
24971#[derive(Copy, Clone)]
24972#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRayTracingShaderGroupCreateInfoNV.html>"]
24973#[must_use]
24974pub struct RayTracingShaderGroupCreateInfoNV<'a> {
24975    pub s_type: StructureType,
24976    pub p_next: *const c_void,
24977    pub ty: RayTracingShaderGroupTypeKHR,
24978    pub general_shader: u32,
24979    pub closest_hit_shader: u32,
24980    pub any_hit_shader: u32,
24981    pub intersection_shader: u32,
24982    pub _marker: PhantomData<&'a ()>,
24983}
24984unsafe impl Send for RayTracingShaderGroupCreateInfoNV<'_> {}
24985unsafe impl Sync for RayTracingShaderGroupCreateInfoNV<'_> {}
24986impl ::core::default::Default for RayTracingShaderGroupCreateInfoNV<'_> {
24987    #[inline]
24988    fn default() -> Self {
24989        Self {
24990            s_type: Self::STRUCTURE_TYPE,
24991            p_next: ::core::ptr::null(),
24992            ty: RayTracingShaderGroupTypeKHR::default(),
24993            general_shader: u32::default(),
24994            closest_hit_shader: u32::default(),
24995            any_hit_shader: u32::default(),
24996            intersection_shader: u32::default(),
24997            _marker: PhantomData,
24998        }
24999    }
25000}
25001unsafe impl<'a> TaggedStructure for RayTracingShaderGroupCreateInfoNV<'a> {
25002    const STRUCTURE_TYPE: StructureType = StructureType::RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV;
25003}
25004impl<'a> RayTracingShaderGroupCreateInfoNV<'a> {
25005    #[inline]
25006    pub fn ty(mut self, ty: RayTracingShaderGroupTypeKHR) -> Self {
25007        self.ty = ty;
25008        self
25009    }
25010    #[inline]
25011    pub fn general_shader(mut self, general_shader: u32) -> Self {
25012        self.general_shader = general_shader;
25013        self
25014    }
25015    #[inline]
25016    pub fn closest_hit_shader(mut self, closest_hit_shader: u32) -> Self {
25017        self.closest_hit_shader = closest_hit_shader;
25018        self
25019    }
25020    #[inline]
25021    pub fn any_hit_shader(mut self, any_hit_shader: u32) -> Self {
25022        self.any_hit_shader = any_hit_shader;
25023        self
25024    }
25025    #[inline]
25026    pub fn intersection_shader(mut self, intersection_shader: u32) -> Self {
25027        self.intersection_shader = intersection_shader;
25028        self
25029    }
25030}
25031#[repr(C)]
25032#[cfg_attr(feature = "debug", derive(Debug))]
25033#[derive(Copy, Clone)]
25034#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRayTracingShaderGroupCreateInfoKHR.html>"]
25035#[must_use]
25036pub struct RayTracingShaderGroupCreateInfoKHR<'a> {
25037    pub s_type: StructureType,
25038    pub p_next: *const c_void,
25039    pub ty: RayTracingShaderGroupTypeKHR,
25040    pub general_shader: u32,
25041    pub closest_hit_shader: u32,
25042    pub any_hit_shader: u32,
25043    pub intersection_shader: u32,
25044    pub p_shader_group_capture_replay_handle: *const c_void,
25045    pub _marker: PhantomData<&'a ()>,
25046}
25047unsafe impl Send for RayTracingShaderGroupCreateInfoKHR<'_> {}
25048unsafe impl Sync for RayTracingShaderGroupCreateInfoKHR<'_> {}
25049impl ::core::default::Default for RayTracingShaderGroupCreateInfoKHR<'_> {
25050    #[inline]
25051    fn default() -> Self {
25052        Self {
25053            s_type: Self::STRUCTURE_TYPE,
25054            p_next: ::core::ptr::null(),
25055            ty: RayTracingShaderGroupTypeKHR::default(),
25056            general_shader: u32::default(),
25057            closest_hit_shader: u32::default(),
25058            any_hit_shader: u32::default(),
25059            intersection_shader: u32::default(),
25060            p_shader_group_capture_replay_handle: ::core::ptr::null(),
25061            _marker: PhantomData,
25062        }
25063    }
25064}
25065unsafe impl<'a> TaggedStructure for RayTracingShaderGroupCreateInfoKHR<'a> {
25066    const STRUCTURE_TYPE: StructureType = StructureType::RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
25067}
25068impl<'a> RayTracingShaderGroupCreateInfoKHR<'a> {
25069    #[inline]
25070    pub fn ty(mut self, ty: RayTracingShaderGroupTypeKHR) -> Self {
25071        self.ty = ty;
25072        self
25073    }
25074    #[inline]
25075    pub fn general_shader(mut self, general_shader: u32) -> Self {
25076        self.general_shader = general_shader;
25077        self
25078    }
25079    #[inline]
25080    pub fn closest_hit_shader(mut self, closest_hit_shader: u32) -> Self {
25081        self.closest_hit_shader = closest_hit_shader;
25082        self
25083    }
25084    #[inline]
25085    pub fn any_hit_shader(mut self, any_hit_shader: u32) -> Self {
25086        self.any_hit_shader = any_hit_shader;
25087        self
25088    }
25089    #[inline]
25090    pub fn intersection_shader(mut self, intersection_shader: u32) -> Self {
25091        self.intersection_shader = intersection_shader;
25092        self
25093    }
25094    #[inline]
25095    pub fn shader_group_capture_replay_handle(
25096        mut self,
25097        shader_group_capture_replay_handle: *const c_void,
25098    ) -> Self {
25099        self.p_shader_group_capture_replay_handle = shader_group_capture_replay_handle;
25100        self
25101    }
25102}
25103#[repr(C)]
25104#[cfg_attr(feature = "debug", derive(Debug))]
25105#[derive(Copy, Clone)]
25106#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRayTracingPipelineCreateInfoNV.html>"]
25107#[must_use]
25108pub struct RayTracingPipelineCreateInfoNV<'a> {
25109    pub s_type: StructureType,
25110    pub p_next: *const c_void,
25111    pub flags: PipelineCreateFlags,
25112    pub stage_count: u32,
25113    pub p_stages: *const PipelineShaderStageCreateInfo<'a>,
25114    pub group_count: u32,
25115    pub p_groups: *const RayTracingShaderGroupCreateInfoNV<'a>,
25116    pub max_recursion_depth: u32,
25117    pub layout: PipelineLayout,
25118    pub base_pipeline_handle: Pipeline,
25119    pub base_pipeline_index: i32,
25120    pub _marker: PhantomData<&'a ()>,
25121}
25122unsafe impl Send for RayTracingPipelineCreateInfoNV<'_> {}
25123unsafe impl Sync for RayTracingPipelineCreateInfoNV<'_> {}
25124impl ::core::default::Default for RayTracingPipelineCreateInfoNV<'_> {
25125    #[inline]
25126    fn default() -> Self {
25127        Self {
25128            s_type: Self::STRUCTURE_TYPE,
25129            p_next: ::core::ptr::null(),
25130            flags: PipelineCreateFlags::default(),
25131            stage_count: u32::default(),
25132            p_stages: ::core::ptr::null(),
25133            group_count: u32::default(),
25134            p_groups: ::core::ptr::null(),
25135            max_recursion_depth: u32::default(),
25136            layout: PipelineLayout::default(),
25137            base_pipeline_handle: Pipeline::default(),
25138            base_pipeline_index: i32::default(),
25139            _marker: PhantomData,
25140        }
25141    }
25142}
25143unsafe impl<'a> TaggedStructure for RayTracingPipelineCreateInfoNV<'a> {
25144    const STRUCTURE_TYPE: StructureType = StructureType::RAY_TRACING_PIPELINE_CREATE_INFO_NV;
25145}
25146pub unsafe trait ExtendsRayTracingPipelineCreateInfoNV {}
25147impl<'a> RayTracingPipelineCreateInfoNV<'a> {
25148    #[inline]
25149    pub fn flags(mut self, flags: PipelineCreateFlags) -> Self {
25150        self.flags = flags;
25151        self
25152    }
25153    #[inline]
25154    pub fn stages(mut self, stages: &'a [PipelineShaderStageCreateInfo<'a>]) -> Self {
25155        self.stage_count = stages.len() as _;
25156        self.p_stages = stages.as_ptr();
25157        self
25158    }
25159    #[inline]
25160    pub fn groups(mut self, groups: &'a [RayTracingShaderGroupCreateInfoNV<'a>]) -> Self {
25161        self.group_count = groups.len() as _;
25162        self.p_groups = groups.as_ptr();
25163        self
25164    }
25165    #[inline]
25166    pub fn max_recursion_depth(mut self, max_recursion_depth: u32) -> Self {
25167        self.max_recursion_depth = max_recursion_depth;
25168        self
25169    }
25170    #[inline]
25171    pub fn layout(mut self, layout: PipelineLayout) -> Self {
25172        self.layout = layout;
25173        self
25174    }
25175    #[inline]
25176    pub fn base_pipeline_handle(mut self, base_pipeline_handle: Pipeline) -> Self {
25177        self.base_pipeline_handle = base_pipeline_handle;
25178        self
25179    }
25180    #[inline]
25181    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
25182        self.base_pipeline_index = base_pipeline_index;
25183        self
25184    }
25185    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
25186    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
25187    #[doc = r" valid extension structs can be pushed into the chain."]
25188    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
25189    #[doc = r" chain will look like `A -> D -> B -> C`."]
25190    pub fn push_next<T: ExtendsRayTracingPipelineCreateInfoNV + ?Sized>(
25191        mut self,
25192        next: &'a mut T,
25193    ) -> Self {
25194        unsafe {
25195            let next_ptr = <*const T>::cast(next);
25196            let last_next = ptr_chain_iter(next).last().unwrap();
25197            (*last_next).p_next = self.p_next as _;
25198            self.p_next = next_ptr;
25199        }
25200        self
25201    }
25202}
25203#[repr(C)]
25204#[cfg_attr(feature = "debug", derive(Debug))]
25205#[derive(Copy, Clone)]
25206#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRayTracingPipelineCreateInfoKHR.html>"]
25207#[must_use]
25208pub struct RayTracingPipelineCreateInfoKHR<'a> {
25209    pub s_type: StructureType,
25210    pub p_next: *const c_void,
25211    pub flags: PipelineCreateFlags,
25212    pub stage_count: u32,
25213    pub p_stages: *const PipelineShaderStageCreateInfo<'a>,
25214    pub group_count: u32,
25215    pub p_groups: *const RayTracingShaderGroupCreateInfoKHR<'a>,
25216    pub max_pipeline_ray_recursion_depth: u32,
25217    pub p_library_info: *const PipelineLibraryCreateInfoKHR<'a>,
25218    pub p_library_interface: *const RayTracingPipelineInterfaceCreateInfoKHR<'a>,
25219    pub p_dynamic_state: *const PipelineDynamicStateCreateInfo<'a>,
25220    pub layout: PipelineLayout,
25221    pub base_pipeline_handle: Pipeline,
25222    pub base_pipeline_index: i32,
25223    pub _marker: PhantomData<&'a ()>,
25224}
25225unsafe impl Send for RayTracingPipelineCreateInfoKHR<'_> {}
25226unsafe impl Sync for RayTracingPipelineCreateInfoKHR<'_> {}
25227impl ::core::default::Default for RayTracingPipelineCreateInfoKHR<'_> {
25228    #[inline]
25229    fn default() -> Self {
25230        Self {
25231            s_type: Self::STRUCTURE_TYPE,
25232            p_next: ::core::ptr::null(),
25233            flags: PipelineCreateFlags::default(),
25234            stage_count: u32::default(),
25235            p_stages: ::core::ptr::null(),
25236            group_count: u32::default(),
25237            p_groups: ::core::ptr::null(),
25238            max_pipeline_ray_recursion_depth: u32::default(),
25239            p_library_info: ::core::ptr::null(),
25240            p_library_interface: ::core::ptr::null(),
25241            p_dynamic_state: ::core::ptr::null(),
25242            layout: PipelineLayout::default(),
25243            base_pipeline_handle: Pipeline::default(),
25244            base_pipeline_index: i32::default(),
25245            _marker: PhantomData,
25246        }
25247    }
25248}
25249unsafe impl<'a> TaggedStructure for RayTracingPipelineCreateInfoKHR<'a> {
25250    const STRUCTURE_TYPE: StructureType = StructureType::RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
25251}
25252pub unsafe trait ExtendsRayTracingPipelineCreateInfoKHR {}
25253impl<'a> RayTracingPipelineCreateInfoKHR<'a> {
25254    #[inline]
25255    pub fn flags(mut self, flags: PipelineCreateFlags) -> Self {
25256        self.flags = flags;
25257        self
25258    }
25259    #[inline]
25260    pub fn stages(mut self, stages: &'a [PipelineShaderStageCreateInfo<'a>]) -> Self {
25261        self.stage_count = stages.len() as _;
25262        self.p_stages = stages.as_ptr();
25263        self
25264    }
25265    #[inline]
25266    pub fn groups(mut self, groups: &'a [RayTracingShaderGroupCreateInfoKHR<'a>]) -> Self {
25267        self.group_count = groups.len() as _;
25268        self.p_groups = groups.as_ptr();
25269        self
25270    }
25271    #[inline]
25272    pub fn max_pipeline_ray_recursion_depth(
25273        mut self,
25274        max_pipeline_ray_recursion_depth: u32,
25275    ) -> Self {
25276        self.max_pipeline_ray_recursion_depth = max_pipeline_ray_recursion_depth;
25277        self
25278    }
25279    #[inline]
25280    pub fn library_info(mut self, library_info: &'a PipelineLibraryCreateInfoKHR<'a>) -> Self {
25281        self.p_library_info = library_info;
25282        self
25283    }
25284    #[inline]
25285    pub fn library_interface(
25286        mut self,
25287        library_interface: &'a RayTracingPipelineInterfaceCreateInfoKHR<'a>,
25288    ) -> Self {
25289        self.p_library_interface = library_interface;
25290        self
25291    }
25292    #[inline]
25293    pub fn dynamic_state(mut self, dynamic_state: &'a PipelineDynamicStateCreateInfo<'a>) -> Self {
25294        self.p_dynamic_state = dynamic_state;
25295        self
25296    }
25297    #[inline]
25298    pub fn layout(mut self, layout: PipelineLayout) -> Self {
25299        self.layout = layout;
25300        self
25301    }
25302    #[inline]
25303    pub fn base_pipeline_handle(mut self, base_pipeline_handle: Pipeline) -> Self {
25304        self.base_pipeline_handle = base_pipeline_handle;
25305        self
25306    }
25307    #[inline]
25308    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
25309        self.base_pipeline_index = base_pipeline_index;
25310        self
25311    }
25312    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
25313    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
25314    #[doc = r" valid extension structs can be pushed into the chain."]
25315    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
25316    #[doc = r" chain will look like `A -> D -> B -> C`."]
25317    pub fn push_next<T: ExtendsRayTracingPipelineCreateInfoKHR + ?Sized>(
25318        mut self,
25319        next: &'a mut T,
25320    ) -> Self {
25321        unsafe {
25322            let next_ptr = <*const T>::cast(next);
25323            let last_next = ptr_chain_iter(next).last().unwrap();
25324            (*last_next).p_next = self.p_next as _;
25325            self.p_next = next_ptr;
25326        }
25327        self
25328    }
25329}
25330#[repr(C)]
25331#[cfg_attr(feature = "debug", derive(Debug))]
25332#[derive(Copy, Clone)]
25333#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeometryTrianglesNV.html>"]
25334#[must_use]
25335pub struct GeometryTrianglesNV<'a> {
25336    pub s_type: StructureType,
25337    pub p_next: *const c_void,
25338    pub vertex_data: Buffer,
25339    pub vertex_offset: DeviceSize,
25340    pub vertex_count: u32,
25341    pub vertex_stride: DeviceSize,
25342    pub vertex_format: Format,
25343    pub index_data: Buffer,
25344    pub index_offset: DeviceSize,
25345    pub index_count: u32,
25346    pub index_type: IndexType,
25347    pub transform_data: Buffer,
25348    pub transform_offset: DeviceSize,
25349    pub _marker: PhantomData<&'a ()>,
25350}
25351unsafe impl Send for GeometryTrianglesNV<'_> {}
25352unsafe impl Sync for GeometryTrianglesNV<'_> {}
25353impl ::core::default::Default for GeometryTrianglesNV<'_> {
25354    #[inline]
25355    fn default() -> Self {
25356        Self {
25357            s_type: Self::STRUCTURE_TYPE,
25358            p_next: ::core::ptr::null(),
25359            vertex_data: Buffer::default(),
25360            vertex_offset: DeviceSize::default(),
25361            vertex_count: u32::default(),
25362            vertex_stride: DeviceSize::default(),
25363            vertex_format: Format::default(),
25364            index_data: Buffer::default(),
25365            index_offset: DeviceSize::default(),
25366            index_count: u32::default(),
25367            index_type: IndexType::default(),
25368            transform_data: Buffer::default(),
25369            transform_offset: DeviceSize::default(),
25370            _marker: PhantomData,
25371        }
25372    }
25373}
25374unsafe impl<'a> TaggedStructure for GeometryTrianglesNV<'a> {
25375    const STRUCTURE_TYPE: StructureType = StructureType::GEOMETRY_TRIANGLES_NV;
25376}
25377impl<'a> GeometryTrianglesNV<'a> {
25378    #[inline]
25379    pub fn vertex_data(mut self, vertex_data: Buffer) -> Self {
25380        self.vertex_data = vertex_data;
25381        self
25382    }
25383    #[inline]
25384    pub fn vertex_offset(mut self, vertex_offset: DeviceSize) -> Self {
25385        self.vertex_offset = vertex_offset;
25386        self
25387    }
25388    #[inline]
25389    pub fn vertex_count(mut self, vertex_count: u32) -> Self {
25390        self.vertex_count = vertex_count;
25391        self
25392    }
25393    #[inline]
25394    pub fn vertex_stride(mut self, vertex_stride: DeviceSize) -> Self {
25395        self.vertex_stride = vertex_stride;
25396        self
25397    }
25398    #[inline]
25399    pub fn vertex_format(mut self, vertex_format: Format) -> Self {
25400        self.vertex_format = vertex_format;
25401        self
25402    }
25403    #[inline]
25404    pub fn index_data(mut self, index_data: Buffer) -> Self {
25405        self.index_data = index_data;
25406        self
25407    }
25408    #[inline]
25409    pub fn index_offset(mut self, index_offset: DeviceSize) -> Self {
25410        self.index_offset = index_offset;
25411        self
25412    }
25413    #[inline]
25414    pub fn index_count(mut self, index_count: u32) -> Self {
25415        self.index_count = index_count;
25416        self
25417    }
25418    #[inline]
25419    pub fn index_type(mut self, index_type: IndexType) -> Self {
25420        self.index_type = index_type;
25421        self
25422    }
25423    #[inline]
25424    pub fn transform_data(mut self, transform_data: Buffer) -> Self {
25425        self.transform_data = transform_data;
25426        self
25427    }
25428    #[inline]
25429    pub fn transform_offset(mut self, transform_offset: DeviceSize) -> Self {
25430        self.transform_offset = transform_offset;
25431        self
25432    }
25433}
25434#[repr(C)]
25435#[cfg_attr(feature = "debug", derive(Debug))]
25436#[derive(Copy, Clone)]
25437#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeometryAABBNV.html>"]
25438#[must_use]
25439pub struct GeometryAABBNV<'a> {
25440    pub s_type: StructureType,
25441    pub p_next: *const c_void,
25442    pub aabb_data: Buffer,
25443    pub num_aab_bs: u32,
25444    pub stride: u32,
25445    pub offset: DeviceSize,
25446    pub _marker: PhantomData<&'a ()>,
25447}
25448unsafe impl Send for GeometryAABBNV<'_> {}
25449unsafe impl Sync for GeometryAABBNV<'_> {}
25450impl ::core::default::Default for GeometryAABBNV<'_> {
25451    #[inline]
25452    fn default() -> Self {
25453        Self {
25454            s_type: Self::STRUCTURE_TYPE,
25455            p_next: ::core::ptr::null(),
25456            aabb_data: Buffer::default(),
25457            num_aab_bs: u32::default(),
25458            stride: u32::default(),
25459            offset: DeviceSize::default(),
25460            _marker: PhantomData,
25461        }
25462    }
25463}
25464unsafe impl<'a> TaggedStructure for GeometryAABBNV<'a> {
25465    const STRUCTURE_TYPE: StructureType = StructureType::GEOMETRY_AABB_NV;
25466}
25467impl<'a> GeometryAABBNV<'a> {
25468    #[inline]
25469    pub fn aabb_data(mut self, aabb_data: Buffer) -> Self {
25470        self.aabb_data = aabb_data;
25471        self
25472    }
25473    #[inline]
25474    pub fn num_aab_bs(mut self, num_aab_bs: u32) -> Self {
25475        self.num_aab_bs = num_aab_bs;
25476        self
25477    }
25478    #[inline]
25479    pub fn stride(mut self, stride: u32) -> Self {
25480        self.stride = stride;
25481        self
25482    }
25483    #[inline]
25484    pub fn offset(mut self, offset: DeviceSize) -> Self {
25485        self.offset = offset;
25486        self
25487    }
25488}
25489#[repr(C)]
25490#[cfg_attr(feature = "debug", derive(Debug))]
25491#[derive(Copy, Clone, Default)]
25492#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeometryDataNV.html>"]
25493#[must_use]
25494pub struct GeometryDataNV<'a> {
25495    pub triangles: GeometryTrianglesNV<'a>,
25496    pub aabbs: GeometryAABBNV<'a>,
25497    pub _marker: PhantomData<&'a ()>,
25498}
25499impl<'a> GeometryDataNV<'a> {
25500    #[inline]
25501    pub fn triangles(mut self, triangles: GeometryTrianglesNV<'a>) -> Self {
25502        self.triangles = triangles;
25503        self
25504    }
25505    #[inline]
25506    pub fn aabbs(mut self, aabbs: GeometryAABBNV<'a>) -> Self {
25507        self.aabbs = aabbs;
25508        self
25509    }
25510}
25511#[repr(C)]
25512#[cfg_attr(feature = "debug", derive(Debug))]
25513#[derive(Copy, Clone)]
25514#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGeometryNV.html>"]
25515#[must_use]
25516pub struct GeometryNV<'a> {
25517    pub s_type: StructureType,
25518    pub p_next: *const c_void,
25519    pub geometry_type: GeometryTypeKHR,
25520    pub geometry: GeometryDataNV<'a>,
25521    pub flags: GeometryFlagsKHR,
25522    pub _marker: PhantomData<&'a ()>,
25523}
25524unsafe impl Send for GeometryNV<'_> {}
25525unsafe impl Sync for GeometryNV<'_> {}
25526impl ::core::default::Default for GeometryNV<'_> {
25527    #[inline]
25528    fn default() -> Self {
25529        Self {
25530            s_type: Self::STRUCTURE_TYPE,
25531            p_next: ::core::ptr::null(),
25532            geometry_type: GeometryTypeKHR::default(),
25533            geometry: GeometryDataNV::default(),
25534            flags: GeometryFlagsKHR::default(),
25535            _marker: PhantomData,
25536        }
25537    }
25538}
25539unsafe impl<'a> TaggedStructure for GeometryNV<'a> {
25540    const STRUCTURE_TYPE: StructureType = StructureType::GEOMETRY_NV;
25541}
25542impl<'a> GeometryNV<'a> {
25543    #[inline]
25544    pub fn geometry_type(mut self, geometry_type: GeometryTypeKHR) -> Self {
25545        self.geometry_type = geometry_type;
25546        self
25547    }
25548    #[inline]
25549    pub fn geometry(mut self, geometry: GeometryDataNV<'a>) -> Self {
25550        self.geometry = geometry;
25551        self
25552    }
25553    #[inline]
25554    pub fn flags(mut self, flags: GeometryFlagsKHR) -> Self {
25555        self.flags = flags;
25556        self
25557    }
25558}
25559#[repr(C)]
25560#[cfg_attr(feature = "debug", derive(Debug))]
25561#[derive(Copy, Clone)]
25562#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureInfoNV.html>"]
25563#[must_use]
25564pub struct AccelerationStructureInfoNV<'a> {
25565    pub s_type: StructureType,
25566    pub p_next: *const c_void,
25567    pub ty: AccelerationStructureTypeNV,
25568    pub flags: BuildAccelerationStructureFlagsNV,
25569    pub instance_count: u32,
25570    pub geometry_count: u32,
25571    pub p_geometries: *const GeometryNV<'a>,
25572    pub _marker: PhantomData<&'a ()>,
25573}
25574unsafe impl Send for AccelerationStructureInfoNV<'_> {}
25575unsafe impl Sync for AccelerationStructureInfoNV<'_> {}
25576impl ::core::default::Default for AccelerationStructureInfoNV<'_> {
25577    #[inline]
25578    fn default() -> Self {
25579        Self {
25580            s_type: Self::STRUCTURE_TYPE,
25581            p_next: ::core::ptr::null(),
25582            ty: AccelerationStructureTypeNV::default(),
25583            flags: BuildAccelerationStructureFlagsNV::default(),
25584            instance_count: u32::default(),
25585            geometry_count: u32::default(),
25586            p_geometries: ::core::ptr::null(),
25587            _marker: PhantomData,
25588        }
25589    }
25590}
25591unsafe impl<'a> TaggedStructure for AccelerationStructureInfoNV<'a> {
25592    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_INFO_NV;
25593}
25594impl<'a> AccelerationStructureInfoNV<'a> {
25595    #[inline]
25596    pub fn ty(mut self, ty: AccelerationStructureTypeNV) -> Self {
25597        self.ty = ty;
25598        self
25599    }
25600    #[inline]
25601    pub fn flags(mut self, flags: BuildAccelerationStructureFlagsNV) -> Self {
25602        self.flags = flags;
25603        self
25604    }
25605    #[inline]
25606    pub fn instance_count(mut self, instance_count: u32) -> Self {
25607        self.instance_count = instance_count;
25608        self
25609    }
25610    #[inline]
25611    pub fn geometries(mut self, geometries: &'a [GeometryNV<'a>]) -> Self {
25612        self.geometry_count = geometries.len() as _;
25613        self.p_geometries = geometries.as_ptr();
25614        self
25615    }
25616}
25617#[repr(C)]
25618#[cfg_attr(feature = "debug", derive(Debug))]
25619#[derive(Copy, Clone)]
25620#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureCreateInfoNV.html>"]
25621#[must_use]
25622pub struct AccelerationStructureCreateInfoNV<'a> {
25623    pub s_type: StructureType,
25624    pub p_next: *const c_void,
25625    pub compacted_size: DeviceSize,
25626    pub info: AccelerationStructureInfoNV<'a>,
25627    pub _marker: PhantomData<&'a ()>,
25628}
25629unsafe impl Send for AccelerationStructureCreateInfoNV<'_> {}
25630unsafe impl Sync for AccelerationStructureCreateInfoNV<'_> {}
25631impl ::core::default::Default for AccelerationStructureCreateInfoNV<'_> {
25632    #[inline]
25633    fn default() -> Self {
25634        Self {
25635            s_type: Self::STRUCTURE_TYPE,
25636            p_next: ::core::ptr::null(),
25637            compacted_size: DeviceSize::default(),
25638            info: AccelerationStructureInfoNV::default(),
25639            _marker: PhantomData,
25640        }
25641    }
25642}
25643unsafe impl<'a> TaggedStructure for AccelerationStructureCreateInfoNV<'a> {
25644    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_CREATE_INFO_NV;
25645}
25646pub unsafe trait ExtendsAccelerationStructureCreateInfoNV {}
25647impl<'a> AccelerationStructureCreateInfoNV<'a> {
25648    #[inline]
25649    pub fn compacted_size(mut self, compacted_size: DeviceSize) -> Self {
25650        self.compacted_size = compacted_size;
25651        self
25652    }
25653    #[inline]
25654    pub fn info(mut self, info: AccelerationStructureInfoNV<'a>) -> Self {
25655        self.info = info;
25656        self
25657    }
25658    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
25659    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
25660    #[doc = r" valid extension structs can be pushed into the chain."]
25661    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
25662    #[doc = r" chain will look like `A -> D -> B -> C`."]
25663    pub fn push_next<T: ExtendsAccelerationStructureCreateInfoNV + ?Sized>(
25664        mut self,
25665        next: &'a mut T,
25666    ) -> Self {
25667        unsafe {
25668            let next_ptr = <*const T>::cast(next);
25669            let last_next = ptr_chain_iter(next).last().unwrap();
25670            (*last_next).p_next = self.p_next as _;
25671            self.p_next = next_ptr;
25672        }
25673        self
25674    }
25675}
25676#[repr(C)]
25677#[cfg_attr(feature = "debug", derive(Debug))]
25678#[derive(Copy, Clone)]
25679#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindAccelerationStructureMemoryInfoNV.html>"]
25680#[must_use]
25681pub struct BindAccelerationStructureMemoryInfoNV<'a> {
25682    pub s_type: StructureType,
25683    pub p_next: *const c_void,
25684    pub acceleration_structure: AccelerationStructureNV,
25685    pub memory: DeviceMemory,
25686    pub memory_offset: DeviceSize,
25687    pub device_index_count: u32,
25688    pub p_device_indices: *const u32,
25689    pub _marker: PhantomData<&'a ()>,
25690}
25691unsafe impl Send for BindAccelerationStructureMemoryInfoNV<'_> {}
25692unsafe impl Sync for BindAccelerationStructureMemoryInfoNV<'_> {}
25693impl ::core::default::Default for BindAccelerationStructureMemoryInfoNV<'_> {
25694    #[inline]
25695    fn default() -> Self {
25696        Self {
25697            s_type: Self::STRUCTURE_TYPE,
25698            p_next: ::core::ptr::null(),
25699            acceleration_structure: AccelerationStructureNV::default(),
25700            memory: DeviceMemory::default(),
25701            memory_offset: DeviceSize::default(),
25702            device_index_count: u32::default(),
25703            p_device_indices: ::core::ptr::null(),
25704            _marker: PhantomData,
25705        }
25706    }
25707}
25708unsafe impl<'a> TaggedStructure for BindAccelerationStructureMemoryInfoNV<'a> {
25709    const STRUCTURE_TYPE: StructureType = StructureType::BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV;
25710}
25711impl<'a> BindAccelerationStructureMemoryInfoNV<'a> {
25712    #[inline]
25713    pub fn acceleration_structure(
25714        mut self,
25715        acceleration_structure: AccelerationStructureNV,
25716    ) -> Self {
25717        self.acceleration_structure = acceleration_structure;
25718        self
25719    }
25720    #[inline]
25721    pub fn memory(mut self, memory: DeviceMemory) -> Self {
25722        self.memory = memory;
25723        self
25724    }
25725    #[inline]
25726    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
25727        self.memory_offset = memory_offset;
25728        self
25729    }
25730    #[inline]
25731    pub fn device_indices(mut self, device_indices: &'a [u32]) -> Self {
25732        self.device_index_count = device_indices.len() as _;
25733        self.p_device_indices = device_indices.as_ptr();
25734        self
25735    }
25736}
25737#[repr(C)]
25738#[cfg_attr(feature = "debug", derive(Debug))]
25739#[derive(Copy, Clone)]
25740#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWriteDescriptorSetAccelerationStructureKHR.html>"]
25741#[must_use]
25742pub struct WriteDescriptorSetAccelerationStructureKHR<'a> {
25743    pub s_type: StructureType,
25744    pub p_next: *const c_void,
25745    pub acceleration_structure_count: u32,
25746    pub p_acceleration_structures: *const AccelerationStructureKHR,
25747    pub _marker: PhantomData<&'a ()>,
25748}
25749unsafe impl Send for WriteDescriptorSetAccelerationStructureKHR<'_> {}
25750unsafe impl Sync for WriteDescriptorSetAccelerationStructureKHR<'_> {}
25751impl ::core::default::Default for WriteDescriptorSetAccelerationStructureKHR<'_> {
25752    #[inline]
25753    fn default() -> Self {
25754        Self {
25755            s_type: Self::STRUCTURE_TYPE,
25756            p_next: ::core::ptr::null(),
25757            acceleration_structure_count: u32::default(),
25758            p_acceleration_structures: ::core::ptr::null(),
25759            _marker: PhantomData,
25760        }
25761    }
25762}
25763unsafe impl<'a> TaggedStructure for WriteDescriptorSetAccelerationStructureKHR<'a> {
25764    const STRUCTURE_TYPE: StructureType =
25765        StructureType::WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
25766}
25767unsafe impl ExtendsWriteDescriptorSet for WriteDescriptorSetAccelerationStructureKHR<'_> {}
25768impl<'a> WriteDescriptorSetAccelerationStructureKHR<'a> {
25769    #[inline]
25770    pub fn acceleration_structures(
25771        mut self,
25772        acceleration_structures: &'a [AccelerationStructureKHR],
25773    ) -> Self {
25774        self.acceleration_structure_count = acceleration_structures.len() as _;
25775        self.p_acceleration_structures = acceleration_structures.as_ptr();
25776        self
25777    }
25778}
25779#[repr(C)]
25780#[cfg_attr(feature = "debug", derive(Debug))]
25781#[derive(Copy, Clone)]
25782#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkWriteDescriptorSetAccelerationStructureNV.html>"]
25783#[must_use]
25784pub struct WriteDescriptorSetAccelerationStructureNV<'a> {
25785    pub s_type: StructureType,
25786    pub p_next: *const c_void,
25787    pub acceleration_structure_count: u32,
25788    pub p_acceleration_structures: *const AccelerationStructureNV,
25789    pub _marker: PhantomData<&'a ()>,
25790}
25791unsafe impl Send for WriteDescriptorSetAccelerationStructureNV<'_> {}
25792unsafe impl Sync for WriteDescriptorSetAccelerationStructureNV<'_> {}
25793impl ::core::default::Default for WriteDescriptorSetAccelerationStructureNV<'_> {
25794    #[inline]
25795    fn default() -> Self {
25796        Self {
25797            s_type: Self::STRUCTURE_TYPE,
25798            p_next: ::core::ptr::null(),
25799            acceleration_structure_count: u32::default(),
25800            p_acceleration_structures: ::core::ptr::null(),
25801            _marker: PhantomData,
25802        }
25803    }
25804}
25805unsafe impl<'a> TaggedStructure for WriteDescriptorSetAccelerationStructureNV<'a> {
25806    const STRUCTURE_TYPE: StructureType =
25807        StructureType::WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV;
25808}
25809unsafe impl ExtendsWriteDescriptorSet for WriteDescriptorSetAccelerationStructureNV<'_> {}
25810impl<'a> WriteDescriptorSetAccelerationStructureNV<'a> {
25811    #[inline]
25812    pub fn acceleration_structures(
25813        mut self,
25814        acceleration_structures: &'a [AccelerationStructureNV],
25815    ) -> Self {
25816        self.acceleration_structure_count = acceleration_structures.len() as _;
25817        self.p_acceleration_structures = acceleration_structures.as_ptr();
25818        self
25819    }
25820}
25821#[repr(C)]
25822#[cfg_attr(feature = "debug", derive(Debug))]
25823#[derive(Copy, Clone)]
25824#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMemoryRequirementsInfoNV.html>"]
25825#[must_use]
25826pub struct AccelerationStructureMemoryRequirementsInfoNV<'a> {
25827    pub s_type: StructureType,
25828    pub p_next: *const c_void,
25829    pub ty: AccelerationStructureMemoryRequirementsTypeNV,
25830    pub acceleration_structure: AccelerationStructureNV,
25831    pub _marker: PhantomData<&'a ()>,
25832}
25833unsafe impl Send for AccelerationStructureMemoryRequirementsInfoNV<'_> {}
25834unsafe impl Sync for AccelerationStructureMemoryRequirementsInfoNV<'_> {}
25835impl ::core::default::Default for AccelerationStructureMemoryRequirementsInfoNV<'_> {
25836    #[inline]
25837    fn default() -> Self {
25838        Self {
25839            s_type: Self::STRUCTURE_TYPE,
25840            p_next: ::core::ptr::null(),
25841            ty: AccelerationStructureMemoryRequirementsTypeNV::default(),
25842            acceleration_structure: AccelerationStructureNV::default(),
25843            _marker: PhantomData,
25844        }
25845    }
25846}
25847unsafe impl<'a> TaggedStructure for AccelerationStructureMemoryRequirementsInfoNV<'a> {
25848    const STRUCTURE_TYPE: StructureType =
25849        StructureType::ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV;
25850}
25851impl<'a> AccelerationStructureMemoryRequirementsInfoNV<'a> {
25852    #[inline]
25853    pub fn ty(mut self, ty: AccelerationStructureMemoryRequirementsTypeNV) -> Self {
25854        self.ty = ty;
25855        self
25856    }
25857    #[inline]
25858    pub fn acceleration_structure(
25859        mut self,
25860        acceleration_structure: AccelerationStructureNV,
25861    ) -> Self {
25862        self.acceleration_structure = acceleration_structure;
25863        self
25864    }
25865}
25866#[repr(C)]
25867#[cfg_attr(feature = "debug", derive(Debug))]
25868#[derive(Copy, Clone)]
25869#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAccelerationStructureFeaturesKHR.html>"]
25870#[must_use]
25871pub struct PhysicalDeviceAccelerationStructureFeaturesKHR<'a> {
25872    pub s_type: StructureType,
25873    pub p_next: *mut c_void,
25874    pub acceleration_structure: Bool32,
25875    pub acceleration_structure_capture_replay: Bool32,
25876    pub acceleration_structure_indirect_build: Bool32,
25877    pub acceleration_structure_host_commands: Bool32,
25878    pub descriptor_binding_acceleration_structure_update_after_bind: Bool32,
25879    pub _marker: PhantomData<&'a ()>,
25880}
25881unsafe impl Send for PhysicalDeviceAccelerationStructureFeaturesKHR<'_> {}
25882unsafe impl Sync for PhysicalDeviceAccelerationStructureFeaturesKHR<'_> {}
25883impl ::core::default::Default for PhysicalDeviceAccelerationStructureFeaturesKHR<'_> {
25884    #[inline]
25885    fn default() -> Self {
25886        Self {
25887            s_type: Self::STRUCTURE_TYPE,
25888            p_next: ::core::ptr::null_mut(),
25889            acceleration_structure: Bool32::default(),
25890            acceleration_structure_capture_replay: Bool32::default(),
25891            acceleration_structure_indirect_build: Bool32::default(),
25892            acceleration_structure_host_commands: Bool32::default(),
25893            descriptor_binding_acceleration_structure_update_after_bind: Bool32::default(),
25894            _marker: PhantomData,
25895        }
25896    }
25897}
25898unsafe impl<'a> TaggedStructure for PhysicalDeviceAccelerationStructureFeaturesKHR<'a> {
25899    const STRUCTURE_TYPE: StructureType =
25900        StructureType::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR;
25901}
25902unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceAccelerationStructureFeaturesKHR<'_> {}
25903unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceAccelerationStructureFeaturesKHR<'_> {}
25904impl<'a> PhysicalDeviceAccelerationStructureFeaturesKHR<'a> {
25905    #[inline]
25906    pub fn acceleration_structure(mut self, acceleration_structure: bool) -> Self {
25907        self.acceleration_structure = acceleration_structure.into();
25908        self
25909    }
25910    #[inline]
25911    pub fn acceleration_structure_capture_replay(
25912        mut self,
25913        acceleration_structure_capture_replay: bool,
25914    ) -> Self {
25915        self.acceleration_structure_capture_replay = acceleration_structure_capture_replay.into();
25916        self
25917    }
25918    #[inline]
25919    pub fn acceleration_structure_indirect_build(
25920        mut self,
25921        acceleration_structure_indirect_build: bool,
25922    ) -> Self {
25923        self.acceleration_structure_indirect_build = acceleration_structure_indirect_build.into();
25924        self
25925    }
25926    #[inline]
25927    pub fn acceleration_structure_host_commands(
25928        mut self,
25929        acceleration_structure_host_commands: bool,
25930    ) -> Self {
25931        self.acceleration_structure_host_commands = acceleration_structure_host_commands.into();
25932        self
25933    }
25934    #[inline]
25935    pub fn descriptor_binding_acceleration_structure_update_after_bind(
25936        mut self,
25937        descriptor_binding_acceleration_structure_update_after_bind: bool,
25938    ) -> Self {
25939        self.descriptor_binding_acceleration_structure_update_after_bind =
25940            descriptor_binding_acceleration_structure_update_after_bind.into();
25941        self
25942    }
25943}
25944#[repr(C)]
25945#[cfg_attr(feature = "debug", derive(Debug))]
25946#[derive(Copy, Clone)]
25947#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.html>"]
25948#[must_use]
25949pub struct PhysicalDeviceRayTracingPipelineFeaturesKHR<'a> {
25950    pub s_type: StructureType,
25951    pub p_next: *mut c_void,
25952    pub ray_tracing_pipeline: Bool32,
25953    pub ray_tracing_pipeline_shader_group_handle_capture_replay: Bool32,
25954    pub ray_tracing_pipeline_shader_group_handle_capture_replay_mixed: Bool32,
25955    pub ray_tracing_pipeline_trace_rays_indirect: Bool32,
25956    pub ray_traversal_primitive_culling: Bool32,
25957    pub _marker: PhantomData<&'a ()>,
25958}
25959unsafe impl Send for PhysicalDeviceRayTracingPipelineFeaturesKHR<'_> {}
25960unsafe impl Sync for PhysicalDeviceRayTracingPipelineFeaturesKHR<'_> {}
25961impl ::core::default::Default for PhysicalDeviceRayTracingPipelineFeaturesKHR<'_> {
25962    #[inline]
25963    fn default() -> Self {
25964        Self {
25965            s_type: Self::STRUCTURE_TYPE,
25966            p_next: ::core::ptr::null_mut(),
25967            ray_tracing_pipeline: Bool32::default(),
25968            ray_tracing_pipeline_shader_group_handle_capture_replay: Bool32::default(),
25969            ray_tracing_pipeline_shader_group_handle_capture_replay_mixed: Bool32::default(),
25970            ray_tracing_pipeline_trace_rays_indirect: Bool32::default(),
25971            ray_traversal_primitive_culling: Bool32::default(),
25972            _marker: PhantomData,
25973        }
25974    }
25975}
25976unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingPipelineFeaturesKHR<'a> {
25977    const STRUCTURE_TYPE: StructureType =
25978        StructureType::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR;
25979}
25980unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRayTracingPipelineFeaturesKHR<'_> {}
25981unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingPipelineFeaturesKHR<'_> {}
25982impl<'a> PhysicalDeviceRayTracingPipelineFeaturesKHR<'a> {
25983    #[inline]
25984    pub fn ray_tracing_pipeline(mut self, ray_tracing_pipeline: bool) -> Self {
25985        self.ray_tracing_pipeline = ray_tracing_pipeline.into();
25986        self
25987    }
25988    #[inline]
25989    pub fn ray_tracing_pipeline_shader_group_handle_capture_replay(
25990        mut self,
25991        ray_tracing_pipeline_shader_group_handle_capture_replay: bool,
25992    ) -> Self {
25993        self.ray_tracing_pipeline_shader_group_handle_capture_replay =
25994            ray_tracing_pipeline_shader_group_handle_capture_replay.into();
25995        self
25996    }
25997    #[inline]
25998    pub fn ray_tracing_pipeline_shader_group_handle_capture_replay_mixed(
25999        mut self,
26000        ray_tracing_pipeline_shader_group_handle_capture_replay_mixed: bool,
26001    ) -> Self {
26002        self.ray_tracing_pipeline_shader_group_handle_capture_replay_mixed =
26003            ray_tracing_pipeline_shader_group_handle_capture_replay_mixed.into();
26004        self
26005    }
26006    #[inline]
26007    pub fn ray_tracing_pipeline_trace_rays_indirect(
26008        mut self,
26009        ray_tracing_pipeline_trace_rays_indirect: bool,
26010    ) -> Self {
26011        self.ray_tracing_pipeline_trace_rays_indirect =
26012            ray_tracing_pipeline_trace_rays_indirect.into();
26013        self
26014    }
26015    #[inline]
26016    pub fn ray_traversal_primitive_culling(
26017        mut self,
26018        ray_traversal_primitive_culling: bool,
26019    ) -> Self {
26020        self.ray_traversal_primitive_culling = ray_traversal_primitive_culling.into();
26021        self
26022    }
26023}
26024#[repr(C)]
26025#[cfg_attr(feature = "debug", derive(Debug))]
26026#[derive(Copy, Clone)]
26027#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayQueryFeaturesKHR.html>"]
26028#[must_use]
26029pub struct PhysicalDeviceRayQueryFeaturesKHR<'a> {
26030    pub s_type: StructureType,
26031    pub p_next: *mut c_void,
26032    pub ray_query: Bool32,
26033    pub _marker: PhantomData<&'a ()>,
26034}
26035unsafe impl Send for PhysicalDeviceRayQueryFeaturesKHR<'_> {}
26036unsafe impl Sync for PhysicalDeviceRayQueryFeaturesKHR<'_> {}
26037impl ::core::default::Default for PhysicalDeviceRayQueryFeaturesKHR<'_> {
26038    #[inline]
26039    fn default() -> Self {
26040        Self {
26041            s_type: Self::STRUCTURE_TYPE,
26042            p_next: ::core::ptr::null_mut(),
26043            ray_query: Bool32::default(),
26044            _marker: PhantomData,
26045        }
26046    }
26047}
26048unsafe impl<'a> TaggedStructure for PhysicalDeviceRayQueryFeaturesKHR<'a> {
26049    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR;
26050}
26051unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRayQueryFeaturesKHR<'_> {}
26052unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayQueryFeaturesKHR<'_> {}
26053impl<'a> PhysicalDeviceRayQueryFeaturesKHR<'a> {
26054    #[inline]
26055    pub fn ray_query(mut self, ray_query: bool) -> Self {
26056        self.ray_query = ray_query.into();
26057        self
26058    }
26059}
26060#[repr(C)]
26061#[cfg_attr(feature = "debug", derive(Debug))]
26062#[derive(Copy, Clone)]
26063#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAccelerationStructurePropertiesKHR.html>"]
26064#[must_use]
26065pub struct PhysicalDeviceAccelerationStructurePropertiesKHR<'a> {
26066    pub s_type: StructureType,
26067    pub p_next: *mut c_void,
26068    pub max_geometry_count: u64,
26069    pub max_instance_count: u64,
26070    pub max_primitive_count: u64,
26071    pub max_per_stage_descriptor_acceleration_structures: u32,
26072    pub max_per_stage_descriptor_update_after_bind_acceleration_structures: u32,
26073    pub max_descriptor_set_acceleration_structures: u32,
26074    pub max_descriptor_set_update_after_bind_acceleration_structures: u32,
26075    pub min_acceleration_structure_scratch_offset_alignment: u32,
26076    pub _marker: PhantomData<&'a ()>,
26077}
26078unsafe impl Send for PhysicalDeviceAccelerationStructurePropertiesKHR<'_> {}
26079unsafe impl Sync for PhysicalDeviceAccelerationStructurePropertiesKHR<'_> {}
26080impl ::core::default::Default for PhysicalDeviceAccelerationStructurePropertiesKHR<'_> {
26081    #[inline]
26082    fn default() -> Self {
26083        Self {
26084            s_type: Self::STRUCTURE_TYPE,
26085            p_next: ::core::ptr::null_mut(),
26086            max_geometry_count: u64::default(),
26087            max_instance_count: u64::default(),
26088            max_primitive_count: u64::default(),
26089            max_per_stage_descriptor_acceleration_structures: u32::default(),
26090            max_per_stage_descriptor_update_after_bind_acceleration_structures: u32::default(),
26091            max_descriptor_set_acceleration_structures: u32::default(),
26092            max_descriptor_set_update_after_bind_acceleration_structures: u32::default(),
26093            min_acceleration_structure_scratch_offset_alignment: u32::default(),
26094            _marker: PhantomData,
26095        }
26096    }
26097}
26098unsafe impl<'a> TaggedStructure for PhysicalDeviceAccelerationStructurePropertiesKHR<'a> {
26099    const STRUCTURE_TYPE: StructureType =
26100        StructureType::PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR;
26101}
26102unsafe impl ExtendsPhysicalDeviceProperties2
26103    for PhysicalDeviceAccelerationStructurePropertiesKHR<'_>
26104{
26105}
26106impl<'a> PhysicalDeviceAccelerationStructurePropertiesKHR<'a> {
26107    #[inline]
26108    pub fn max_geometry_count(mut self, max_geometry_count: u64) -> Self {
26109        self.max_geometry_count = max_geometry_count;
26110        self
26111    }
26112    #[inline]
26113    pub fn max_instance_count(mut self, max_instance_count: u64) -> Self {
26114        self.max_instance_count = max_instance_count;
26115        self
26116    }
26117    #[inline]
26118    pub fn max_primitive_count(mut self, max_primitive_count: u64) -> Self {
26119        self.max_primitive_count = max_primitive_count;
26120        self
26121    }
26122    #[inline]
26123    pub fn max_per_stage_descriptor_acceleration_structures(
26124        mut self,
26125        max_per_stage_descriptor_acceleration_structures: u32,
26126    ) -> Self {
26127        self.max_per_stage_descriptor_acceleration_structures =
26128            max_per_stage_descriptor_acceleration_structures;
26129        self
26130    }
26131    #[inline]
26132    pub fn max_per_stage_descriptor_update_after_bind_acceleration_structures(
26133        mut self,
26134        max_per_stage_descriptor_update_after_bind_acceleration_structures: u32,
26135    ) -> Self {
26136        self.max_per_stage_descriptor_update_after_bind_acceleration_structures =
26137            max_per_stage_descriptor_update_after_bind_acceleration_structures;
26138        self
26139    }
26140    #[inline]
26141    pub fn max_descriptor_set_acceleration_structures(
26142        mut self,
26143        max_descriptor_set_acceleration_structures: u32,
26144    ) -> Self {
26145        self.max_descriptor_set_acceleration_structures =
26146            max_descriptor_set_acceleration_structures;
26147        self
26148    }
26149    #[inline]
26150    pub fn max_descriptor_set_update_after_bind_acceleration_structures(
26151        mut self,
26152        max_descriptor_set_update_after_bind_acceleration_structures: u32,
26153    ) -> Self {
26154        self.max_descriptor_set_update_after_bind_acceleration_structures =
26155            max_descriptor_set_update_after_bind_acceleration_structures;
26156        self
26157    }
26158    #[inline]
26159    pub fn min_acceleration_structure_scratch_offset_alignment(
26160        mut self,
26161        min_acceleration_structure_scratch_offset_alignment: u32,
26162    ) -> Self {
26163        self.min_acceleration_structure_scratch_offset_alignment =
26164            min_acceleration_structure_scratch_offset_alignment;
26165        self
26166    }
26167}
26168#[repr(C)]
26169#[cfg_attr(feature = "debug", derive(Debug))]
26170#[derive(Copy, Clone)]
26171#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingPipelinePropertiesKHR.html>"]
26172#[must_use]
26173pub struct PhysicalDeviceRayTracingPipelinePropertiesKHR<'a> {
26174    pub s_type: StructureType,
26175    pub p_next: *mut c_void,
26176    pub shader_group_handle_size: u32,
26177    pub max_ray_recursion_depth: u32,
26178    pub max_shader_group_stride: u32,
26179    pub shader_group_base_alignment: u32,
26180    pub shader_group_handle_capture_replay_size: u32,
26181    pub max_ray_dispatch_invocation_count: u32,
26182    pub shader_group_handle_alignment: u32,
26183    pub max_ray_hit_attribute_size: u32,
26184    pub _marker: PhantomData<&'a ()>,
26185}
26186unsafe impl Send for PhysicalDeviceRayTracingPipelinePropertiesKHR<'_> {}
26187unsafe impl Sync for PhysicalDeviceRayTracingPipelinePropertiesKHR<'_> {}
26188impl ::core::default::Default for PhysicalDeviceRayTracingPipelinePropertiesKHR<'_> {
26189    #[inline]
26190    fn default() -> Self {
26191        Self {
26192            s_type: Self::STRUCTURE_TYPE,
26193            p_next: ::core::ptr::null_mut(),
26194            shader_group_handle_size: u32::default(),
26195            max_ray_recursion_depth: u32::default(),
26196            max_shader_group_stride: u32::default(),
26197            shader_group_base_alignment: u32::default(),
26198            shader_group_handle_capture_replay_size: u32::default(),
26199            max_ray_dispatch_invocation_count: u32::default(),
26200            shader_group_handle_alignment: u32::default(),
26201            max_ray_hit_attribute_size: u32::default(),
26202            _marker: PhantomData,
26203        }
26204    }
26205}
26206unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingPipelinePropertiesKHR<'a> {
26207    const STRUCTURE_TYPE: StructureType =
26208        StructureType::PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR;
26209}
26210unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceRayTracingPipelinePropertiesKHR<'_> {}
26211impl<'a> PhysicalDeviceRayTracingPipelinePropertiesKHR<'a> {
26212    #[inline]
26213    pub fn shader_group_handle_size(mut self, shader_group_handle_size: u32) -> Self {
26214        self.shader_group_handle_size = shader_group_handle_size;
26215        self
26216    }
26217    #[inline]
26218    pub fn max_ray_recursion_depth(mut self, max_ray_recursion_depth: u32) -> Self {
26219        self.max_ray_recursion_depth = max_ray_recursion_depth;
26220        self
26221    }
26222    #[inline]
26223    pub fn max_shader_group_stride(mut self, max_shader_group_stride: u32) -> Self {
26224        self.max_shader_group_stride = max_shader_group_stride;
26225        self
26226    }
26227    #[inline]
26228    pub fn shader_group_base_alignment(mut self, shader_group_base_alignment: u32) -> Self {
26229        self.shader_group_base_alignment = shader_group_base_alignment;
26230        self
26231    }
26232    #[inline]
26233    pub fn shader_group_handle_capture_replay_size(
26234        mut self,
26235        shader_group_handle_capture_replay_size: u32,
26236    ) -> Self {
26237        self.shader_group_handle_capture_replay_size = shader_group_handle_capture_replay_size;
26238        self
26239    }
26240    #[inline]
26241    pub fn max_ray_dispatch_invocation_count(
26242        mut self,
26243        max_ray_dispatch_invocation_count: u32,
26244    ) -> Self {
26245        self.max_ray_dispatch_invocation_count = max_ray_dispatch_invocation_count;
26246        self
26247    }
26248    #[inline]
26249    pub fn shader_group_handle_alignment(mut self, shader_group_handle_alignment: u32) -> Self {
26250        self.shader_group_handle_alignment = shader_group_handle_alignment;
26251        self
26252    }
26253    #[inline]
26254    pub fn max_ray_hit_attribute_size(mut self, max_ray_hit_attribute_size: u32) -> Self {
26255        self.max_ray_hit_attribute_size = max_ray_hit_attribute_size;
26256        self
26257    }
26258}
26259#[repr(C)]
26260#[cfg_attr(feature = "debug", derive(Debug))]
26261#[derive(Copy, Clone)]
26262#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingPropertiesNV.html>"]
26263#[must_use]
26264pub struct PhysicalDeviceRayTracingPropertiesNV<'a> {
26265    pub s_type: StructureType,
26266    pub p_next: *mut c_void,
26267    pub shader_group_handle_size: u32,
26268    pub max_recursion_depth: u32,
26269    pub max_shader_group_stride: u32,
26270    pub shader_group_base_alignment: u32,
26271    pub max_geometry_count: u64,
26272    pub max_instance_count: u64,
26273    pub max_triangle_count: u64,
26274    pub max_descriptor_set_acceleration_structures: u32,
26275    pub _marker: PhantomData<&'a ()>,
26276}
26277unsafe impl Send for PhysicalDeviceRayTracingPropertiesNV<'_> {}
26278unsafe impl Sync for PhysicalDeviceRayTracingPropertiesNV<'_> {}
26279impl ::core::default::Default for PhysicalDeviceRayTracingPropertiesNV<'_> {
26280    #[inline]
26281    fn default() -> Self {
26282        Self {
26283            s_type: Self::STRUCTURE_TYPE,
26284            p_next: ::core::ptr::null_mut(),
26285            shader_group_handle_size: u32::default(),
26286            max_recursion_depth: u32::default(),
26287            max_shader_group_stride: u32::default(),
26288            shader_group_base_alignment: u32::default(),
26289            max_geometry_count: u64::default(),
26290            max_instance_count: u64::default(),
26291            max_triangle_count: u64::default(),
26292            max_descriptor_set_acceleration_structures: u32::default(),
26293            _marker: PhantomData,
26294        }
26295    }
26296}
26297unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingPropertiesNV<'a> {
26298    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV;
26299}
26300unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceRayTracingPropertiesNV<'_> {}
26301impl<'a> PhysicalDeviceRayTracingPropertiesNV<'a> {
26302    #[inline]
26303    pub fn shader_group_handle_size(mut self, shader_group_handle_size: u32) -> Self {
26304        self.shader_group_handle_size = shader_group_handle_size;
26305        self
26306    }
26307    #[inline]
26308    pub fn max_recursion_depth(mut self, max_recursion_depth: u32) -> Self {
26309        self.max_recursion_depth = max_recursion_depth;
26310        self
26311    }
26312    #[inline]
26313    pub fn max_shader_group_stride(mut self, max_shader_group_stride: u32) -> Self {
26314        self.max_shader_group_stride = max_shader_group_stride;
26315        self
26316    }
26317    #[inline]
26318    pub fn shader_group_base_alignment(mut self, shader_group_base_alignment: u32) -> Self {
26319        self.shader_group_base_alignment = shader_group_base_alignment;
26320        self
26321    }
26322    #[inline]
26323    pub fn max_geometry_count(mut self, max_geometry_count: u64) -> Self {
26324        self.max_geometry_count = max_geometry_count;
26325        self
26326    }
26327    #[inline]
26328    pub fn max_instance_count(mut self, max_instance_count: u64) -> Self {
26329        self.max_instance_count = max_instance_count;
26330        self
26331    }
26332    #[inline]
26333    pub fn max_triangle_count(mut self, max_triangle_count: u64) -> Self {
26334        self.max_triangle_count = max_triangle_count;
26335        self
26336    }
26337    #[inline]
26338    pub fn max_descriptor_set_acceleration_structures(
26339        mut self,
26340        max_descriptor_set_acceleration_structures: u32,
26341    ) -> Self {
26342        self.max_descriptor_set_acceleration_structures =
26343            max_descriptor_set_acceleration_structures;
26344        self
26345    }
26346}
26347#[repr(C)]
26348#[cfg_attr(feature = "debug", derive(Debug))]
26349#[derive(Copy, Clone, Default)]
26350#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkStridedDeviceAddressRegionKHR.html>"]
26351#[must_use]
26352pub struct StridedDeviceAddressRegionKHR {
26353    pub device_address: DeviceAddress,
26354    pub stride: DeviceSize,
26355    pub size: DeviceSize,
26356}
26357impl StridedDeviceAddressRegionKHR {
26358    #[inline]
26359    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
26360        self.device_address = device_address;
26361        self
26362    }
26363    #[inline]
26364    pub fn stride(mut self, stride: DeviceSize) -> Self {
26365        self.stride = stride;
26366        self
26367    }
26368    #[inline]
26369    pub fn size(mut self, size: DeviceSize) -> Self {
26370        self.size = size;
26371        self
26372    }
26373}
26374#[repr(C)]
26375#[cfg_attr(feature = "debug", derive(Debug))]
26376#[derive(Copy, Clone, Default)]
26377#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTraceRaysIndirectCommandKHR.html>"]
26378#[must_use]
26379pub struct TraceRaysIndirectCommandKHR {
26380    pub width: u32,
26381    pub height: u32,
26382    pub depth: u32,
26383}
26384impl TraceRaysIndirectCommandKHR {
26385    #[inline]
26386    pub fn width(mut self, width: u32) -> Self {
26387        self.width = width;
26388        self
26389    }
26390    #[inline]
26391    pub fn height(mut self, height: u32) -> Self {
26392        self.height = height;
26393        self
26394    }
26395    #[inline]
26396    pub fn depth(mut self, depth: u32) -> Self {
26397        self.depth = depth;
26398        self
26399    }
26400}
26401#[repr(C)]
26402#[cfg_attr(feature = "debug", derive(Debug))]
26403#[derive(Copy, Clone, Default)]
26404#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTraceRaysIndirectCommand2KHR.html>"]
26405#[must_use]
26406pub struct TraceRaysIndirectCommand2KHR {
26407    pub raygen_shader_record_address: DeviceAddress,
26408    pub raygen_shader_record_size: DeviceSize,
26409    pub miss_shader_binding_table_address: DeviceAddress,
26410    pub miss_shader_binding_table_size: DeviceSize,
26411    pub miss_shader_binding_table_stride: DeviceSize,
26412    pub hit_shader_binding_table_address: DeviceAddress,
26413    pub hit_shader_binding_table_size: DeviceSize,
26414    pub hit_shader_binding_table_stride: DeviceSize,
26415    pub callable_shader_binding_table_address: DeviceAddress,
26416    pub callable_shader_binding_table_size: DeviceSize,
26417    pub callable_shader_binding_table_stride: DeviceSize,
26418    pub width: u32,
26419    pub height: u32,
26420    pub depth: u32,
26421}
26422impl TraceRaysIndirectCommand2KHR {
26423    #[inline]
26424    pub fn raygen_shader_record_address(
26425        mut self,
26426        raygen_shader_record_address: DeviceAddress,
26427    ) -> Self {
26428        self.raygen_shader_record_address = raygen_shader_record_address;
26429        self
26430    }
26431    #[inline]
26432    pub fn raygen_shader_record_size(mut self, raygen_shader_record_size: DeviceSize) -> Self {
26433        self.raygen_shader_record_size = raygen_shader_record_size;
26434        self
26435    }
26436    #[inline]
26437    pub fn miss_shader_binding_table_address(
26438        mut self,
26439        miss_shader_binding_table_address: DeviceAddress,
26440    ) -> Self {
26441        self.miss_shader_binding_table_address = miss_shader_binding_table_address;
26442        self
26443    }
26444    #[inline]
26445    pub fn miss_shader_binding_table_size(
26446        mut self,
26447        miss_shader_binding_table_size: DeviceSize,
26448    ) -> Self {
26449        self.miss_shader_binding_table_size = miss_shader_binding_table_size;
26450        self
26451    }
26452    #[inline]
26453    pub fn miss_shader_binding_table_stride(
26454        mut self,
26455        miss_shader_binding_table_stride: DeviceSize,
26456    ) -> Self {
26457        self.miss_shader_binding_table_stride = miss_shader_binding_table_stride;
26458        self
26459    }
26460    #[inline]
26461    pub fn hit_shader_binding_table_address(
26462        mut self,
26463        hit_shader_binding_table_address: DeviceAddress,
26464    ) -> Self {
26465        self.hit_shader_binding_table_address = hit_shader_binding_table_address;
26466        self
26467    }
26468    #[inline]
26469    pub fn hit_shader_binding_table_size(
26470        mut self,
26471        hit_shader_binding_table_size: DeviceSize,
26472    ) -> Self {
26473        self.hit_shader_binding_table_size = hit_shader_binding_table_size;
26474        self
26475    }
26476    #[inline]
26477    pub fn hit_shader_binding_table_stride(
26478        mut self,
26479        hit_shader_binding_table_stride: DeviceSize,
26480    ) -> Self {
26481        self.hit_shader_binding_table_stride = hit_shader_binding_table_stride;
26482        self
26483    }
26484    #[inline]
26485    pub fn callable_shader_binding_table_address(
26486        mut self,
26487        callable_shader_binding_table_address: DeviceAddress,
26488    ) -> Self {
26489        self.callable_shader_binding_table_address = callable_shader_binding_table_address;
26490        self
26491    }
26492    #[inline]
26493    pub fn callable_shader_binding_table_size(
26494        mut self,
26495        callable_shader_binding_table_size: DeviceSize,
26496    ) -> Self {
26497        self.callable_shader_binding_table_size = callable_shader_binding_table_size;
26498        self
26499    }
26500    #[inline]
26501    pub fn callable_shader_binding_table_stride(
26502        mut self,
26503        callable_shader_binding_table_stride: DeviceSize,
26504    ) -> Self {
26505        self.callable_shader_binding_table_stride = callable_shader_binding_table_stride;
26506        self
26507    }
26508    #[inline]
26509    pub fn width(mut self, width: u32) -> Self {
26510        self.width = width;
26511        self
26512    }
26513    #[inline]
26514    pub fn height(mut self, height: u32) -> Self {
26515        self.height = height;
26516        self
26517    }
26518    #[inline]
26519    pub fn depth(mut self, depth: u32) -> Self {
26520        self.depth = depth;
26521        self
26522    }
26523}
26524#[repr(C)]
26525#[cfg_attr(feature = "debug", derive(Debug))]
26526#[derive(Copy, Clone)]
26527#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.html>"]
26528#[must_use]
26529pub struct PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'a> {
26530    pub s_type: StructureType,
26531    pub p_next: *mut c_void,
26532    pub ray_tracing_maintenance1: Bool32,
26533    pub ray_tracing_pipeline_trace_rays_indirect2: Bool32,
26534    pub _marker: PhantomData<&'a ()>,
26535}
26536unsafe impl Send for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'_> {}
26537unsafe impl Sync for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'_> {}
26538impl ::core::default::Default for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'_> {
26539    #[inline]
26540    fn default() -> Self {
26541        Self {
26542            s_type: Self::STRUCTURE_TYPE,
26543            p_next: ::core::ptr::null_mut(),
26544            ray_tracing_maintenance1: Bool32::default(),
26545            ray_tracing_pipeline_trace_rays_indirect2: Bool32::default(),
26546            _marker: PhantomData,
26547        }
26548    }
26549}
26550unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'a> {
26551    const STRUCTURE_TYPE: StructureType =
26552        StructureType::PHYSICAL_DEVICE_RAY_TRACING_MAINTENANCE_1_FEATURES_KHR;
26553}
26554unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'_> {}
26555unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'_> {}
26556impl<'a> PhysicalDeviceRayTracingMaintenance1FeaturesKHR<'a> {
26557    #[inline]
26558    pub fn ray_tracing_maintenance1(mut self, ray_tracing_maintenance1: bool) -> Self {
26559        self.ray_tracing_maintenance1 = ray_tracing_maintenance1.into();
26560        self
26561    }
26562    #[inline]
26563    pub fn ray_tracing_pipeline_trace_rays_indirect2(
26564        mut self,
26565        ray_tracing_pipeline_trace_rays_indirect2: bool,
26566    ) -> Self {
26567        self.ray_tracing_pipeline_trace_rays_indirect2 =
26568            ray_tracing_pipeline_trace_rays_indirect2.into();
26569        self
26570    }
26571}
26572#[repr(C)]
26573#[cfg_attr(feature = "debug", derive(Debug))]
26574#[derive(Copy, Clone)]
26575#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrmFormatModifierPropertiesListEXT.html>"]
26576#[must_use]
26577pub struct DrmFormatModifierPropertiesListEXT<'a> {
26578    pub s_type: StructureType,
26579    pub p_next: *mut c_void,
26580    pub drm_format_modifier_count: u32,
26581    pub p_drm_format_modifier_properties: *mut DrmFormatModifierPropertiesEXT,
26582    pub _marker: PhantomData<&'a ()>,
26583}
26584unsafe impl Send for DrmFormatModifierPropertiesListEXT<'_> {}
26585unsafe impl Sync for DrmFormatModifierPropertiesListEXT<'_> {}
26586impl ::core::default::Default for DrmFormatModifierPropertiesListEXT<'_> {
26587    #[inline]
26588    fn default() -> Self {
26589        Self {
26590            s_type: Self::STRUCTURE_TYPE,
26591            p_next: ::core::ptr::null_mut(),
26592            drm_format_modifier_count: u32::default(),
26593            p_drm_format_modifier_properties: ::core::ptr::null_mut(),
26594            _marker: PhantomData,
26595        }
26596    }
26597}
26598unsafe impl<'a> TaggedStructure for DrmFormatModifierPropertiesListEXT<'a> {
26599    const STRUCTURE_TYPE: StructureType = StructureType::DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT;
26600}
26601unsafe impl ExtendsFormatProperties2 for DrmFormatModifierPropertiesListEXT<'_> {}
26602impl<'a> DrmFormatModifierPropertiesListEXT<'a> {
26603    #[inline]
26604    pub fn drm_format_modifier_properties(
26605        mut self,
26606        drm_format_modifier_properties: &'a mut [DrmFormatModifierPropertiesEXT],
26607    ) -> Self {
26608        self.drm_format_modifier_count = drm_format_modifier_properties.len() as _;
26609        self.p_drm_format_modifier_properties = drm_format_modifier_properties.as_mut_ptr();
26610        self
26611    }
26612}
26613#[repr(C)]
26614#[cfg_attr(feature = "debug", derive(Debug))]
26615#[derive(Copy, Clone, Default)]
26616#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrmFormatModifierPropertiesEXT.html>"]
26617#[must_use]
26618pub struct DrmFormatModifierPropertiesEXT {
26619    pub drm_format_modifier: u64,
26620    pub drm_format_modifier_plane_count: u32,
26621    pub drm_format_modifier_tiling_features: FormatFeatureFlags,
26622}
26623impl DrmFormatModifierPropertiesEXT {
26624    #[inline]
26625    pub fn drm_format_modifier(mut self, drm_format_modifier: u64) -> Self {
26626        self.drm_format_modifier = drm_format_modifier;
26627        self
26628    }
26629    #[inline]
26630    pub fn drm_format_modifier_plane_count(mut self, drm_format_modifier_plane_count: u32) -> Self {
26631        self.drm_format_modifier_plane_count = drm_format_modifier_plane_count;
26632        self
26633    }
26634    #[inline]
26635    pub fn drm_format_modifier_tiling_features(
26636        mut self,
26637        drm_format_modifier_tiling_features: FormatFeatureFlags,
26638    ) -> Self {
26639        self.drm_format_modifier_tiling_features = drm_format_modifier_tiling_features;
26640        self
26641    }
26642}
26643#[repr(C)]
26644#[cfg_attr(feature = "debug", derive(Debug))]
26645#[derive(Copy, Clone)]
26646#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageDrmFormatModifierInfoEXT.html>"]
26647#[must_use]
26648pub struct PhysicalDeviceImageDrmFormatModifierInfoEXT<'a> {
26649    pub s_type: StructureType,
26650    pub p_next: *const c_void,
26651    pub drm_format_modifier: u64,
26652    pub sharing_mode: SharingMode,
26653    pub queue_family_index_count: u32,
26654    pub p_queue_family_indices: *const u32,
26655    pub _marker: PhantomData<&'a ()>,
26656}
26657unsafe impl Send for PhysicalDeviceImageDrmFormatModifierInfoEXT<'_> {}
26658unsafe impl Sync for PhysicalDeviceImageDrmFormatModifierInfoEXT<'_> {}
26659impl ::core::default::Default for PhysicalDeviceImageDrmFormatModifierInfoEXT<'_> {
26660    #[inline]
26661    fn default() -> Self {
26662        Self {
26663            s_type: Self::STRUCTURE_TYPE,
26664            p_next: ::core::ptr::null(),
26665            drm_format_modifier: u64::default(),
26666            sharing_mode: SharingMode::default(),
26667            queue_family_index_count: u32::default(),
26668            p_queue_family_indices: ::core::ptr::null(),
26669            _marker: PhantomData,
26670        }
26671    }
26672}
26673unsafe impl<'a> TaggedStructure for PhysicalDeviceImageDrmFormatModifierInfoEXT<'a> {
26674    const STRUCTURE_TYPE: StructureType =
26675        StructureType::PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT;
26676}
26677unsafe impl ExtendsPhysicalDeviceImageFormatInfo2
26678    for PhysicalDeviceImageDrmFormatModifierInfoEXT<'_>
26679{
26680}
26681impl<'a> PhysicalDeviceImageDrmFormatModifierInfoEXT<'a> {
26682    #[inline]
26683    pub fn drm_format_modifier(mut self, drm_format_modifier: u64) -> Self {
26684        self.drm_format_modifier = drm_format_modifier;
26685        self
26686    }
26687    #[inline]
26688    pub fn sharing_mode(mut self, sharing_mode: SharingMode) -> Self {
26689        self.sharing_mode = sharing_mode;
26690        self
26691    }
26692    #[inline]
26693    pub fn queue_family_indices(mut self, queue_family_indices: &'a [u32]) -> Self {
26694        self.queue_family_index_count = queue_family_indices.len() as _;
26695        self.p_queue_family_indices = queue_family_indices.as_ptr();
26696        self
26697    }
26698}
26699#[repr(C)]
26700#[cfg_attr(feature = "debug", derive(Debug))]
26701#[derive(Copy, Clone)]
26702#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageDrmFormatModifierListCreateInfoEXT.html>"]
26703#[must_use]
26704pub struct ImageDrmFormatModifierListCreateInfoEXT<'a> {
26705    pub s_type: StructureType,
26706    pub p_next: *const c_void,
26707    pub drm_format_modifier_count: u32,
26708    pub p_drm_format_modifiers: *const u64,
26709    pub _marker: PhantomData<&'a ()>,
26710}
26711unsafe impl Send for ImageDrmFormatModifierListCreateInfoEXT<'_> {}
26712unsafe impl Sync for ImageDrmFormatModifierListCreateInfoEXT<'_> {}
26713impl ::core::default::Default for ImageDrmFormatModifierListCreateInfoEXT<'_> {
26714    #[inline]
26715    fn default() -> Self {
26716        Self {
26717            s_type: Self::STRUCTURE_TYPE,
26718            p_next: ::core::ptr::null(),
26719            drm_format_modifier_count: u32::default(),
26720            p_drm_format_modifiers: ::core::ptr::null(),
26721            _marker: PhantomData,
26722        }
26723    }
26724}
26725unsafe impl<'a> TaggedStructure for ImageDrmFormatModifierListCreateInfoEXT<'a> {
26726    const STRUCTURE_TYPE: StructureType =
26727        StructureType::IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT;
26728}
26729unsafe impl ExtendsImageCreateInfo for ImageDrmFormatModifierListCreateInfoEXT<'_> {}
26730impl<'a> ImageDrmFormatModifierListCreateInfoEXT<'a> {
26731    #[inline]
26732    pub fn drm_format_modifiers(mut self, drm_format_modifiers: &'a [u64]) -> Self {
26733        self.drm_format_modifier_count = drm_format_modifiers.len() as _;
26734        self.p_drm_format_modifiers = drm_format_modifiers.as_ptr();
26735        self
26736    }
26737}
26738#[repr(C)]
26739#[cfg_attr(feature = "debug", derive(Debug))]
26740#[derive(Copy, Clone)]
26741#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageDrmFormatModifierExplicitCreateInfoEXT.html>"]
26742#[must_use]
26743pub struct ImageDrmFormatModifierExplicitCreateInfoEXT<'a> {
26744    pub s_type: StructureType,
26745    pub p_next: *const c_void,
26746    pub drm_format_modifier: u64,
26747    pub drm_format_modifier_plane_count: u32,
26748    pub p_plane_layouts: *const SubresourceLayout,
26749    pub _marker: PhantomData<&'a ()>,
26750}
26751unsafe impl Send for ImageDrmFormatModifierExplicitCreateInfoEXT<'_> {}
26752unsafe impl Sync for ImageDrmFormatModifierExplicitCreateInfoEXT<'_> {}
26753impl ::core::default::Default for ImageDrmFormatModifierExplicitCreateInfoEXT<'_> {
26754    #[inline]
26755    fn default() -> Self {
26756        Self {
26757            s_type: Self::STRUCTURE_TYPE,
26758            p_next: ::core::ptr::null(),
26759            drm_format_modifier: u64::default(),
26760            drm_format_modifier_plane_count: u32::default(),
26761            p_plane_layouts: ::core::ptr::null(),
26762            _marker: PhantomData,
26763        }
26764    }
26765}
26766unsafe impl<'a> TaggedStructure for ImageDrmFormatModifierExplicitCreateInfoEXT<'a> {
26767    const STRUCTURE_TYPE: StructureType =
26768        StructureType::IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT;
26769}
26770unsafe impl ExtendsImageCreateInfo for ImageDrmFormatModifierExplicitCreateInfoEXT<'_> {}
26771impl<'a> ImageDrmFormatModifierExplicitCreateInfoEXT<'a> {
26772    #[inline]
26773    pub fn drm_format_modifier(mut self, drm_format_modifier: u64) -> Self {
26774        self.drm_format_modifier = drm_format_modifier;
26775        self
26776    }
26777    #[inline]
26778    pub fn plane_layouts(mut self, plane_layouts: &'a [SubresourceLayout]) -> Self {
26779        self.drm_format_modifier_plane_count = plane_layouts.len() as _;
26780        self.p_plane_layouts = plane_layouts.as_ptr();
26781        self
26782    }
26783}
26784#[repr(C)]
26785#[cfg_attr(feature = "debug", derive(Debug))]
26786#[derive(Copy, Clone)]
26787#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageDrmFormatModifierPropertiesEXT.html>"]
26788#[must_use]
26789pub struct ImageDrmFormatModifierPropertiesEXT<'a> {
26790    pub s_type: StructureType,
26791    pub p_next: *mut c_void,
26792    pub drm_format_modifier: u64,
26793    pub _marker: PhantomData<&'a ()>,
26794}
26795unsafe impl Send for ImageDrmFormatModifierPropertiesEXT<'_> {}
26796unsafe impl Sync for ImageDrmFormatModifierPropertiesEXT<'_> {}
26797impl ::core::default::Default for ImageDrmFormatModifierPropertiesEXT<'_> {
26798    #[inline]
26799    fn default() -> Self {
26800        Self {
26801            s_type: Self::STRUCTURE_TYPE,
26802            p_next: ::core::ptr::null_mut(),
26803            drm_format_modifier: u64::default(),
26804            _marker: PhantomData,
26805        }
26806    }
26807}
26808unsafe impl<'a> TaggedStructure for ImageDrmFormatModifierPropertiesEXT<'a> {
26809    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT;
26810}
26811impl<'a> ImageDrmFormatModifierPropertiesEXT<'a> {
26812    #[inline]
26813    pub fn drm_format_modifier(mut self, drm_format_modifier: u64) -> Self {
26814        self.drm_format_modifier = drm_format_modifier;
26815        self
26816    }
26817}
26818#[repr(C)]
26819#[cfg_attr(feature = "debug", derive(Debug))]
26820#[derive(Copy, Clone)]
26821#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageStencilUsageCreateInfo.html>"]
26822#[must_use]
26823pub struct ImageStencilUsageCreateInfo<'a> {
26824    pub s_type: StructureType,
26825    pub p_next: *const c_void,
26826    pub stencil_usage: ImageUsageFlags,
26827    pub _marker: PhantomData<&'a ()>,
26828}
26829unsafe impl Send for ImageStencilUsageCreateInfo<'_> {}
26830unsafe impl Sync for ImageStencilUsageCreateInfo<'_> {}
26831impl ::core::default::Default for ImageStencilUsageCreateInfo<'_> {
26832    #[inline]
26833    fn default() -> Self {
26834        Self {
26835            s_type: Self::STRUCTURE_TYPE,
26836            p_next: ::core::ptr::null(),
26837            stencil_usage: ImageUsageFlags::default(),
26838            _marker: PhantomData,
26839        }
26840    }
26841}
26842unsafe impl<'a> TaggedStructure for ImageStencilUsageCreateInfo<'a> {
26843    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_STENCIL_USAGE_CREATE_INFO;
26844}
26845unsafe impl ExtendsImageCreateInfo for ImageStencilUsageCreateInfo<'_> {}
26846unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for ImageStencilUsageCreateInfo<'_> {}
26847impl<'a> ImageStencilUsageCreateInfo<'a> {
26848    #[inline]
26849    pub fn stencil_usage(mut self, stencil_usage: ImageUsageFlags) -> Self {
26850        self.stencil_usage = stencil_usage;
26851        self
26852    }
26853}
26854#[repr(C)]
26855#[cfg_attr(feature = "debug", derive(Debug))]
26856#[derive(Copy, Clone)]
26857#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceMemoryOverallocationCreateInfoAMD.html>"]
26858#[must_use]
26859pub struct DeviceMemoryOverallocationCreateInfoAMD<'a> {
26860    pub s_type: StructureType,
26861    pub p_next: *const c_void,
26862    pub overallocation_behavior: MemoryOverallocationBehaviorAMD,
26863    pub _marker: PhantomData<&'a ()>,
26864}
26865unsafe impl Send for DeviceMemoryOverallocationCreateInfoAMD<'_> {}
26866unsafe impl Sync for DeviceMemoryOverallocationCreateInfoAMD<'_> {}
26867impl ::core::default::Default for DeviceMemoryOverallocationCreateInfoAMD<'_> {
26868    #[inline]
26869    fn default() -> Self {
26870        Self {
26871            s_type: Self::STRUCTURE_TYPE,
26872            p_next: ::core::ptr::null(),
26873            overallocation_behavior: MemoryOverallocationBehaviorAMD::default(),
26874            _marker: PhantomData,
26875        }
26876    }
26877}
26878unsafe impl<'a> TaggedStructure for DeviceMemoryOverallocationCreateInfoAMD<'a> {
26879    const STRUCTURE_TYPE: StructureType =
26880        StructureType::DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD;
26881}
26882unsafe impl ExtendsDeviceCreateInfo for DeviceMemoryOverallocationCreateInfoAMD<'_> {}
26883impl<'a> DeviceMemoryOverallocationCreateInfoAMD<'a> {
26884    #[inline]
26885    pub fn overallocation_behavior(
26886        mut self,
26887        overallocation_behavior: MemoryOverallocationBehaviorAMD,
26888    ) -> Self {
26889        self.overallocation_behavior = overallocation_behavior;
26890        self
26891    }
26892}
26893#[repr(C)]
26894#[cfg_attr(feature = "debug", derive(Debug))]
26895#[derive(Copy, Clone)]
26896#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMapFeaturesEXT.html>"]
26897#[must_use]
26898pub struct PhysicalDeviceFragmentDensityMapFeaturesEXT<'a> {
26899    pub s_type: StructureType,
26900    pub p_next: *mut c_void,
26901    pub fragment_density_map: Bool32,
26902    pub fragment_density_map_dynamic: Bool32,
26903    pub fragment_density_map_non_subsampled_images: Bool32,
26904    pub _marker: PhantomData<&'a ()>,
26905}
26906unsafe impl Send for PhysicalDeviceFragmentDensityMapFeaturesEXT<'_> {}
26907unsafe impl Sync for PhysicalDeviceFragmentDensityMapFeaturesEXT<'_> {}
26908impl ::core::default::Default for PhysicalDeviceFragmentDensityMapFeaturesEXT<'_> {
26909    #[inline]
26910    fn default() -> Self {
26911        Self {
26912            s_type: Self::STRUCTURE_TYPE,
26913            p_next: ::core::ptr::null_mut(),
26914            fragment_density_map: Bool32::default(),
26915            fragment_density_map_dynamic: Bool32::default(),
26916            fragment_density_map_non_subsampled_images: Bool32::default(),
26917            _marker: PhantomData,
26918        }
26919    }
26920}
26921unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMapFeaturesEXT<'a> {
26922    const STRUCTURE_TYPE: StructureType =
26923        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT;
26924}
26925unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceFragmentDensityMapFeaturesEXT<'_> {}
26926unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentDensityMapFeaturesEXT<'_> {}
26927impl<'a> PhysicalDeviceFragmentDensityMapFeaturesEXT<'a> {
26928    #[inline]
26929    pub fn fragment_density_map(mut self, fragment_density_map: bool) -> Self {
26930        self.fragment_density_map = fragment_density_map.into();
26931        self
26932    }
26933    #[inline]
26934    pub fn fragment_density_map_dynamic(mut self, fragment_density_map_dynamic: bool) -> Self {
26935        self.fragment_density_map_dynamic = fragment_density_map_dynamic.into();
26936        self
26937    }
26938    #[inline]
26939    pub fn fragment_density_map_non_subsampled_images(
26940        mut self,
26941        fragment_density_map_non_subsampled_images: bool,
26942    ) -> Self {
26943        self.fragment_density_map_non_subsampled_images =
26944            fragment_density_map_non_subsampled_images.into();
26945        self
26946    }
26947}
26948#[repr(C)]
26949#[cfg_attr(feature = "debug", derive(Debug))]
26950#[derive(Copy, Clone)]
26951#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMap2FeaturesEXT.html>"]
26952#[must_use]
26953pub struct PhysicalDeviceFragmentDensityMap2FeaturesEXT<'a> {
26954    pub s_type: StructureType,
26955    pub p_next: *mut c_void,
26956    pub fragment_density_map_deferred: Bool32,
26957    pub _marker: PhantomData<&'a ()>,
26958}
26959unsafe impl Send for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'_> {}
26960unsafe impl Sync for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'_> {}
26961impl ::core::default::Default for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'_> {
26962    #[inline]
26963    fn default() -> Self {
26964        Self {
26965            s_type: Self::STRUCTURE_TYPE,
26966            p_next: ::core::ptr::null_mut(),
26967            fragment_density_map_deferred: Bool32::default(),
26968            _marker: PhantomData,
26969        }
26970    }
26971}
26972unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'a> {
26973    const STRUCTURE_TYPE: StructureType =
26974        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT;
26975}
26976unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'_> {}
26977unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentDensityMap2FeaturesEXT<'_> {}
26978impl<'a> PhysicalDeviceFragmentDensityMap2FeaturesEXT<'a> {
26979    #[inline]
26980    pub fn fragment_density_map_deferred(mut self, fragment_density_map_deferred: bool) -> Self {
26981        self.fragment_density_map_deferred = fragment_density_map_deferred.into();
26982        self
26983    }
26984}
26985#[repr(C)]
26986#[cfg_attr(feature = "debug", derive(Debug))]
26987#[derive(Copy, Clone)]
26988#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM.html>"]
26989#[must_use]
26990pub struct PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'a> {
26991    pub s_type: StructureType,
26992    pub p_next: *mut c_void,
26993    pub fragment_density_map_offset: Bool32,
26994    pub _marker: PhantomData<&'a ()>,
26995}
26996unsafe impl Send for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'_> {}
26997unsafe impl Sync for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'_> {}
26998impl ::core::default::Default for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'_> {
26999    #[inline]
27000    fn default() -> Self {
27001        Self {
27002            s_type: Self::STRUCTURE_TYPE,
27003            p_next: ::core::ptr::null_mut(),
27004            fragment_density_map_offset: Bool32::default(),
27005            _marker: PhantomData,
27006        }
27007    }
27008}
27009unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'a> {
27010    const STRUCTURE_TYPE: StructureType =
27011        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM;
27012}
27013unsafe impl ExtendsPhysicalDeviceFeatures2
27014    for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'_>
27015{
27016}
27017unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'_> {}
27018impl<'a> PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM<'a> {
27019    #[inline]
27020    pub fn fragment_density_map_offset(mut self, fragment_density_map_offset: bool) -> Self {
27021        self.fragment_density_map_offset = fragment_density_map_offset.into();
27022        self
27023    }
27024}
27025#[repr(C)]
27026#[cfg_attr(feature = "debug", derive(Debug))]
27027#[derive(Copy, Clone)]
27028#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMapPropertiesEXT.html>"]
27029#[must_use]
27030pub struct PhysicalDeviceFragmentDensityMapPropertiesEXT<'a> {
27031    pub s_type: StructureType,
27032    pub p_next: *mut c_void,
27033    pub min_fragment_density_texel_size: Extent2D,
27034    pub max_fragment_density_texel_size: Extent2D,
27035    pub fragment_density_invocations: Bool32,
27036    pub _marker: PhantomData<&'a ()>,
27037}
27038unsafe impl Send for PhysicalDeviceFragmentDensityMapPropertiesEXT<'_> {}
27039unsafe impl Sync for PhysicalDeviceFragmentDensityMapPropertiesEXT<'_> {}
27040impl ::core::default::Default for PhysicalDeviceFragmentDensityMapPropertiesEXT<'_> {
27041    #[inline]
27042    fn default() -> Self {
27043        Self {
27044            s_type: Self::STRUCTURE_TYPE,
27045            p_next: ::core::ptr::null_mut(),
27046            min_fragment_density_texel_size: Extent2D::default(),
27047            max_fragment_density_texel_size: Extent2D::default(),
27048            fragment_density_invocations: Bool32::default(),
27049            _marker: PhantomData,
27050        }
27051    }
27052}
27053unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMapPropertiesEXT<'a> {
27054    const STRUCTURE_TYPE: StructureType =
27055        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT;
27056}
27057unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceFragmentDensityMapPropertiesEXT<'_> {}
27058impl<'a> PhysicalDeviceFragmentDensityMapPropertiesEXT<'a> {
27059    #[inline]
27060    pub fn min_fragment_density_texel_size(
27061        mut self,
27062        min_fragment_density_texel_size: Extent2D,
27063    ) -> Self {
27064        self.min_fragment_density_texel_size = min_fragment_density_texel_size;
27065        self
27066    }
27067    #[inline]
27068    pub fn max_fragment_density_texel_size(
27069        mut self,
27070        max_fragment_density_texel_size: Extent2D,
27071    ) -> Self {
27072        self.max_fragment_density_texel_size = max_fragment_density_texel_size;
27073        self
27074    }
27075    #[inline]
27076    pub fn fragment_density_invocations(mut self, fragment_density_invocations: bool) -> Self {
27077        self.fragment_density_invocations = fragment_density_invocations.into();
27078        self
27079    }
27080}
27081#[repr(C)]
27082#[cfg_attr(feature = "debug", derive(Debug))]
27083#[derive(Copy, Clone)]
27084#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMap2PropertiesEXT.html>"]
27085#[must_use]
27086pub struct PhysicalDeviceFragmentDensityMap2PropertiesEXT<'a> {
27087    pub s_type: StructureType,
27088    pub p_next: *mut c_void,
27089    pub subsampled_loads: Bool32,
27090    pub subsampled_coarse_reconstruction_early_access: Bool32,
27091    pub max_subsampled_array_layers: u32,
27092    pub max_descriptor_set_subsampled_samplers: u32,
27093    pub _marker: PhantomData<&'a ()>,
27094}
27095unsafe impl Send for PhysicalDeviceFragmentDensityMap2PropertiesEXT<'_> {}
27096unsafe impl Sync for PhysicalDeviceFragmentDensityMap2PropertiesEXT<'_> {}
27097impl ::core::default::Default for PhysicalDeviceFragmentDensityMap2PropertiesEXT<'_> {
27098    #[inline]
27099    fn default() -> Self {
27100        Self {
27101            s_type: Self::STRUCTURE_TYPE,
27102            p_next: ::core::ptr::null_mut(),
27103            subsampled_loads: Bool32::default(),
27104            subsampled_coarse_reconstruction_early_access: Bool32::default(),
27105            max_subsampled_array_layers: u32::default(),
27106            max_descriptor_set_subsampled_samplers: u32::default(),
27107            _marker: PhantomData,
27108        }
27109    }
27110}
27111unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMap2PropertiesEXT<'a> {
27112    const STRUCTURE_TYPE: StructureType =
27113        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT;
27114}
27115unsafe impl ExtendsPhysicalDeviceProperties2
27116    for PhysicalDeviceFragmentDensityMap2PropertiesEXT<'_>
27117{
27118}
27119impl<'a> PhysicalDeviceFragmentDensityMap2PropertiesEXT<'a> {
27120    #[inline]
27121    pub fn subsampled_loads(mut self, subsampled_loads: bool) -> Self {
27122        self.subsampled_loads = subsampled_loads.into();
27123        self
27124    }
27125    #[inline]
27126    pub fn subsampled_coarse_reconstruction_early_access(
27127        mut self,
27128        subsampled_coarse_reconstruction_early_access: bool,
27129    ) -> Self {
27130        self.subsampled_coarse_reconstruction_early_access =
27131            subsampled_coarse_reconstruction_early_access.into();
27132        self
27133    }
27134    #[inline]
27135    pub fn max_subsampled_array_layers(mut self, max_subsampled_array_layers: u32) -> Self {
27136        self.max_subsampled_array_layers = max_subsampled_array_layers;
27137        self
27138    }
27139    #[inline]
27140    pub fn max_descriptor_set_subsampled_samplers(
27141        mut self,
27142        max_descriptor_set_subsampled_samplers: u32,
27143    ) -> Self {
27144        self.max_descriptor_set_subsampled_samplers = max_descriptor_set_subsampled_samplers;
27145        self
27146    }
27147}
27148#[repr(C)]
27149#[cfg_attr(feature = "debug", derive(Debug))]
27150#[derive(Copy, Clone)]
27151#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM.html>"]
27152#[must_use]
27153pub struct PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'a> {
27154    pub s_type: StructureType,
27155    pub p_next: *mut c_void,
27156    pub fragment_density_offset_granularity: Extent2D,
27157    pub _marker: PhantomData<&'a ()>,
27158}
27159unsafe impl Send for PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'_> {}
27160unsafe impl Sync for PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'_> {}
27161impl ::core::default::Default for PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'_> {
27162    #[inline]
27163    fn default() -> Self {
27164        Self {
27165            s_type: Self::STRUCTURE_TYPE,
27166            p_next: ::core::ptr::null_mut(),
27167            fragment_density_offset_granularity: Extent2D::default(),
27168            _marker: PhantomData,
27169        }
27170    }
27171}
27172unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'a> {
27173    const STRUCTURE_TYPE: StructureType =
27174        StructureType::PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM;
27175}
27176unsafe impl ExtendsPhysicalDeviceProperties2
27177    for PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'_>
27178{
27179}
27180impl<'a> PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM<'a> {
27181    #[inline]
27182    pub fn fragment_density_offset_granularity(
27183        mut self,
27184        fragment_density_offset_granularity: Extent2D,
27185    ) -> Self {
27186        self.fragment_density_offset_granularity = fragment_density_offset_granularity;
27187        self
27188    }
27189}
27190#[repr(C)]
27191#[cfg_attr(feature = "debug", derive(Debug))]
27192#[derive(Copy, Clone)]
27193#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassFragmentDensityMapCreateInfoEXT.html>"]
27194#[must_use]
27195pub struct RenderPassFragmentDensityMapCreateInfoEXT<'a> {
27196    pub s_type: StructureType,
27197    pub p_next: *const c_void,
27198    pub fragment_density_map_attachment: AttachmentReference,
27199    pub _marker: PhantomData<&'a ()>,
27200}
27201unsafe impl Send for RenderPassFragmentDensityMapCreateInfoEXT<'_> {}
27202unsafe impl Sync for RenderPassFragmentDensityMapCreateInfoEXT<'_> {}
27203impl ::core::default::Default for RenderPassFragmentDensityMapCreateInfoEXT<'_> {
27204    #[inline]
27205    fn default() -> Self {
27206        Self {
27207            s_type: Self::STRUCTURE_TYPE,
27208            p_next: ::core::ptr::null(),
27209            fragment_density_map_attachment: AttachmentReference::default(),
27210            _marker: PhantomData,
27211        }
27212    }
27213}
27214unsafe impl<'a> TaggedStructure for RenderPassFragmentDensityMapCreateInfoEXT<'a> {
27215    const STRUCTURE_TYPE: StructureType =
27216        StructureType::RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT;
27217}
27218unsafe impl ExtendsRenderPassCreateInfo for RenderPassFragmentDensityMapCreateInfoEXT<'_> {}
27219unsafe impl ExtendsRenderPassCreateInfo2 for RenderPassFragmentDensityMapCreateInfoEXT<'_> {}
27220impl<'a> RenderPassFragmentDensityMapCreateInfoEXT<'a> {
27221    #[inline]
27222    pub fn fragment_density_map_attachment(
27223        mut self,
27224        fragment_density_map_attachment: AttachmentReference,
27225    ) -> Self {
27226        self.fragment_density_map_attachment = fragment_density_map_attachment;
27227        self
27228    }
27229}
27230#[repr(C)]
27231#[cfg_attr(feature = "debug", derive(Debug))]
27232#[derive(Copy, Clone)]
27233#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassFragmentDensityMapOffsetEndInfoQCOM.html>"]
27234#[must_use]
27235pub struct SubpassFragmentDensityMapOffsetEndInfoQCOM<'a> {
27236    pub s_type: StructureType,
27237    pub p_next: *const c_void,
27238    pub fragment_density_offset_count: u32,
27239    pub p_fragment_density_offsets: *const Offset2D,
27240    pub _marker: PhantomData<&'a ()>,
27241}
27242unsafe impl Send for SubpassFragmentDensityMapOffsetEndInfoQCOM<'_> {}
27243unsafe impl Sync for SubpassFragmentDensityMapOffsetEndInfoQCOM<'_> {}
27244impl ::core::default::Default for SubpassFragmentDensityMapOffsetEndInfoQCOM<'_> {
27245    #[inline]
27246    fn default() -> Self {
27247        Self {
27248            s_type: Self::STRUCTURE_TYPE,
27249            p_next: ::core::ptr::null(),
27250            fragment_density_offset_count: u32::default(),
27251            p_fragment_density_offsets: ::core::ptr::null(),
27252            _marker: PhantomData,
27253        }
27254    }
27255}
27256unsafe impl<'a> TaggedStructure for SubpassFragmentDensityMapOffsetEndInfoQCOM<'a> {
27257    const STRUCTURE_TYPE: StructureType =
27258        StructureType::SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM;
27259}
27260unsafe impl ExtendsSubpassEndInfo for SubpassFragmentDensityMapOffsetEndInfoQCOM<'_> {}
27261impl<'a> SubpassFragmentDensityMapOffsetEndInfoQCOM<'a> {
27262    #[inline]
27263    pub fn fragment_density_offsets(mut self, fragment_density_offsets: &'a [Offset2D]) -> Self {
27264        self.fragment_density_offset_count = fragment_density_offsets.len() as _;
27265        self.p_fragment_density_offsets = fragment_density_offsets.as_ptr();
27266        self
27267    }
27268}
27269#[repr(C)]
27270#[cfg_attr(feature = "debug", derive(Debug))]
27271#[derive(Copy, Clone)]
27272#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceScalarBlockLayoutFeatures.html>"]
27273#[must_use]
27274pub struct PhysicalDeviceScalarBlockLayoutFeatures<'a> {
27275    pub s_type: StructureType,
27276    pub p_next: *mut c_void,
27277    pub scalar_block_layout: Bool32,
27278    pub _marker: PhantomData<&'a ()>,
27279}
27280unsafe impl Send for PhysicalDeviceScalarBlockLayoutFeatures<'_> {}
27281unsafe impl Sync for PhysicalDeviceScalarBlockLayoutFeatures<'_> {}
27282impl ::core::default::Default for PhysicalDeviceScalarBlockLayoutFeatures<'_> {
27283    #[inline]
27284    fn default() -> Self {
27285        Self {
27286            s_type: Self::STRUCTURE_TYPE,
27287            p_next: ::core::ptr::null_mut(),
27288            scalar_block_layout: Bool32::default(),
27289            _marker: PhantomData,
27290        }
27291    }
27292}
27293unsafe impl<'a> TaggedStructure for PhysicalDeviceScalarBlockLayoutFeatures<'a> {
27294    const STRUCTURE_TYPE: StructureType =
27295        StructureType::PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES;
27296}
27297unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceScalarBlockLayoutFeatures<'_> {}
27298unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceScalarBlockLayoutFeatures<'_> {}
27299impl<'a> PhysicalDeviceScalarBlockLayoutFeatures<'a> {
27300    #[inline]
27301    pub fn scalar_block_layout(mut self, scalar_block_layout: bool) -> Self {
27302        self.scalar_block_layout = scalar_block_layout.into();
27303        self
27304    }
27305}
27306#[repr(C)]
27307#[cfg_attr(feature = "debug", derive(Debug))]
27308#[derive(Copy, Clone)]
27309#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceProtectedCapabilitiesKHR.html>"]
27310#[must_use]
27311pub struct SurfaceProtectedCapabilitiesKHR<'a> {
27312    pub s_type: StructureType,
27313    pub p_next: *const c_void,
27314    pub supports_protected: Bool32,
27315    pub _marker: PhantomData<&'a ()>,
27316}
27317unsafe impl Send for SurfaceProtectedCapabilitiesKHR<'_> {}
27318unsafe impl Sync for SurfaceProtectedCapabilitiesKHR<'_> {}
27319impl ::core::default::Default for SurfaceProtectedCapabilitiesKHR<'_> {
27320    #[inline]
27321    fn default() -> Self {
27322        Self {
27323            s_type: Self::STRUCTURE_TYPE,
27324            p_next: ::core::ptr::null(),
27325            supports_protected: Bool32::default(),
27326            _marker: PhantomData,
27327        }
27328    }
27329}
27330unsafe impl<'a> TaggedStructure for SurfaceProtectedCapabilitiesKHR<'a> {
27331    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_PROTECTED_CAPABILITIES_KHR;
27332}
27333unsafe impl ExtendsSurfaceCapabilities2KHR for SurfaceProtectedCapabilitiesKHR<'_> {}
27334impl<'a> SurfaceProtectedCapabilitiesKHR<'a> {
27335    #[inline]
27336    pub fn supports_protected(mut self, supports_protected: bool) -> Self {
27337        self.supports_protected = supports_protected.into();
27338        self
27339    }
27340}
27341#[repr(C)]
27342#[cfg_attr(feature = "debug", derive(Debug))]
27343#[derive(Copy, Clone)]
27344#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.html>"]
27345#[must_use]
27346pub struct PhysicalDeviceUniformBufferStandardLayoutFeatures<'a> {
27347    pub s_type: StructureType,
27348    pub p_next: *mut c_void,
27349    pub uniform_buffer_standard_layout: Bool32,
27350    pub _marker: PhantomData<&'a ()>,
27351}
27352unsafe impl Send for PhysicalDeviceUniformBufferStandardLayoutFeatures<'_> {}
27353unsafe impl Sync for PhysicalDeviceUniformBufferStandardLayoutFeatures<'_> {}
27354impl ::core::default::Default for PhysicalDeviceUniformBufferStandardLayoutFeatures<'_> {
27355    #[inline]
27356    fn default() -> Self {
27357        Self {
27358            s_type: Self::STRUCTURE_TYPE,
27359            p_next: ::core::ptr::null_mut(),
27360            uniform_buffer_standard_layout: Bool32::default(),
27361            _marker: PhantomData,
27362        }
27363    }
27364}
27365unsafe impl<'a> TaggedStructure for PhysicalDeviceUniformBufferStandardLayoutFeatures<'a> {
27366    const STRUCTURE_TYPE: StructureType =
27367        StructureType::PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES;
27368}
27369unsafe impl ExtendsPhysicalDeviceFeatures2
27370    for PhysicalDeviceUniformBufferStandardLayoutFeatures<'_>
27371{
27372}
27373unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceUniformBufferStandardLayoutFeatures<'_> {}
27374impl<'a> PhysicalDeviceUniformBufferStandardLayoutFeatures<'a> {
27375    #[inline]
27376    pub fn uniform_buffer_standard_layout(mut self, uniform_buffer_standard_layout: bool) -> Self {
27377        self.uniform_buffer_standard_layout = uniform_buffer_standard_layout.into();
27378        self
27379    }
27380}
27381#[repr(C)]
27382#[cfg_attr(feature = "debug", derive(Debug))]
27383#[derive(Copy, Clone)]
27384#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthClipEnableFeaturesEXT.html>"]
27385#[must_use]
27386pub struct PhysicalDeviceDepthClipEnableFeaturesEXT<'a> {
27387    pub s_type: StructureType,
27388    pub p_next: *mut c_void,
27389    pub depth_clip_enable: Bool32,
27390    pub _marker: PhantomData<&'a ()>,
27391}
27392unsafe impl Send for PhysicalDeviceDepthClipEnableFeaturesEXT<'_> {}
27393unsafe impl Sync for PhysicalDeviceDepthClipEnableFeaturesEXT<'_> {}
27394impl ::core::default::Default for PhysicalDeviceDepthClipEnableFeaturesEXT<'_> {
27395    #[inline]
27396    fn default() -> Self {
27397        Self {
27398            s_type: Self::STRUCTURE_TYPE,
27399            p_next: ::core::ptr::null_mut(),
27400            depth_clip_enable: Bool32::default(),
27401            _marker: PhantomData,
27402        }
27403    }
27404}
27405unsafe impl<'a> TaggedStructure for PhysicalDeviceDepthClipEnableFeaturesEXT<'a> {
27406    const STRUCTURE_TYPE: StructureType =
27407        StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT;
27408}
27409unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDepthClipEnableFeaturesEXT<'_> {}
27410unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDepthClipEnableFeaturesEXT<'_> {}
27411impl<'a> PhysicalDeviceDepthClipEnableFeaturesEXT<'a> {
27412    #[inline]
27413    pub fn depth_clip_enable(mut self, depth_clip_enable: bool) -> Self {
27414        self.depth_clip_enable = depth_clip_enable.into();
27415        self
27416    }
27417}
27418#[repr(C)]
27419#[cfg_attr(feature = "debug", derive(Debug))]
27420#[derive(Copy, Clone)]
27421#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationDepthClipStateCreateInfoEXT.html>"]
27422#[must_use]
27423pub struct PipelineRasterizationDepthClipStateCreateInfoEXT<'a> {
27424    pub s_type: StructureType,
27425    pub p_next: *const c_void,
27426    pub flags: PipelineRasterizationDepthClipStateCreateFlagsEXT,
27427    pub depth_clip_enable: Bool32,
27428    pub _marker: PhantomData<&'a ()>,
27429}
27430unsafe impl Send for PipelineRasterizationDepthClipStateCreateInfoEXT<'_> {}
27431unsafe impl Sync for PipelineRasterizationDepthClipStateCreateInfoEXT<'_> {}
27432impl ::core::default::Default for PipelineRasterizationDepthClipStateCreateInfoEXT<'_> {
27433    #[inline]
27434    fn default() -> Self {
27435        Self {
27436            s_type: Self::STRUCTURE_TYPE,
27437            p_next: ::core::ptr::null(),
27438            flags: PipelineRasterizationDepthClipStateCreateFlagsEXT::default(),
27439            depth_clip_enable: Bool32::default(),
27440            _marker: PhantomData,
27441        }
27442    }
27443}
27444unsafe impl<'a> TaggedStructure for PipelineRasterizationDepthClipStateCreateInfoEXT<'a> {
27445    const STRUCTURE_TYPE: StructureType =
27446        StructureType::PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT;
27447}
27448unsafe impl ExtendsPipelineRasterizationStateCreateInfo
27449    for PipelineRasterizationDepthClipStateCreateInfoEXT<'_>
27450{
27451}
27452impl<'a> PipelineRasterizationDepthClipStateCreateInfoEXT<'a> {
27453    #[inline]
27454    pub fn flags(mut self, flags: PipelineRasterizationDepthClipStateCreateFlagsEXT) -> Self {
27455        self.flags = flags;
27456        self
27457    }
27458    #[inline]
27459    pub fn depth_clip_enable(mut self, depth_clip_enable: bool) -> Self {
27460        self.depth_clip_enable = depth_clip_enable.into();
27461        self
27462    }
27463}
27464#[repr(C)]
27465#[cfg_attr(feature = "debug", derive(Debug))]
27466#[derive(Copy, Clone)]
27467#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryBudgetPropertiesEXT.html>"]
27468#[must_use]
27469pub struct PhysicalDeviceMemoryBudgetPropertiesEXT<'a> {
27470    pub s_type: StructureType,
27471    pub p_next: *mut c_void,
27472    pub heap_budget: [DeviceSize; MAX_MEMORY_HEAPS],
27473    pub heap_usage: [DeviceSize; MAX_MEMORY_HEAPS],
27474    pub _marker: PhantomData<&'a ()>,
27475}
27476unsafe impl Send for PhysicalDeviceMemoryBudgetPropertiesEXT<'_> {}
27477unsafe impl Sync for PhysicalDeviceMemoryBudgetPropertiesEXT<'_> {}
27478impl ::core::default::Default for PhysicalDeviceMemoryBudgetPropertiesEXT<'_> {
27479    #[inline]
27480    fn default() -> Self {
27481        Self {
27482            s_type: Self::STRUCTURE_TYPE,
27483            p_next: ::core::ptr::null_mut(),
27484            heap_budget: unsafe { ::core::mem::zeroed() },
27485            heap_usage: unsafe { ::core::mem::zeroed() },
27486            _marker: PhantomData,
27487        }
27488    }
27489}
27490unsafe impl<'a> TaggedStructure for PhysicalDeviceMemoryBudgetPropertiesEXT<'a> {
27491    const STRUCTURE_TYPE: StructureType =
27492        StructureType::PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT;
27493}
27494unsafe impl ExtendsPhysicalDeviceMemoryProperties2 for PhysicalDeviceMemoryBudgetPropertiesEXT<'_> {}
27495impl<'a> PhysicalDeviceMemoryBudgetPropertiesEXT<'a> {
27496    #[inline]
27497    pub fn heap_budget(mut self, heap_budget: [DeviceSize; MAX_MEMORY_HEAPS]) -> Self {
27498        self.heap_budget = heap_budget;
27499        self
27500    }
27501    #[inline]
27502    pub fn heap_usage(mut self, heap_usage: [DeviceSize; MAX_MEMORY_HEAPS]) -> Self {
27503        self.heap_usage = heap_usage;
27504        self
27505    }
27506}
27507#[repr(C)]
27508#[cfg_attr(feature = "debug", derive(Debug))]
27509#[derive(Copy, Clone)]
27510#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMemoryPriorityFeaturesEXT.html>"]
27511#[must_use]
27512pub struct PhysicalDeviceMemoryPriorityFeaturesEXT<'a> {
27513    pub s_type: StructureType,
27514    pub p_next: *mut c_void,
27515    pub memory_priority: Bool32,
27516    pub _marker: PhantomData<&'a ()>,
27517}
27518unsafe impl Send for PhysicalDeviceMemoryPriorityFeaturesEXT<'_> {}
27519unsafe impl Sync for PhysicalDeviceMemoryPriorityFeaturesEXT<'_> {}
27520impl ::core::default::Default for PhysicalDeviceMemoryPriorityFeaturesEXT<'_> {
27521    #[inline]
27522    fn default() -> Self {
27523        Self {
27524            s_type: Self::STRUCTURE_TYPE,
27525            p_next: ::core::ptr::null_mut(),
27526            memory_priority: Bool32::default(),
27527            _marker: PhantomData,
27528        }
27529    }
27530}
27531unsafe impl<'a> TaggedStructure for PhysicalDeviceMemoryPriorityFeaturesEXT<'a> {
27532    const STRUCTURE_TYPE: StructureType =
27533        StructureType::PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT;
27534}
27535unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMemoryPriorityFeaturesEXT<'_> {}
27536unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMemoryPriorityFeaturesEXT<'_> {}
27537impl<'a> PhysicalDeviceMemoryPriorityFeaturesEXT<'a> {
27538    #[inline]
27539    pub fn memory_priority(mut self, memory_priority: bool) -> Self {
27540        self.memory_priority = memory_priority.into();
27541        self
27542    }
27543}
27544#[repr(C)]
27545#[cfg_attr(feature = "debug", derive(Debug))]
27546#[derive(Copy, Clone)]
27547#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryPriorityAllocateInfoEXT.html>"]
27548#[must_use]
27549pub struct MemoryPriorityAllocateInfoEXT<'a> {
27550    pub s_type: StructureType,
27551    pub p_next: *const c_void,
27552    pub priority: f32,
27553    pub _marker: PhantomData<&'a ()>,
27554}
27555unsafe impl Send for MemoryPriorityAllocateInfoEXT<'_> {}
27556unsafe impl Sync for MemoryPriorityAllocateInfoEXT<'_> {}
27557impl ::core::default::Default for MemoryPriorityAllocateInfoEXT<'_> {
27558    #[inline]
27559    fn default() -> Self {
27560        Self {
27561            s_type: Self::STRUCTURE_TYPE,
27562            p_next: ::core::ptr::null(),
27563            priority: f32::default(),
27564            _marker: PhantomData,
27565        }
27566    }
27567}
27568unsafe impl<'a> TaggedStructure for MemoryPriorityAllocateInfoEXT<'a> {
27569    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_PRIORITY_ALLOCATE_INFO_EXT;
27570}
27571unsafe impl ExtendsMemoryAllocateInfo for MemoryPriorityAllocateInfoEXT<'_> {}
27572impl<'a> MemoryPriorityAllocateInfoEXT<'a> {
27573    #[inline]
27574    pub fn priority(mut self, priority: f32) -> Self {
27575        self.priority = priority;
27576        self
27577    }
27578}
27579#[repr(C)]
27580#[cfg_attr(feature = "debug", derive(Debug))]
27581#[derive(Copy, Clone)]
27582#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.html>"]
27583#[must_use]
27584pub struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'a> {
27585    pub s_type: StructureType,
27586    pub p_next: *mut c_void,
27587    pub pageable_device_local_memory: Bool32,
27588    pub _marker: PhantomData<&'a ()>,
27589}
27590unsafe impl Send for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'_> {}
27591unsafe impl Sync for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'_> {}
27592impl ::core::default::Default for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'_> {
27593    #[inline]
27594    fn default() -> Self {
27595        Self {
27596            s_type: Self::STRUCTURE_TYPE,
27597            p_next: ::core::ptr::null_mut(),
27598            pageable_device_local_memory: Bool32::default(),
27599            _marker: PhantomData,
27600        }
27601    }
27602}
27603unsafe impl<'a> TaggedStructure for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'a> {
27604    const STRUCTURE_TYPE: StructureType =
27605        StructureType::PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT;
27606}
27607unsafe impl ExtendsPhysicalDeviceFeatures2
27608    for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'_>
27609{
27610}
27611unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'_> {}
27612impl<'a> PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT<'a> {
27613    #[inline]
27614    pub fn pageable_device_local_memory(mut self, pageable_device_local_memory: bool) -> Self {
27615        self.pageable_device_local_memory = pageable_device_local_memory.into();
27616        self
27617    }
27618}
27619#[repr(C)]
27620#[cfg_attr(feature = "debug", derive(Debug))]
27621#[derive(Copy, Clone)]
27622#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceBufferDeviceAddressFeatures.html>"]
27623#[must_use]
27624pub struct PhysicalDeviceBufferDeviceAddressFeatures<'a> {
27625    pub s_type: StructureType,
27626    pub p_next: *mut c_void,
27627    pub buffer_device_address: Bool32,
27628    pub buffer_device_address_capture_replay: Bool32,
27629    pub buffer_device_address_multi_device: Bool32,
27630    pub _marker: PhantomData<&'a ()>,
27631}
27632unsafe impl Send for PhysicalDeviceBufferDeviceAddressFeatures<'_> {}
27633unsafe impl Sync for PhysicalDeviceBufferDeviceAddressFeatures<'_> {}
27634impl ::core::default::Default for PhysicalDeviceBufferDeviceAddressFeatures<'_> {
27635    #[inline]
27636    fn default() -> Self {
27637        Self {
27638            s_type: Self::STRUCTURE_TYPE,
27639            p_next: ::core::ptr::null_mut(),
27640            buffer_device_address: Bool32::default(),
27641            buffer_device_address_capture_replay: Bool32::default(),
27642            buffer_device_address_multi_device: Bool32::default(),
27643            _marker: PhantomData,
27644        }
27645    }
27646}
27647unsafe impl<'a> TaggedStructure for PhysicalDeviceBufferDeviceAddressFeatures<'a> {
27648    const STRUCTURE_TYPE: StructureType =
27649        StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES;
27650}
27651unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceBufferDeviceAddressFeatures<'_> {}
27652unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceBufferDeviceAddressFeatures<'_> {}
27653impl<'a> PhysicalDeviceBufferDeviceAddressFeatures<'a> {
27654    #[inline]
27655    pub fn buffer_device_address(mut self, buffer_device_address: bool) -> Self {
27656        self.buffer_device_address = buffer_device_address.into();
27657        self
27658    }
27659    #[inline]
27660    pub fn buffer_device_address_capture_replay(
27661        mut self,
27662        buffer_device_address_capture_replay: bool,
27663    ) -> Self {
27664        self.buffer_device_address_capture_replay = buffer_device_address_capture_replay.into();
27665        self
27666    }
27667    #[inline]
27668    pub fn buffer_device_address_multi_device(
27669        mut self,
27670        buffer_device_address_multi_device: bool,
27671    ) -> Self {
27672        self.buffer_device_address_multi_device = buffer_device_address_multi_device.into();
27673        self
27674    }
27675}
27676#[repr(C)]
27677#[cfg_attr(feature = "debug", derive(Debug))]
27678#[derive(Copy, Clone)]
27679#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceBufferDeviceAddressFeaturesEXT.html>"]
27680#[must_use]
27681pub struct PhysicalDeviceBufferDeviceAddressFeaturesEXT<'a> {
27682    pub s_type: StructureType,
27683    pub p_next: *mut c_void,
27684    pub buffer_device_address: Bool32,
27685    pub buffer_device_address_capture_replay: Bool32,
27686    pub buffer_device_address_multi_device: Bool32,
27687    pub _marker: PhantomData<&'a ()>,
27688}
27689unsafe impl Send for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'_> {}
27690unsafe impl Sync for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'_> {}
27691impl ::core::default::Default for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'_> {
27692    #[inline]
27693    fn default() -> Self {
27694        Self {
27695            s_type: Self::STRUCTURE_TYPE,
27696            p_next: ::core::ptr::null_mut(),
27697            buffer_device_address: Bool32::default(),
27698            buffer_device_address_capture_replay: Bool32::default(),
27699            buffer_device_address_multi_device: Bool32::default(),
27700            _marker: PhantomData,
27701        }
27702    }
27703}
27704unsafe impl<'a> TaggedStructure for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'a> {
27705    const STRUCTURE_TYPE: StructureType =
27706        StructureType::PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT;
27707}
27708unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'_> {}
27709unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceBufferDeviceAddressFeaturesEXT<'_> {}
27710impl<'a> PhysicalDeviceBufferDeviceAddressFeaturesEXT<'a> {
27711    #[inline]
27712    pub fn buffer_device_address(mut self, buffer_device_address: bool) -> Self {
27713        self.buffer_device_address = buffer_device_address.into();
27714        self
27715    }
27716    #[inline]
27717    pub fn buffer_device_address_capture_replay(
27718        mut self,
27719        buffer_device_address_capture_replay: bool,
27720    ) -> Self {
27721        self.buffer_device_address_capture_replay = buffer_device_address_capture_replay.into();
27722        self
27723    }
27724    #[inline]
27725    pub fn buffer_device_address_multi_device(
27726        mut self,
27727        buffer_device_address_multi_device: bool,
27728    ) -> Self {
27729        self.buffer_device_address_multi_device = buffer_device_address_multi_device.into();
27730        self
27731    }
27732}
27733#[repr(C)]
27734#[cfg_attr(feature = "debug", derive(Debug))]
27735#[derive(Copy, Clone)]
27736#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferDeviceAddressInfo.html>"]
27737#[must_use]
27738pub struct BufferDeviceAddressInfo<'a> {
27739    pub s_type: StructureType,
27740    pub p_next: *const c_void,
27741    pub buffer: Buffer,
27742    pub _marker: PhantomData<&'a ()>,
27743}
27744unsafe impl Send for BufferDeviceAddressInfo<'_> {}
27745unsafe impl Sync for BufferDeviceAddressInfo<'_> {}
27746impl ::core::default::Default for BufferDeviceAddressInfo<'_> {
27747    #[inline]
27748    fn default() -> Self {
27749        Self {
27750            s_type: Self::STRUCTURE_TYPE,
27751            p_next: ::core::ptr::null(),
27752            buffer: Buffer::default(),
27753            _marker: PhantomData,
27754        }
27755    }
27756}
27757unsafe impl<'a> TaggedStructure for BufferDeviceAddressInfo<'a> {
27758    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_DEVICE_ADDRESS_INFO;
27759}
27760impl<'a> BufferDeviceAddressInfo<'a> {
27761    #[inline]
27762    pub fn buffer(mut self, buffer: Buffer) -> Self {
27763        self.buffer = buffer;
27764        self
27765    }
27766}
27767#[repr(C)]
27768#[cfg_attr(feature = "debug", derive(Debug))]
27769#[derive(Copy, Clone)]
27770#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferOpaqueCaptureAddressCreateInfo.html>"]
27771#[must_use]
27772pub struct BufferOpaqueCaptureAddressCreateInfo<'a> {
27773    pub s_type: StructureType,
27774    pub p_next: *const c_void,
27775    pub opaque_capture_address: u64,
27776    pub _marker: PhantomData<&'a ()>,
27777}
27778unsafe impl Send for BufferOpaqueCaptureAddressCreateInfo<'_> {}
27779unsafe impl Sync for BufferOpaqueCaptureAddressCreateInfo<'_> {}
27780impl ::core::default::Default for BufferOpaqueCaptureAddressCreateInfo<'_> {
27781    #[inline]
27782    fn default() -> Self {
27783        Self {
27784            s_type: Self::STRUCTURE_TYPE,
27785            p_next: ::core::ptr::null(),
27786            opaque_capture_address: u64::default(),
27787            _marker: PhantomData,
27788        }
27789    }
27790}
27791unsafe impl<'a> TaggedStructure for BufferOpaqueCaptureAddressCreateInfo<'a> {
27792    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO;
27793}
27794unsafe impl ExtendsBufferCreateInfo for BufferOpaqueCaptureAddressCreateInfo<'_> {}
27795impl<'a> BufferOpaqueCaptureAddressCreateInfo<'a> {
27796    #[inline]
27797    pub fn opaque_capture_address(mut self, opaque_capture_address: u64) -> Self {
27798        self.opaque_capture_address = opaque_capture_address;
27799        self
27800    }
27801}
27802#[repr(C)]
27803#[cfg_attr(feature = "debug", derive(Debug))]
27804#[derive(Copy, Clone)]
27805#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferDeviceAddressCreateInfoEXT.html>"]
27806#[must_use]
27807pub struct BufferDeviceAddressCreateInfoEXT<'a> {
27808    pub s_type: StructureType,
27809    pub p_next: *const c_void,
27810    pub device_address: DeviceAddress,
27811    pub _marker: PhantomData<&'a ()>,
27812}
27813unsafe impl Send for BufferDeviceAddressCreateInfoEXT<'_> {}
27814unsafe impl Sync for BufferDeviceAddressCreateInfoEXT<'_> {}
27815impl ::core::default::Default for BufferDeviceAddressCreateInfoEXT<'_> {
27816    #[inline]
27817    fn default() -> Self {
27818        Self {
27819            s_type: Self::STRUCTURE_TYPE,
27820            p_next: ::core::ptr::null(),
27821            device_address: DeviceAddress::default(),
27822            _marker: PhantomData,
27823        }
27824    }
27825}
27826unsafe impl<'a> TaggedStructure for BufferDeviceAddressCreateInfoEXT<'a> {
27827    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT;
27828}
27829unsafe impl ExtendsBufferCreateInfo for BufferDeviceAddressCreateInfoEXT<'_> {}
27830impl<'a> BufferDeviceAddressCreateInfoEXT<'a> {
27831    #[inline]
27832    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
27833        self.device_address = device_address;
27834        self
27835    }
27836}
27837#[repr(C)]
27838#[cfg_attr(feature = "debug", derive(Debug))]
27839#[derive(Copy, Clone)]
27840#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageViewImageFormatInfoEXT.html>"]
27841#[must_use]
27842pub struct PhysicalDeviceImageViewImageFormatInfoEXT<'a> {
27843    pub s_type: StructureType,
27844    pub p_next: *mut c_void,
27845    pub image_view_type: ImageViewType,
27846    pub _marker: PhantomData<&'a ()>,
27847}
27848unsafe impl Send for PhysicalDeviceImageViewImageFormatInfoEXT<'_> {}
27849unsafe impl Sync for PhysicalDeviceImageViewImageFormatInfoEXT<'_> {}
27850impl ::core::default::Default for PhysicalDeviceImageViewImageFormatInfoEXT<'_> {
27851    #[inline]
27852    fn default() -> Self {
27853        Self {
27854            s_type: Self::STRUCTURE_TYPE,
27855            p_next: ::core::ptr::null_mut(),
27856            image_view_type: ImageViewType::default(),
27857            _marker: PhantomData,
27858        }
27859    }
27860}
27861unsafe impl<'a> TaggedStructure for PhysicalDeviceImageViewImageFormatInfoEXT<'a> {
27862    const STRUCTURE_TYPE: StructureType =
27863        StructureType::PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT;
27864}
27865unsafe impl ExtendsPhysicalDeviceImageFormatInfo2
27866    for PhysicalDeviceImageViewImageFormatInfoEXT<'_>
27867{
27868}
27869impl<'a> PhysicalDeviceImageViewImageFormatInfoEXT<'a> {
27870    #[inline]
27871    pub fn image_view_type(mut self, image_view_type: ImageViewType) -> Self {
27872        self.image_view_type = image_view_type;
27873        self
27874    }
27875}
27876#[repr(C)]
27877#[cfg_attr(feature = "debug", derive(Debug))]
27878#[derive(Copy, Clone)]
27879#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFilterCubicImageViewImageFormatPropertiesEXT.html>"]
27880#[must_use]
27881pub struct FilterCubicImageViewImageFormatPropertiesEXT<'a> {
27882    pub s_type: StructureType,
27883    pub p_next: *mut c_void,
27884    pub filter_cubic: Bool32,
27885    pub filter_cubic_minmax: Bool32,
27886    pub _marker: PhantomData<&'a ()>,
27887}
27888unsafe impl Send for FilterCubicImageViewImageFormatPropertiesEXT<'_> {}
27889unsafe impl Sync for FilterCubicImageViewImageFormatPropertiesEXT<'_> {}
27890impl ::core::default::Default for FilterCubicImageViewImageFormatPropertiesEXT<'_> {
27891    #[inline]
27892    fn default() -> Self {
27893        Self {
27894            s_type: Self::STRUCTURE_TYPE,
27895            p_next: ::core::ptr::null_mut(),
27896            filter_cubic: Bool32::default(),
27897            filter_cubic_minmax: Bool32::default(),
27898            _marker: PhantomData,
27899        }
27900    }
27901}
27902unsafe impl<'a> TaggedStructure for FilterCubicImageViewImageFormatPropertiesEXT<'a> {
27903    const STRUCTURE_TYPE: StructureType =
27904        StructureType::FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT;
27905}
27906unsafe impl ExtendsImageFormatProperties2 for FilterCubicImageViewImageFormatPropertiesEXT<'_> {}
27907impl<'a> FilterCubicImageViewImageFormatPropertiesEXT<'a> {
27908    #[inline]
27909    pub fn filter_cubic(mut self, filter_cubic: bool) -> Self {
27910        self.filter_cubic = filter_cubic.into();
27911        self
27912    }
27913    #[inline]
27914    pub fn filter_cubic_minmax(mut self, filter_cubic_minmax: bool) -> Self {
27915        self.filter_cubic_minmax = filter_cubic_minmax.into();
27916        self
27917    }
27918}
27919#[repr(C)]
27920#[cfg_attr(feature = "debug", derive(Debug))]
27921#[derive(Copy, Clone)]
27922#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImagelessFramebufferFeatures.html>"]
27923#[must_use]
27924pub struct PhysicalDeviceImagelessFramebufferFeatures<'a> {
27925    pub s_type: StructureType,
27926    pub p_next: *mut c_void,
27927    pub imageless_framebuffer: Bool32,
27928    pub _marker: PhantomData<&'a ()>,
27929}
27930unsafe impl Send for PhysicalDeviceImagelessFramebufferFeatures<'_> {}
27931unsafe impl Sync for PhysicalDeviceImagelessFramebufferFeatures<'_> {}
27932impl ::core::default::Default for PhysicalDeviceImagelessFramebufferFeatures<'_> {
27933    #[inline]
27934    fn default() -> Self {
27935        Self {
27936            s_type: Self::STRUCTURE_TYPE,
27937            p_next: ::core::ptr::null_mut(),
27938            imageless_framebuffer: Bool32::default(),
27939            _marker: PhantomData,
27940        }
27941    }
27942}
27943unsafe impl<'a> TaggedStructure for PhysicalDeviceImagelessFramebufferFeatures<'a> {
27944    const STRUCTURE_TYPE: StructureType =
27945        StructureType::PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES;
27946}
27947unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImagelessFramebufferFeatures<'_> {}
27948unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImagelessFramebufferFeatures<'_> {}
27949impl<'a> PhysicalDeviceImagelessFramebufferFeatures<'a> {
27950    #[inline]
27951    pub fn imageless_framebuffer(mut self, imageless_framebuffer: bool) -> Self {
27952        self.imageless_framebuffer = imageless_framebuffer.into();
27953        self
27954    }
27955}
27956#[repr(C)]
27957#[cfg_attr(feature = "debug", derive(Debug))]
27958#[derive(Copy, Clone)]
27959#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFramebufferAttachmentsCreateInfo.html>"]
27960#[must_use]
27961pub struct FramebufferAttachmentsCreateInfo<'a> {
27962    pub s_type: StructureType,
27963    pub p_next: *const c_void,
27964    pub attachment_image_info_count: u32,
27965    pub p_attachment_image_infos: *const FramebufferAttachmentImageInfo<'a>,
27966    pub _marker: PhantomData<&'a ()>,
27967}
27968unsafe impl Send for FramebufferAttachmentsCreateInfo<'_> {}
27969unsafe impl Sync for FramebufferAttachmentsCreateInfo<'_> {}
27970impl ::core::default::Default for FramebufferAttachmentsCreateInfo<'_> {
27971    #[inline]
27972    fn default() -> Self {
27973        Self {
27974            s_type: Self::STRUCTURE_TYPE,
27975            p_next: ::core::ptr::null(),
27976            attachment_image_info_count: u32::default(),
27977            p_attachment_image_infos: ::core::ptr::null(),
27978            _marker: PhantomData,
27979        }
27980    }
27981}
27982unsafe impl<'a> TaggedStructure for FramebufferAttachmentsCreateInfo<'a> {
27983    const STRUCTURE_TYPE: StructureType = StructureType::FRAMEBUFFER_ATTACHMENTS_CREATE_INFO;
27984}
27985unsafe impl ExtendsFramebufferCreateInfo for FramebufferAttachmentsCreateInfo<'_> {}
27986impl<'a> FramebufferAttachmentsCreateInfo<'a> {
27987    #[inline]
27988    pub fn attachment_image_infos(
27989        mut self,
27990        attachment_image_infos: &'a [FramebufferAttachmentImageInfo<'a>],
27991    ) -> Self {
27992        self.attachment_image_info_count = attachment_image_infos.len() as _;
27993        self.p_attachment_image_infos = attachment_image_infos.as_ptr();
27994        self
27995    }
27996}
27997#[repr(C)]
27998#[cfg_attr(feature = "debug", derive(Debug))]
27999#[derive(Copy, Clone)]
28000#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFramebufferAttachmentImageInfo.html>"]
28001#[must_use]
28002pub struct FramebufferAttachmentImageInfo<'a> {
28003    pub s_type: StructureType,
28004    pub p_next: *const c_void,
28005    pub flags: ImageCreateFlags,
28006    pub usage: ImageUsageFlags,
28007    pub width: u32,
28008    pub height: u32,
28009    pub layer_count: u32,
28010    pub view_format_count: u32,
28011    pub p_view_formats: *const Format,
28012    pub _marker: PhantomData<&'a ()>,
28013}
28014unsafe impl Send for FramebufferAttachmentImageInfo<'_> {}
28015unsafe impl Sync for FramebufferAttachmentImageInfo<'_> {}
28016impl ::core::default::Default for FramebufferAttachmentImageInfo<'_> {
28017    #[inline]
28018    fn default() -> Self {
28019        Self {
28020            s_type: Self::STRUCTURE_TYPE,
28021            p_next: ::core::ptr::null(),
28022            flags: ImageCreateFlags::default(),
28023            usage: ImageUsageFlags::default(),
28024            width: u32::default(),
28025            height: u32::default(),
28026            layer_count: u32::default(),
28027            view_format_count: u32::default(),
28028            p_view_formats: ::core::ptr::null(),
28029            _marker: PhantomData,
28030        }
28031    }
28032}
28033unsafe impl<'a> TaggedStructure for FramebufferAttachmentImageInfo<'a> {
28034    const STRUCTURE_TYPE: StructureType = StructureType::FRAMEBUFFER_ATTACHMENT_IMAGE_INFO;
28035}
28036impl<'a> FramebufferAttachmentImageInfo<'a> {
28037    #[inline]
28038    pub fn flags(mut self, flags: ImageCreateFlags) -> Self {
28039        self.flags = flags;
28040        self
28041    }
28042    #[inline]
28043    pub fn usage(mut self, usage: ImageUsageFlags) -> Self {
28044        self.usage = usage;
28045        self
28046    }
28047    #[inline]
28048    pub fn width(mut self, width: u32) -> Self {
28049        self.width = width;
28050        self
28051    }
28052    #[inline]
28053    pub fn height(mut self, height: u32) -> Self {
28054        self.height = height;
28055        self
28056    }
28057    #[inline]
28058    pub fn layer_count(mut self, layer_count: u32) -> Self {
28059        self.layer_count = layer_count;
28060        self
28061    }
28062    #[inline]
28063    pub fn view_formats(mut self, view_formats: &'a [Format]) -> Self {
28064        self.view_format_count = view_formats.len() as _;
28065        self.p_view_formats = view_formats.as_ptr();
28066        self
28067    }
28068}
28069#[repr(C)]
28070#[cfg_attr(feature = "debug", derive(Debug))]
28071#[derive(Copy, Clone)]
28072#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassAttachmentBeginInfo.html>"]
28073#[must_use]
28074pub struct RenderPassAttachmentBeginInfo<'a> {
28075    pub s_type: StructureType,
28076    pub p_next: *const c_void,
28077    pub attachment_count: u32,
28078    pub p_attachments: *const ImageView,
28079    pub _marker: PhantomData<&'a ()>,
28080}
28081unsafe impl Send for RenderPassAttachmentBeginInfo<'_> {}
28082unsafe impl Sync for RenderPassAttachmentBeginInfo<'_> {}
28083impl ::core::default::Default for RenderPassAttachmentBeginInfo<'_> {
28084    #[inline]
28085    fn default() -> Self {
28086        Self {
28087            s_type: Self::STRUCTURE_TYPE,
28088            p_next: ::core::ptr::null(),
28089            attachment_count: u32::default(),
28090            p_attachments: ::core::ptr::null(),
28091            _marker: PhantomData,
28092        }
28093    }
28094}
28095unsafe impl<'a> TaggedStructure for RenderPassAttachmentBeginInfo<'a> {
28096    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_ATTACHMENT_BEGIN_INFO;
28097}
28098unsafe impl ExtendsRenderPassBeginInfo for RenderPassAttachmentBeginInfo<'_> {}
28099impl<'a> RenderPassAttachmentBeginInfo<'a> {
28100    #[inline]
28101    pub fn attachments(mut self, attachments: &'a [ImageView]) -> Self {
28102        self.attachment_count = attachments.len() as _;
28103        self.p_attachments = attachments.as_ptr();
28104        self
28105    }
28106}
28107#[repr(C)]
28108#[cfg_attr(feature = "debug", derive(Debug))]
28109#[derive(Copy, Clone)]
28110#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTextureCompressionASTCHDRFeatures.html>"]
28111#[must_use]
28112pub struct PhysicalDeviceTextureCompressionASTCHDRFeatures<'a> {
28113    pub s_type: StructureType,
28114    pub p_next: *mut c_void,
28115    pub texture_compression_astc_hdr: Bool32,
28116    pub _marker: PhantomData<&'a ()>,
28117}
28118unsafe impl Send for PhysicalDeviceTextureCompressionASTCHDRFeatures<'_> {}
28119unsafe impl Sync for PhysicalDeviceTextureCompressionASTCHDRFeatures<'_> {}
28120impl ::core::default::Default for PhysicalDeviceTextureCompressionASTCHDRFeatures<'_> {
28121    #[inline]
28122    fn default() -> Self {
28123        Self {
28124            s_type: Self::STRUCTURE_TYPE,
28125            p_next: ::core::ptr::null_mut(),
28126            texture_compression_astc_hdr: Bool32::default(),
28127            _marker: PhantomData,
28128        }
28129    }
28130}
28131unsafe impl<'a> TaggedStructure for PhysicalDeviceTextureCompressionASTCHDRFeatures<'a> {
28132    const STRUCTURE_TYPE: StructureType =
28133        StructureType::PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES;
28134}
28135unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceTextureCompressionASTCHDRFeatures<'_> {}
28136unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceTextureCompressionASTCHDRFeatures<'_> {}
28137impl<'a> PhysicalDeviceTextureCompressionASTCHDRFeatures<'a> {
28138    #[inline]
28139    pub fn texture_compression_astc_hdr(mut self, texture_compression_astc_hdr: bool) -> Self {
28140        self.texture_compression_astc_hdr = texture_compression_astc_hdr.into();
28141        self
28142    }
28143}
28144#[repr(C)]
28145#[cfg_attr(feature = "debug", derive(Debug))]
28146#[derive(Copy, Clone)]
28147#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrixFeaturesNV.html>"]
28148#[must_use]
28149pub struct PhysicalDeviceCooperativeMatrixFeaturesNV<'a> {
28150    pub s_type: StructureType,
28151    pub p_next: *mut c_void,
28152    pub cooperative_matrix: Bool32,
28153    pub cooperative_matrix_robust_buffer_access: Bool32,
28154    pub _marker: PhantomData<&'a ()>,
28155}
28156unsafe impl Send for PhysicalDeviceCooperativeMatrixFeaturesNV<'_> {}
28157unsafe impl Sync for PhysicalDeviceCooperativeMatrixFeaturesNV<'_> {}
28158impl ::core::default::Default for PhysicalDeviceCooperativeMatrixFeaturesNV<'_> {
28159    #[inline]
28160    fn default() -> Self {
28161        Self {
28162            s_type: Self::STRUCTURE_TYPE,
28163            p_next: ::core::ptr::null_mut(),
28164            cooperative_matrix: Bool32::default(),
28165            cooperative_matrix_robust_buffer_access: Bool32::default(),
28166            _marker: PhantomData,
28167        }
28168    }
28169}
28170unsafe impl<'a> TaggedStructure for PhysicalDeviceCooperativeMatrixFeaturesNV<'a> {
28171    const STRUCTURE_TYPE: StructureType =
28172        StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV;
28173}
28174unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCooperativeMatrixFeaturesNV<'_> {}
28175unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCooperativeMatrixFeaturesNV<'_> {}
28176impl<'a> PhysicalDeviceCooperativeMatrixFeaturesNV<'a> {
28177    #[inline]
28178    pub fn cooperative_matrix(mut self, cooperative_matrix: bool) -> Self {
28179        self.cooperative_matrix = cooperative_matrix.into();
28180        self
28181    }
28182    #[inline]
28183    pub fn cooperative_matrix_robust_buffer_access(
28184        mut self,
28185        cooperative_matrix_robust_buffer_access: bool,
28186    ) -> Self {
28187        self.cooperative_matrix_robust_buffer_access =
28188            cooperative_matrix_robust_buffer_access.into();
28189        self
28190    }
28191}
28192#[repr(C)]
28193#[cfg_attr(feature = "debug", derive(Debug))]
28194#[derive(Copy, Clone)]
28195#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrixPropertiesNV.html>"]
28196#[must_use]
28197pub struct PhysicalDeviceCooperativeMatrixPropertiesNV<'a> {
28198    pub s_type: StructureType,
28199    pub p_next: *mut c_void,
28200    pub cooperative_matrix_supported_stages: ShaderStageFlags,
28201    pub _marker: PhantomData<&'a ()>,
28202}
28203unsafe impl Send for PhysicalDeviceCooperativeMatrixPropertiesNV<'_> {}
28204unsafe impl Sync for PhysicalDeviceCooperativeMatrixPropertiesNV<'_> {}
28205impl ::core::default::Default for PhysicalDeviceCooperativeMatrixPropertiesNV<'_> {
28206    #[inline]
28207    fn default() -> Self {
28208        Self {
28209            s_type: Self::STRUCTURE_TYPE,
28210            p_next: ::core::ptr::null_mut(),
28211            cooperative_matrix_supported_stages: ShaderStageFlags::default(),
28212            _marker: PhantomData,
28213        }
28214    }
28215}
28216unsafe impl<'a> TaggedStructure for PhysicalDeviceCooperativeMatrixPropertiesNV<'a> {
28217    const STRUCTURE_TYPE: StructureType =
28218        StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV;
28219}
28220unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceCooperativeMatrixPropertiesNV<'_> {}
28221impl<'a> PhysicalDeviceCooperativeMatrixPropertiesNV<'a> {
28222    #[inline]
28223    pub fn cooperative_matrix_supported_stages(
28224        mut self,
28225        cooperative_matrix_supported_stages: ShaderStageFlags,
28226    ) -> Self {
28227        self.cooperative_matrix_supported_stages = cooperative_matrix_supported_stages;
28228        self
28229    }
28230}
28231#[repr(C)]
28232#[cfg_attr(feature = "debug", derive(Debug))]
28233#[derive(Copy, Clone)]
28234#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCooperativeMatrixPropertiesNV.html>"]
28235#[must_use]
28236pub struct CooperativeMatrixPropertiesNV<'a> {
28237    pub s_type: StructureType,
28238    pub p_next: *mut c_void,
28239    pub m_size: u32,
28240    pub n_size: u32,
28241    pub k_size: u32,
28242    pub a_type: ComponentTypeNV,
28243    pub b_type: ComponentTypeNV,
28244    pub c_type: ComponentTypeNV,
28245    pub d_type: ComponentTypeNV,
28246    pub scope: ScopeNV,
28247    pub _marker: PhantomData<&'a ()>,
28248}
28249unsafe impl Send for CooperativeMatrixPropertiesNV<'_> {}
28250unsafe impl Sync for CooperativeMatrixPropertiesNV<'_> {}
28251impl ::core::default::Default for CooperativeMatrixPropertiesNV<'_> {
28252    #[inline]
28253    fn default() -> Self {
28254        Self {
28255            s_type: Self::STRUCTURE_TYPE,
28256            p_next: ::core::ptr::null_mut(),
28257            m_size: u32::default(),
28258            n_size: u32::default(),
28259            k_size: u32::default(),
28260            a_type: ComponentTypeNV::default(),
28261            b_type: ComponentTypeNV::default(),
28262            c_type: ComponentTypeNV::default(),
28263            d_type: ComponentTypeNV::default(),
28264            scope: ScopeNV::default(),
28265            _marker: PhantomData,
28266        }
28267    }
28268}
28269unsafe impl<'a> TaggedStructure for CooperativeMatrixPropertiesNV<'a> {
28270    const STRUCTURE_TYPE: StructureType = StructureType::COOPERATIVE_MATRIX_PROPERTIES_NV;
28271}
28272impl<'a> CooperativeMatrixPropertiesNV<'a> {
28273    #[inline]
28274    pub fn m_size(mut self, m_size: u32) -> Self {
28275        self.m_size = m_size;
28276        self
28277    }
28278    #[inline]
28279    pub fn n_size(mut self, n_size: u32) -> Self {
28280        self.n_size = n_size;
28281        self
28282    }
28283    #[inline]
28284    pub fn k_size(mut self, k_size: u32) -> Self {
28285        self.k_size = k_size;
28286        self
28287    }
28288    #[inline]
28289    pub fn a_type(mut self, a_type: ComponentTypeNV) -> Self {
28290        self.a_type = a_type;
28291        self
28292    }
28293    #[inline]
28294    pub fn b_type(mut self, b_type: ComponentTypeNV) -> Self {
28295        self.b_type = b_type;
28296        self
28297    }
28298    #[inline]
28299    pub fn c_type(mut self, c_type: ComponentTypeNV) -> Self {
28300        self.c_type = c_type;
28301        self
28302    }
28303    #[inline]
28304    pub fn d_type(mut self, d_type: ComponentTypeNV) -> Self {
28305        self.d_type = d_type;
28306        self
28307    }
28308    #[inline]
28309    pub fn scope(mut self, scope: ScopeNV) -> Self {
28310        self.scope = scope;
28311        self
28312    }
28313}
28314#[repr(C)]
28315#[cfg_attr(feature = "debug", derive(Debug))]
28316#[derive(Copy, Clone)]
28317#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceYcbcrImageArraysFeaturesEXT.html>"]
28318#[must_use]
28319pub struct PhysicalDeviceYcbcrImageArraysFeaturesEXT<'a> {
28320    pub s_type: StructureType,
28321    pub p_next: *mut c_void,
28322    pub ycbcr_image_arrays: Bool32,
28323    pub _marker: PhantomData<&'a ()>,
28324}
28325unsafe impl Send for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'_> {}
28326unsafe impl Sync for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'_> {}
28327impl ::core::default::Default for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'_> {
28328    #[inline]
28329    fn default() -> Self {
28330        Self {
28331            s_type: Self::STRUCTURE_TYPE,
28332            p_next: ::core::ptr::null_mut(),
28333            ycbcr_image_arrays: Bool32::default(),
28334            _marker: PhantomData,
28335        }
28336    }
28337}
28338unsafe impl<'a> TaggedStructure for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'a> {
28339    const STRUCTURE_TYPE: StructureType =
28340        StructureType::PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT;
28341}
28342unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'_> {}
28343unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceYcbcrImageArraysFeaturesEXT<'_> {}
28344impl<'a> PhysicalDeviceYcbcrImageArraysFeaturesEXT<'a> {
28345    #[inline]
28346    pub fn ycbcr_image_arrays(mut self, ycbcr_image_arrays: bool) -> Self {
28347        self.ycbcr_image_arrays = ycbcr_image_arrays.into();
28348        self
28349    }
28350}
28351#[repr(C)]
28352#[cfg_attr(feature = "debug", derive(Debug))]
28353#[derive(Copy, Clone)]
28354#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewHandleInfoNVX.html>"]
28355#[must_use]
28356pub struct ImageViewHandleInfoNVX<'a> {
28357    pub s_type: StructureType,
28358    pub p_next: *const c_void,
28359    pub image_view: ImageView,
28360    pub descriptor_type: DescriptorType,
28361    pub sampler: Sampler,
28362    pub _marker: PhantomData<&'a ()>,
28363}
28364unsafe impl Send for ImageViewHandleInfoNVX<'_> {}
28365unsafe impl Sync for ImageViewHandleInfoNVX<'_> {}
28366impl ::core::default::Default for ImageViewHandleInfoNVX<'_> {
28367    #[inline]
28368    fn default() -> Self {
28369        Self {
28370            s_type: Self::STRUCTURE_TYPE,
28371            p_next: ::core::ptr::null(),
28372            image_view: ImageView::default(),
28373            descriptor_type: DescriptorType::default(),
28374            sampler: Sampler::default(),
28375            _marker: PhantomData,
28376        }
28377    }
28378}
28379unsafe impl<'a> TaggedStructure for ImageViewHandleInfoNVX<'a> {
28380    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_HANDLE_INFO_NVX;
28381}
28382impl<'a> ImageViewHandleInfoNVX<'a> {
28383    #[inline]
28384    pub fn image_view(mut self, image_view: ImageView) -> Self {
28385        self.image_view = image_view;
28386        self
28387    }
28388    #[inline]
28389    pub fn descriptor_type(mut self, descriptor_type: DescriptorType) -> Self {
28390        self.descriptor_type = descriptor_type;
28391        self
28392    }
28393    #[inline]
28394    pub fn sampler(mut self, sampler: Sampler) -> Self {
28395        self.sampler = sampler;
28396        self
28397    }
28398}
28399#[repr(C)]
28400#[cfg_attr(feature = "debug", derive(Debug))]
28401#[derive(Copy, Clone)]
28402#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewAddressPropertiesNVX.html>"]
28403#[must_use]
28404pub struct ImageViewAddressPropertiesNVX<'a> {
28405    pub s_type: StructureType,
28406    pub p_next: *mut c_void,
28407    pub device_address: DeviceAddress,
28408    pub size: DeviceSize,
28409    pub _marker: PhantomData<&'a ()>,
28410}
28411unsafe impl Send for ImageViewAddressPropertiesNVX<'_> {}
28412unsafe impl Sync for ImageViewAddressPropertiesNVX<'_> {}
28413impl ::core::default::Default for ImageViewAddressPropertiesNVX<'_> {
28414    #[inline]
28415    fn default() -> Self {
28416        Self {
28417            s_type: Self::STRUCTURE_TYPE,
28418            p_next: ::core::ptr::null_mut(),
28419            device_address: DeviceAddress::default(),
28420            size: DeviceSize::default(),
28421            _marker: PhantomData,
28422        }
28423    }
28424}
28425unsafe impl<'a> TaggedStructure for ImageViewAddressPropertiesNVX<'a> {
28426    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_ADDRESS_PROPERTIES_NVX;
28427}
28428impl<'a> ImageViewAddressPropertiesNVX<'a> {
28429    #[inline]
28430    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
28431        self.device_address = device_address;
28432        self
28433    }
28434    #[inline]
28435    pub fn size(mut self, size: DeviceSize) -> Self {
28436        self.size = size;
28437        self
28438    }
28439}
28440#[repr(C)]
28441#[cfg_attr(feature = "debug", derive(Debug))]
28442#[derive(Copy, Clone)]
28443#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPresentFrameTokenGGP.html>"]
28444#[must_use]
28445pub struct PresentFrameTokenGGP<'a> {
28446    pub s_type: StructureType,
28447    pub p_next: *const c_void,
28448    pub frame_token: GgpFrameToken,
28449    pub _marker: PhantomData<&'a ()>,
28450}
28451unsafe impl Send for PresentFrameTokenGGP<'_> {}
28452unsafe impl Sync for PresentFrameTokenGGP<'_> {}
28453impl ::core::default::Default for PresentFrameTokenGGP<'_> {
28454    #[inline]
28455    fn default() -> Self {
28456        Self {
28457            s_type: Self::STRUCTURE_TYPE,
28458            p_next: ::core::ptr::null(),
28459            frame_token: GgpFrameToken::default(),
28460            _marker: PhantomData,
28461        }
28462    }
28463}
28464unsafe impl<'a> TaggedStructure for PresentFrameTokenGGP<'a> {
28465    const STRUCTURE_TYPE: StructureType = StructureType::PRESENT_FRAME_TOKEN_GGP;
28466}
28467unsafe impl ExtendsPresentInfoKHR for PresentFrameTokenGGP<'_> {}
28468impl<'a> PresentFrameTokenGGP<'a> {
28469    #[inline]
28470    pub fn frame_token(mut self, frame_token: GgpFrameToken) -> Self {
28471        self.frame_token = frame_token;
28472        self
28473    }
28474}
28475#[repr(C)]
28476#[cfg_attr(feature = "debug", derive(Debug))]
28477#[derive(Copy, Clone, Default)]
28478#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCreationFeedback.html>"]
28479#[must_use]
28480pub struct PipelineCreationFeedback {
28481    pub flags: PipelineCreationFeedbackFlags,
28482    pub duration: u64,
28483}
28484impl PipelineCreationFeedback {
28485    #[inline]
28486    pub fn flags(mut self, flags: PipelineCreationFeedbackFlags) -> Self {
28487        self.flags = flags;
28488        self
28489    }
28490    #[inline]
28491    pub fn duration(mut self, duration: u64) -> Self {
28492        self.duration = duration;
28493        self
28494    }
28495}
28496#[repr(C)]
28497#[cfg_attr(feature = "debug", derive(Debug))]
28498#[derive(Copy, Clone)]
28499#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCreationFeedbackCreateInfo.html>"]
28500#[must_use]
28501pub struct PipelineCreationFeedbackCreateInfo<'a> {
28502    pub s_type: StructureType,
28503    pub p_next: *const c_void,
28504    pub p_pipeline_creation_feedback: *mut PipelineCreationFeedback,
28505    pub pipeline_stage_creation_feedback_count: u32,
28506    pub p_pipeline_stage_creation_feedbacks: *mut PipelineCreationFeedback,
28507    pub _marker: PhantomData<&'a ()>,
28508}
28509unsafe impl Send for PipelineCreationFeedbackCreateInfo<'_> {}
28510unsafe impl Sync for PipelineCreationFeedbackCreateInfo<'_> {}
28511impl ::core::default::Default for PipelineCreationFeedbackCreateInfo<'_> {
28512    #[inline]
28513    fn default() -> Self {
28514        Self {
28515            s_type: Self::STRUCTURE_TYPE,
28516            p_next: ::core::ptr::null(),
28517            p_pipeline_creation_feedback: ::core::ptr::null_mut(),
28518            pipeline_stage_creation_feedback_count: u32::default(),
28519            p_pipeline_stage_creation_feedbacks: ::core::ptr::null_mut(),
28520            _marker: PhantomData,
28521        }
28522    }
28523}
28524unsafe impl<'a> TaggedStructure for PipelineCreationFeedbackCreateInfo<'a> {
28525    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_CREATION_FEEDBACK_CREATE_INFO;
28526}
28527unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineCreationFeedbackCreateInfo<'_> {}
28528unsafe impl ExtendsComputePipelineCreateInfo for PipelineCreationFeedbackCreateInfo<'_> {}
28529unsafe impl ExtendsRayTracingPipelineCreateInfoNV for PipelineCreationFeedbackCreateInfo<'_> {}
28530unsafe impl ExtendsRayTracingPipelineCreateInfoKHR for PipelineCreationFeedbackCreateInfo<'_> {}
28531unsafe impl ExtendsExecutionGraphPipelineCreateInfoAMDX for PipelineCreationFeedbackCreateInfo<'_> {}
28532impl<'a> PipelineCreationFeedbackCreateInfo<'a> {
28533    #[inline]
28534    pub fn pipeline_creation_feedback(
28535        mut self,
28536        pipeline_creation_feedback: &'a mut PipelineCreationFeedback,
28537    ) -> Self {
28538        self.p_pipeline_creation_feedback = pipeline_creation_feedback;
28539        self
28540    }
28541    #[inline]
28542    pub fn pipeline_stage_creation_feedbacks(
28543        mut self,
28544        pipeline_stage_creation_feedbacks: &'a mut [PipelineCreationFeedback],
28545    ) -> Self {
28546        self.pipeline_stage_creation_feedback_count = pipeline_stage_creation_feedbacks.len() as _;
28547        self.p_pipeline_stage_creation_feedbacks = pipeline_stage_creation_feedbacks.as_mut_ptr();
28548        self
28549    }
28550}
28551#[repr(C)]
28552#[cfg_attr(feature = "debug", derive(Debug))]
28553#[derive(Copy, Clone)]
28554#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceFullScreenExclusiveInfoEXT.html>"]
28555#[must_use]
28556pub struct SurfaceFullScreenExclusiveInfoEXT<'a> {
28557    pub s_type: StructureType,
28558    pub p_next: *mut c_void,
28559    pub full_screen_exclusive: FullScreenExclusiveEXT,
28560    pub _marker: PhantomData<&'a ()>,
28561}
28562unsafe impl Send for SurfaceFullScreenExclusiveInfoEXT<'_> {}
28563unsafe impl Sync for SurfaceFullScreenExclusiveInfoEXT<'_> {}
28564impl ::core::default::Default for SurfaceFullScreenExclusiveInfoEXT<'_> {
28565    #[inline]
28566    fn default() -> Self {
28567        Self {
28568            s_type: Self::STRUCTURE_TYPE,
28569            p_next: ::core::ptr::null_mut(),
28570            full_screen_exclusive: FullScreenExclusiveEXT::default(),
28571            _marker: PhantomData,
28572        }
28573    }
28574}
28575unsafe impl<'a> TaggedStructure for SurfaceFullScreenExclusiveInfoEXT<'a> {
28576    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT;
28577}
28578unsafe impl ExtendsPhysicalDeviceSurfaceInfo2KHR for SurfaceFullScreenExclusiveInfoEXT<'_> {}
28579unsafe impl ExtendsSwapchainCreateInfoKHR for SurfaceFullScreenExclusiveInfoEXT<'_> {}
28580impl<'a> SurfaceFullScreenExclusiveInfoEXT<'a> {
28581    #[inline]
28582    pub fn full_screen_exclusive(mut self, full_screen_exclusive: FullScreenExclusiveEXT) -> Self {
28583        self.full_screen_exclusive = full_screen_exclusive;
28584        self
28585    }
28586}
28587#[repr(C)]
28588#[cfg_attr(feature = "debug", derive(Debug))]
28589#[derive(Copy, Clone)]
28590#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceFullScreenExclusiveWin32InfoEXT.html>"]
28591#[must_use]
28592pub struct SurfaceFullScreenExclusiveWin32InfoEXT<'a> {
28593    pub s_type: StructureType,
28594    pub p_next: *const c_void,
28595    pub hmonitor: HMONITOR,
28596    pub _marker: PhantomData<&'a ()>,
28597}
28598unsafe impl Send for SurfaceFullScreenExclusiveWin32InfoEXT<'_> {}
28599unsafe impl Sync for SurfaceFullScreenExclusiveWin32InfoEXT<'_> {}
28600impl ::core::default::Default for SurfaceFullScreenExclusiveWin32InfoEXT<'_> {
28601    #[inline]
28602    fn default() -> Self {
28603        Self {
28604            s_type: Self::STRUCTURE_TYPE,
28605            p_next: ::core::ptr::null(),
28606            hmonitor: unsafe { ::core::mem::zeroed() },
28607            _marker: PhantomData,
28608        }
28609    }
28610}
28611unsafe impl<'a> TaggedStructure for SurfaceFullScreenExclusiveWin32InfoEXT<'a> {
28612    const STRUCTURE_TYPE: StructureType =
28613        StructureType::SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT;
28614}
28615unsafe impl ExtendsPhysicalDeviceSurfaceInfo2KHR for SurfaceFullScreenExclusiveWin32InfoEXT<'_> {}
28616unsafe impl ExtendsSwapchainCreateInfoKHR for SurfaceFullScreenExclusiveWin32InfoEXT<'_> {}
28617impl<'a> SurfaceFullScreenExclusiveWin32InfoEXT<'a> {
28618    #[inline]
28619    pub fn hmonitor(mut self, hmonitor: HMONITOR) -> Self {
28620        self.hmonitor = hmonitor;
28621        self
28622    }
28623}
28624#[repr(C)]
28625#[cfg_attr(feature = "debug", derive(Debug))]
28626#[derive(Copy, Clone)]
28627#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceCapabilitiesFullScreenExclusiveEXT.html>"]
28628#[must_use]
28629pub struct SurfaceCapabilitiesFullScreenExclusiveEXT<'a> {
28630    pub s_type: StructureType,
28631    pub p_next: *mut c_void,
28632    pub full_screen_exclusive_supported: Bool32,
28633    pub _marker: PhantomData<&'a ()>,
28634}
28635unsafe impl Send for SurfaceCapabilitiesFullScreenExclusiveEXT<'_> {}
28636unsafe impl Sync for SurfaceCapabilitiesFullScreenExclusiveEXT<'_> {}
28637impl ::core::default::Default for SurfaceCapabilitiesFullScreenExclusiveEXT<'_> {
28638    #[inline]
28639    fn default() -> Self {
28640        Self {
28641            s_type: Self::STRUCTURE_TYPE,
28642            p_next: ::core::ptr::null_mut(),
28643            full_screen_exclusive_supported: Bool32::default(),
28644            _marker: PhantomData,
28645        }
28646    }
28647}
28648unsafe impl<'a> TaggedStructure for SurfaceCapabilitiesFullScreenExclusiveEXT<'a> {
28649    const STRUCTURE_TYPE: StructureType =
28650        StructureType::SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT;
28651}
28652unsafe impl ExtendsSurfaceCapabilities2KHR for SurfaceCapabilitiesFullScreenExclusiveEXT<'_> {}
28653impl<'a> SurfaceCapabilitiesFullScreenExclusiveEXT<'a> {
28654    #[inline]
28655    pub fn full_screen_exclusive_supported(
28656        mut self,
28657        full_screen_exclusive_supported: bool,
28658    ) -> Self {
28659        self.full_screen_exclusive_supported = full_screen_exclusive_supported.into();
28660        self
28661    }
28662}
28663#[repr(C)]
28664#[cfg_attr(feature = "debug", derive(Debug))]
28665#[derive(Copy, Clone)]
28666#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePresentBarrierFeaturesNV.html>"]
28667#[must_use]
28668pub struct PhysicalDevicePresentBarrierFeaturesNV<'a> {
28669    pub s_type: StructureType,
28670    pub p_next: *mut c_void,
28671    pub present_barrier: Bool32,
28672    pub _marker: PhantomData<&'a ()>,
28673}
28674unsafe impl Send for PhysicalDevicePresentBarrierFeaturesNV<'_> {}
28675unsafe impl Sync for PhysicalDevicePresentBarrierFeaturesNV<'_> {}
28676impl ::core::default::Default for PhysicalDevicePresentBarrierFeaturesNV<'_> {
28677    #[inline]
28678    fn default() -> Self {
28679        Self {
28680            s_type: Self::STRUCTURE_TYPE,
28681            p_next: ::core::ptr::null_mut(),
28682            present_barrier: Bool32::default(),
28683            _marker: PhantomData,
28684        }
28685    }
28686}
28687unsafe impl<'a> TaggedStructure for PhysicalDevicePresentBarrierFeaturesNV<'a> {
28688    const STRUCTURE_TYPE: StructureType =
28689        StructureType::PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV;
28690}
28691unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePresentBarrierFeaturesNV<'_> {}
28692unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePresentBarrierFeaturesNV<'_> {}
28693impl<'a> PhysicalDevicePresentBarrierFeaturesNV<'a> {
28694    #[inline]
28695    pub fn present_barrier(mut self, present_barrier: bool) -> Self {
28696        self.present_barrier = present_barrier.into();
28697        self
28698    }
28699}
28700#[repr(C)]
28701#[cfg_attr(feature = "debug", derive(Debug))]
28702#[derive(Copy, Clone)]
28703#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceCapabilitiesPresentBarrierNV.html>"]
28704#[must_use]
28705pub struct SurfaceCapabilitiesPresentBarrierNV<'a> {
28706    pub s_type: StructureType,
28707    pub p_next: *mut c_void,
28708    pub present_barrier_supported: Bool32,
28709    pub _marker: PhantomData<&'a ()>,
28710}
28711unsafe impl Send for SurfaceCapabilitiesPresentBarrierNV<'_> {}
28712unsafe impl Sync for SurfaceCapabilitiesPresentBarrierNV<'_> {}
28713impl ::core::default::Default for SurfaceCapabilitiesPresentBarrierNV<'_> {
28714    #[inline]
28715    fn default() -> Self {
28716        Self {
28717            s_type: Self::STRUCTURE_TYPE,
28718            p_next: ::core::ptr::null_mut(),
28719            present_barrier_supported: Bool32::default(),
28720            _marker: PhantomData,
28721        }
28722    }
28723}
28724unsafe impl<'a> TaggedStructure for SurfaceCapabilitiesPresentBarrierNV<'a> {
28725    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_CAPABILITIES_PRESENT_BARRIER_NV;
28726}
28727unsafe impl ExtendsSurfaceCapabilities2KHR for SurfaceCapabilitiesPresentBarrierNV<'_> {}
28728impl<'a> SurfaceCapabilitiesPresentBarrierNV<'a> {
28729    #[inline]
28730    pub fn present_barrier_supported(mut self, present_barrier_supported: bool) -> Self {
28731        self.present_barrier_supported = present_barrier_supported.into();
28732        self
28733    }
28734}
28735#[repr(C)]
28736#[cfg_attr(feature = "debug", derive(Debug))]
28737#[derive(Copy, Clone)]
28738#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainPresentBarrierCreateInfoNV.html>"]
28739#[must_use]
28740pub struct SwapchainPresentBarrierCreateInfoNV<'a> {
28741    pub s_type: StructureType,
28742    pub p_next: *mut c_void,
28743    pub present_barrier_enable: Bool32,
28744    pub _marker: PhantomData<&'a ()>,
28745}
28746unsafe impl Send for SwapchainPresentBarrierCreateInfoNV<'_> {}
28747unsafe impl Sync for SwapchainPresentBarrierCreateInfoNV<'_> {}
28748impl ::core::default::Default for SwapchainPresentBarrierCreateInfoNV<'_> {
28749    #[inline]
28750    fn default() -> Self {
28751        Self {
28752            s_type: Self::STRUCTURE_TYPE,
28753            p_next: ::core::ptr::null_mut(),
28754            present_barrier_enable: Bool32::default(),
28755            _marker: PhantomData,
28756        }
28757    }
28758}
28759unsafe impl<'a> TaggedStructure for SwapchainPresentBarrierCreateInfoNV<'a> {
28760    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV;
28761}
28762unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainPresentBarrierCreateInfoNV<'_> {}
28763impl<'a> SwapchainPresentBarrierCreateInfoNV<'a> {
28764    #[inline]
28765    pub fn present_barrier_enable(mut self, present_barrier_enable: bool) -> Self {
28766        self.present_barrier_enable = present_barrier_enable.into();
28767        self
28768    }
28769}
28770#[repr(C)]
28771#[cfg_attr(feature = "debug", derive(Debug))]
28772#[derive(Copy, Clone)]
28773#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePerformanceQueryFeaturesKHR.html>"]
28774#[must_use]
28775pub struct PhysicalDevicePerformanceQueryFeaturesKHR<'a> {
28776    pub s_type: StructureType,
28777    pub p_next: *mut c_void,
28778    pub performance_counter_query_pools: Bool32,
28779    pub performance_counter_multiple_query_pools: Bool32,
28780    pub _marker: PhantomData<&'a ()>,
28781}
28782unsafe impl Send for PhysicalDevicePerformanceQueryFeaturesKHR<'_> {}
28783unsafe impl Sync for PhysicalDevicePerformanceQueryFeaturesKHR<'_> {}
28784impl ::core::default::Default for PhysicalDevicePerformanceQueryFeaturesKHR<'_> {
28785    #[inline]
28786    fn default() -> Self {
28787        Self {
28788            s_type: Self::STRUCTURE_TYPE,
28789            p_next: ::core::ptr::null_mut(),
28790            performance_counter_query_pools: Bool32::default(),
28791            performance_counter_multiple_query_pools: Bool32::default(),
28792            _marker: PhantomData,
28793        }
28794    }
28795}
28796unsafe impl<'a> TaggedStructure for PhysicalDevicePerformanceQueryFeaturesKHR<'a> {
28797    const STRUCTURE_TYPE: StructureType =
28798        StructureType::PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR;
28799}
28800unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePerformanceQueryFeaturesKHR<'_> {}
28801unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePerformanceQueryFeaturesKHR<'_> {}
28802impl<'a> PhysicalDevicePerformanceQueryFeaturesKHR<'a> {
28803    #[inline]
28804    pub fn performance_counter_query_pools(
28805        mut self,
28806        performance_counter_query_pools: bool,
28807    ) -> Self {
28808        self.performance_counter_query_pools = performance_counter_query_pools.into();
28809        self
28810    }
28811    #[inline]
28812    pub fn performance_counter_multiple_query_pools(
28813        mut self,
28814        performance_counter_multiple_query_pools: bool,
28815    ) -> Self {
28816        self.performance_counter_multiple_query_pools =
28817            performance_counter_multiple_query_pools.into();
28818        self
28819    }
28820}
28821#[repr(C)]
28822#[cfg_attr(feature = "debug", derive(Debug))]
28823#[derive(Copy, Clone)]
28824#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePerformanceQueryPropertiesKHR.html>"]
28825#[must_use]
28826pub struct PhysicalDevicePerformanceQueryPropertiesKHR<'a> {
28827    pub s_type: StructureType,
28828    pub p_next: *mut c_void,
28829    pub allow_command_buffer_query_copies: Bool32,
28830    pub _marker: PhantomData<&'a ()>,
28831}
28832unsafe impl Send for PhysicalDevicePerformanceQueryPropertiesKHR<'_> {}
28833unsafe impl Sync for PhysicalDevicePerformanceQueryPropertiesKHR<'_> {}
28834impl ::core::default::Default for PhysicalDevicePerformanceQueryPropertiesKHR<'_> {
28835    #[inline]
28836    fn default() -> Self {
28837        Self {
28838            s_type: Self::STRUCTURE_TYPE,
28839            p_next: ::core::ptr::null_mut(),
28840            allow_command_buffer_query_copies: Bool32::default(),
28841            _marker: PhantomData,
28842        }
28843    }
28844}
28845unsafe impl<'a> TaggedStructure for PhysicalDevicePerformanceQueryPropertiesKHR<'a> {
28846    const STRUCTURE_TYPE: StructureType =
28847        StructureType::PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR;
28848}
28849unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePerformanceQueryPropertiesKHR<'_> {}
28850impl<'a> PhysicalDevicePerformanceQueryPropertiesKHR<'a> {
28851    #[inline]
28852    pub fn allow_command_buffer_query_copies(
28853        mut self,
28854        allow_command_buffer_query_copies: bool,
28855    ) -> Self {
28856        self.allow_command_buffer_query_copies = allow_command_buffer_query_copies.into();
28857        self
28858    }
28859}
28860#[repr(C)]
28861#[cfg_attr(feature = "debug", derive(Debug))]
28862#[derive(Copy, Clone)]
28863#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceCounterKHR.html>"]
28864#[must_use]
28865pub struct PerformanceCounterKHR<'a> {
28866    pub s_type: StructureType,
28867    pub p_next: *mut c_void,
28868    pub unit: PerformanceCounterUnitKHR,
28869    pub scope: PerformanceCounterScopeKHR,
28870    pub storage: PerformanceCounterStorageKHR,
28871    pub uuid: [u8; UUID_SIZE],
28872    pub _marker: PhantomData<&'a ()>,
28873}
28874unsafe impl Send for PerformanceCounterKHR<'_> {}
28875unsafe impl Sync for PerformanceCounterKHR<'_> {}
28876impl ::core::default::Default for PerformanceCounterKHR<'_> {
28877    #[inline]
28878    fn default() -> Self {
28879        Self {
28880            s_type: Self::STRUCTURE_TYPE,
28881            p_next: ::core::ptr::null_mut(),
28882            unit: PerformanceCounterUnitKHR::default(),
28883            scope: PerformanceCounterScopeKHR::default(),
28884            storage: PerformanceCounterStorageKHR::default(),
28885            uuid: unsafe { ::core::mem::zeroed() },
28886            _marker: PhantomData,
28887        }
28888    }
28889}
28890unsafe impl<'a> TaggedStructure for PerformanceCounterKHR<'a> {
28891    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_COUNTER_KHR;
28892}
28893impl<'a> PerformanceCounterKHR<'a> {
28894    #[inline]
28895    pub fn unit(mut self, unit: PerformanceCounterUnitKHR) -> Self {
28896        self.unit = unit;
28897        self
28898    }
28899    #[inline]
28900    pub fn scope(mut self, scope: PerformanceCounterScopeKHR) -> Self {
28901        self.scope = scope;
28902        self
28903    }
28904    #[inline]
28905    pub fn storage(mut self, storage: PerformanceCounterStorageKHR) -> Self {
28906        self.storage = storage;
28907        self
28908    }
28909    #[inline]
28910    pub fn uuid(mut self, uuid: [u8; UUID_SIZE]) -> Self {
28911        self.uuid = uuid;
28912        self
28913    }
28914}
28915#[repr(C)]
28916#[derive(Copy, Clone)]
28917#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceCounterDescriptionKHR.html>"]
28918#[must_use]
28919pub struct PerformanceCounterDescriptionKHR<'a> {
28920    pub s_type: StructureType,
28921    pub p_next: *mut c_void,
28922    pub flags: PerformanceCounterDescriptionFlagsKHR,
28923    pub name: [c_char; MAX_DESCRIPTION_SIZE],
28924    pub category: [c_char; MAX_DESCRIPTION_SIZE],
28925    pub description: [c_char; MAX_DESCRIPTION_SIZE],
28926    pub _marker: PhantomData<&'a ()>,
28927}
28928unsafe impl Send for PerformanceCounterDescriptionKHR<'_> {}
28929unsafe impl Sync for PerformanceCounterDescriptionKHR<'_> {}
28930#[cfg(feature = "debug")]
28931impl fmt::Debug for PerformanceCounterDescriptionKHR<'_> {
28932    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
28933        fmt.debug_struct("PerformanceCounterDescriptionKHR")
28934            .field("s_type", &self.s_type)
28935            .field("p_next", &self.p_next)
28936            .field("flags", &self.flags)
28937            .field("name", &self.name_as_c_str())
28938            .field("category", &self.category_as_c_str())
28939            .field("description", &self.description_as_c_str())
28940            .finish()
28941    }
28942}
28943impl ::core::default::Default for PerformanceCounterDescriptionKHR<'_> {
28944    #[inline]
28945    fn default() -> Self {
28946        Self {
28947            s_type: Self::STRUCTURE_TYPE,
28948            p_next: ::core::ptr::null_mut(),
28949            flags: PerformanceCounterDescriptionFlagsKHR::default(),
28950            name: unsafe { ::core::mem::zeroed() },
28951            category: unsafe { ::core::mem::zeroed() },
28952            description: unsafe { ::core::mem::zeroed() },
28953            _marker: PhantomData,
28954        }
28955    }
28956}
28957unsafe impl<'a> TaggedStructure for PerformanceCounterDescriptionKHR<'a> {
28958    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_COUNTER_DESCRIPTION_KHR;
28959}
28960impl<'a> PerformanceCounterDescriptionKHR<'a> {
28961    #[inline]
28962    pub fn flags(mut self, flags: PerformanceCounterDescriptionFlagsKHR) -> Self {
28963        self.flags = flags;
28964        self
28965    }
28966    #[inline]
28967    pub fn name(mut self, name: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
28968        write_c_str_slice_with_nul(&mut self.name, name).map(|()| self)
28969    }
28970    #[inline]
28971    pub fn name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
28972        wrap_c_str_slice_until_nul(&self.name)
28973    }
28974    #[inline]
28975    pub fn category(
28976        mut self,
28977        category: &CStr,
28978    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
28979        write_c_str_slice_with_nul(&mut self.category, category).map(|()| self)
28980    }
28981    #[inline]
28982    pub fn category_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
28983        wrap_c_str_slice_until_nul(&self.category)
28984    }
28985    #[inline]
28986    pub fn description(
28987        mut self,
28988        description: &CStr,
28989    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
28990        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
28991    }
28992    #[inline]
28993    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
28994        wrap_c_str_slice_until_nul(&self.description)
28995    }
28996}
28997#[repr(C)]
28998#[cfg_attr(feature = "debug", derive(Debug))]
28999#[derive(Copy, Clone)]
29000#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPoolPerformanceCreateInfoKHR.html>"]
29001#[must_use]
29002pub struct QueryPoolPerformanceCreateInfoKHR<'a> {
29003    pub s_type: StructureType,
29004    pub p_next: *const c_void,
29005    pub queue_family_index: u32,
29006    pub counter_index_count: u32,
29007    pub p_counter_indices: *const u32,
29008    pub _marker: PhantomData<&'a ()>,
29009}
29010unsafe impl Send for QueryPoolPerformanceCreateInfoKHR<'_> {}
29011unsafe impl Sync for QueryPoolPerformanceCreateInfoKHR<'_> {}
29012impl ::core::default::Default for QueryPoolPerformanceCreateInfoKHR<'_> {
29013    #[inline]
29014    fn default() -> Self {
29015        Self {
29016            s_type: Self::STRUCTURE_TYPE,
29017            p_next: ::core::ptr::null(),
29018            queue_family_index: u32::default(),
29019            counter_index_count: u32::default(),
29020            p_counter_indices: ::core::ptr::null(),
29021            _marker: PhantomData,
29022        }
29023    }
29024}
29025unsafe impl<'a> TaggedStructure for QueryPoolPerformanceCreateInfoKHR<'a> {
29026    const STRUCTURE_TYPE: StructureType = StructureType::QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR;
29027}
29028unsafe impl ExtendsQueryPoolCreateInfo for QueryPoolPerformanceCreateInfoKHR<'_> {}
29029impl<'a> QueryPoolPerformanceCreateInfoKHR<'a> {
29030    #[inline]
29031    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
29032        self.queue_family_index = queue_family_index;
29033        self
29034    }
29035    #[inline]
29036    pub fn counter_indices(mut self, counter_indices: &'a [u32]) -> Self {
29037        self.counter_index_count = counter_indices.len() as _;
29038        self.p_counter_indices = counter_indices.as_ptr();
29039        self
29040    }
29041}
29042#[repr(C)]
29043#[derive(Copy, Clone)]
29044#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceCounterResultKHR.html>"]
29045pub union PerformanceCounterResultKHR {
29046    pub int32: i32,
29047    pub int64: i64,
29048    pub uint32: u32,
29049    pub uint64: u64,
29050    pub float32: f32,
29051    pub float64: f64,
29052}
29053impl ::core::default::Default for PerformanceCounterResultKHR {
29054    #[inline]
29055    fn default() -> Self {
29056        unsafe { ::core::mem::zeroed() }
29057    }
29058}
29059#[repr(C)]
29060#[cfg_attr(feature = "debug", derive(Debug))]
29061#[derive(Copy, Clone)]
29062#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAcquireProfilingLockInfoKHR.html>"]
29063#[must_use]
29064pub struct AcquireProfilingLockInfoKHR<'a> {
29065    pub s_type: StructureType,
29066    pub p_next: *const c_void,
29067    pub flags: AcquireProfilingLockFlagsKHR,
29068    pub timeout: u64,
29069    pub _marker: PhantomData<&'a ()>,
29070}
29071unsafe impl Send for AcquireProfilingLockInfoKHR<'_> {}
29072unsafe impl Sync for AcquireProfilingLockInfoKHR<'_> {}
29073impl ::core::default::Default for AcquireProfilingLockInfoKHR<'_> {
29074    #[inline]
29075    fn default() -> Self {
29076        Self {
29077            s_type: Self::STRUCTURE_TYPE,
29078            p_next: ::core::ptr::null(),
29079            flags: AcquireProfilingLockFlagsKHR::default(),
29080            timeout: u64::default(),
29081            _marker: PhantomData,
29082        }
29083    }
29084}
29085unsafe impl<'a> TaggedStructure for AcquireProfilingLockInfoKHR<'a> {
29086    const STRUCTURE_TYPE: StructureType = StructureType::ACQUIRE_PROFILING_LOCK_INFO_KHR;
29087}
29088impl<'a> AcquireProfilingLockInfoKHR<'a> {
29089    #[inline]
29090    pub fn flags(mut self, flags: AcquireProfilingLockFlagsKHR) -> Self {
29091        self.flags = flags;
29092        self
29093    }
29094    #[inline]
29095    pub fn timeout(mut self, timeout: u64) -> Self {
29096        self.timeout = timeout;
29097        self
29098    }
29099}
29100#[repr(C)]
29101#[cfg_attr(feature = "debug", derive(Debug))]
29102#[derive(Copy, Clone)]
29103#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceQuerySubmitInfoKHR.html>"]
29104#[must_use]
29105pub struct PerformanceQuerySubmitInfoKHR<'a> {
29106    pub s_type: StructureType,
29107    pub p_next: *const c_void,
29108    pub counter_pass_index: u32,
29109    pub _marker: PhantomData<&'a ()>,
29110}
29111unsafe impl Send for PerformanceQuerySubmitInfoKHR<'_> {}
29112unsafe impl Sync for PerformanceQuerySubmitInfoKHR<'_> {}
29113impl ::core::default::Default for PerformanceQuerySubmitInfoKHR<'_> {
29114    #[inline]
29115    fn default() -> Self {
29116        Self {
29117            s_type: Self::STRUCTURE_TYPE,
29118            p_next: ::core::ptr::null(),
29119            counter_pass_index: u32::default(),
29120            _marker: PhantomData,
29121        }
29122    }
29123}
29124unsafe impl<'a> TaggedStructure for PerformanceQuerySubmitInfoKHR<'a> {
29125    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_QUERY_SUBMIT_INFO_KHR;
29126}
29127unsafe impl ExtendsSubmitInfo for PerformanceQuerySubmitInfoKHR<'_> {}
29128unsafe impl ExtendsSubmitInfo2 for PerformanceQuerySubmitInfoKHR<'_> {}
29129impl<'a> PerformanceQuerySubmitInfoKHR<'a> {
29130    #[inline]
29131    pub fn counter_pass_index(mut self, counter_pass_index: u32) -> Self {
29132        self.counter_pass_index = counter_pass_index;
29133        self
29134    }
29135}
29136#[repr(C)]
29137#[cfg_attr(feature = "debug", derive(Debug))]
29138#[derive(Copy, Clone)]
29139#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkHeadlessSurfaceCreateInfoEXT.html>"]
29140#[must_use]
29141pub struct HeadlessSurfaceCreateInfoEXT<'a> {
29142    pub s_type: StructureType,
29143    pub p_next: *const c_void,
29144    pub flags: HeadlessSurfaceCreateFlagsEXT,
29145    pub _marker: PhantomData<&'a ()>,
29146}
29147unsafe impl Send for HeadlessSurfaceCreateInfoEXT<'_> {}
29148unsafe impl Sync for HeadlessSurfaceCreateInfoEXT<'_> {}
29149impl ::core::default::Default for HeadlessSurfaceCreateInfoEXT<'_> {
29150    #[inline]
29151    fn default() -> Self {
29152        Self {
29153            s_type: Self::STRUCTURE_TYPE,
29154            p_next: ::core::ptr::null(),
29155            flags: HeadlessSurfaceCreateFlagsEXT::default(),
29156            _marker: PhantomData,
29157        }
29158    }
29159}
29160unsafe impl<'a> TaggedStructure for HeadlessSurfaceCreateInfoEXT<'a> {
29161    const STRUCTURE_TYPE: StructureType = StructureType::HEADLESS_SURFACE_CREATE_INFO_EXT;
29162}
29163impl<'a> HeadlessSurfaceCreateInfoEXT<'a> {
29164    #[inline]
29165    pub fn flags(mut self, flags: HeadlessSurfaceCreateFlagsEXT) -> Self {
29166        self.flags = flags;
29167        self
29168    }
29169}
29170#[repr(C)]
29171#[cfg_attr(feature = "debug", derive(Debug))]
29172#[derive(Copy, Clone)]
29173#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCoverageReductionModeFeaturesNV.html>"]
29174#[must_use]
29175pub struct PhysicalDeviceCoverageReductionModeFeaturesNV<'a> {
29176    pub s_type: StructureType,
29177    pub p_next: *mut c_void,
29178    pub coverage_reduction_mode: Bool32,
29179    pub _marker: PhantomData<&'a ()>,
29180}
29181unsafe impl Send for PhysicalDeviceCoverageReductionModeFeaturesNV<'_> {}
29182unsafe impl Sync for PhysicalDeviceCoverageReductionModeFeaturesNV<'_> {}
29183impl ::core::default::Default for PhysicalDeviceCoverageReductionModeFeaturesNV<'_> {
29184    #[inline]
29185    fn default() -> Self {
29186        Self {
29187            s_type: Self::STRUCTURE_TYPE,
29188            p_next: ::core::ptr::null_mut(),
29189            coverage_reduction_mode: Bool32::default(),
29190            _marker: PhantomData,
29191        }
29192    }
29193}
29194unsafe impl<'a> TaggedStructure for PhysicalDeviceCoverageReductionModeFeaturesNV<'a> {
29195    const STRUCTURE_TYPE: StructureType =
29196        StructureType::PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV;
29197}
29198unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCoverageReductionModeFeaturesNV<'_> {}
29199unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCoverageReductionModeFeaturesNV<'_> {}
29200impl<'a> PhysicalDeviceCoverageReductionModeFeaturesNV<'a> {
29201    #[inline]
29202    pub fn coverage_reduction_mode(mut self, coverage_reduction_mode: bool) -> Self {
29203        self.coverage_reduction_mode = coverage_reduction_mode.into();
29204        self
29205    }
29206}
29207#[repr(C)]
29208#[cfg_attr(feature = "debug", derive(Debug))]
29209#[derive(Copy, Clone)]
29210#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCoverageReductionStateCreateInfoNV.html>"]
29211#[must_use]
29212pub struct PipelineCoverageReductionStateCreateInfoNV<'a> {
29213    pub s_type: StructureType,
29214    pub p_next: *const c_void,
29215    pub flags: PipelineCoverageReductionStateCreateFlagsNV,
29216    pub coverage_reduction_mode: CoverageReductionModeNV,
29217    pub _marker: PhantomData<&'a ()>,
29218}
29219unsafe impl Send for PipelineCoverageReductionStateCreateInfoNV<'_> {}
29220unsafe impl Sync for PipelineCoverageReductionStateCreateInfoNV<'_> {}
29221impl ::core::default::Default for PipelineCoverageReductionStateCreateInfoNV<'_> {
29222    #[inline]
29223    fn default() -> Self {
29224        Self {
29225            s_type: Self::STRUCTURE_TYPE,
29226            p_next: ::core::ptr::null(),
29227            flags: PipelineCoverageReductionStateCreateFlagsNV::default(),
29228            coverage_reduction_mode: CoverageReductionModeNV::default(),
29229            _marker: PhantomData,
29230        }
29231    }
29232}
29233unsafe impl<'a> TaggedStructure for PipelineCoverageReductionStateCreateInfoNV<'a> {
29234    const STRUCTURE_TYPE: StructureType =
29235        StructureType::PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV;
29236}
29237unsafe impl ExtendsPipelineMultisampleStateCreateInfo
29238    for PipelineCoverageReductionStateCreateInfoNV<'_>
29239{
29240}
29241impl<'a> PipelineCoverageReductionStateCreateInfoNV<'a> {
29242    #[inline]
29243    pub fn flags(mut self, flags: PipelineCoverageReductionStateCreateFlagsNV) -> Self {
29244        self.flags = flags;
29245        self
29246    }
29247    #[inline]
29248    pub fn coverage_reduction_mode(
29249        mut self,
29250        coverage_reduction_mode: CoverageReductionModeNV,
29251    ) -> Self {
29252        self.coverage_reduction_mode = coverage_reduction_mode;
29253        self
29254    }
29255}
29256#[repr(C)]
29257#[cfg_attr(feature = "debug", derive(Debug))]
29258#[derive(Copy, Clone)]
29259#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFramebufferMixedSamplesCombinationNV.html>"]
29260#[must_use]
29261pub struct FramebufferMixedSamplesCombinationNV<'a> {
29262    pub s_type: StructureType,
29263    pub p_next: *mut c_void,
29264    pub coverage_reduction_mode: CoverageReductionModeNV,
29265    pub rasterization_samples: SampleCountFlags,
29266    pub depth_stencil_samples: SampleCountFlags,
29267    pub color_samples: SampleCountFlags,
29268    pub _marker: PhantomData<&'a ()>,
29269}
29270unsafe impl Send for FramebufferMixedSamplesCombinationNV<'_> {}
29271unsafe impl Sync for FramebufferMixedSamplesCombinationNV<'_> {}
29272impl ::core::default::Default for FramebufferMixedSamplesCombinationNV<'_> {
29273    #[inline]
29274    fn default() -> Self {
29275        Self {
29276            s_type: Self::STRUCTURE_TYPE,
29277            p_next: ::core::ptr::null_mut(),
29278            coverage_reduction_mode: CoverageReductionModeNV::default(),
29279            rasterization_samples: SampleCountFlags::default(),
29280            depth_stencil_samples: SampleCountFlags::default(),
29281            color_samples: SampleCountFlags::default(),
29282            _marker: PhantomData,
29283        }
29284    }
29285}
29286unsafe impl<'a> TaggedStructure for FramebufferMixedSamplesCombinationNV<'a> {
29287    const STRUCTURE_TYPE: StructureType = StructureType::FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV;
29288}
29289impl<'a> FramebufferMixedSamplesCombinationNV<'a> {
29290    #[inline]
29291    pub fn coverage_reduction_mode(
29292        mut self,
29293        coverage_reduction_mode: CoverageReductionModeNV,
29294    ) -> Self {
29295        self.coverage_reduction_mode = coverage_reduction_mode;
29296        self
29297    }
29298    #[inline]
29299    pub fn rasterization_samples(mut self, rasterization_samples: SampleCountFlags) -> Self {
29300        self.rasterization_samples = rasterization_samples;
29301        self
29302    }
29303    #[inline]
29304    pub fn depth_stencil_samples(mut self, depth_stencil_samples: SampleCountFlags) -> Self {
29305        self.depth_stencil_samples = depth_stencil_samples;
29306        self
29307    }
29308    #[inline]
29309    pub fn color_samples(mut self, color_samples: SampleCountFlags) -> Self {
29310        self.color_samples = color_samples;
29311        self
29312    }
29313}
29314#[repr(C)]
29315#[cfg_attr(feature = "debug", derive(Debug))]
29316#[derive(Copy, Clone)]
29317#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL.html>"]
29318#[must_use]
29319pub struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'a> {
29320    pub s_type: StructureType,
29321    pub p_next: *mut c_void,
29322    pub shader_integer_functions2: Bool32,
29323    pub _marker: PhantomData<&'a ()>,
29324}
29325unsafe impl Send for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'_> {}
29326unsafe impl Sync for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'_> {}
29327impl ::core::default::Default for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'_> {
29328    #[inline]
29329    fn default() -> Self {
29330        Self {
29331            s_type: Self::STRUCTURE_TYPE,
29332            p_next: ::core::ptr::null_mut(),
29333            shader_integer_functions2: Bool32::default(),
29334            _marker: PhantomData,
29335        }
29336    }
29337}
29338unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'a> {
29339    const STRUCTURE_TYPE: StructureType =
29340        StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL;
29341}
29342unsafe impl ExtendsPhysicalDeviceFeatures2
29343    for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'_>
29344{
29345}
29346unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'_> {}
29347impl<'a> PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL<'a> {
29348    #[inline]
29349    pub fn shader_integer_functions2(mut self, shader_integer_functions2: bool) -> Self {
29350        self.shader_integer_functions2 = shader_integer_functions2.into();
29351        self
29352    }
29353}
29354#[repr(C)]
29355#[derive(Copy, Clone)]
29356#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceValueDataINTEL.html>"]
29357pub union PerformanceValueDataINTEL {
29358    pub value32: u32,
29359    pub value64: u64,
29360    pub value_float: f32,
29361    pub value_bool: Bool32,
29362    pub value_string: *const c_char,
29363}
29364impl ::core::default::Default for PerformanceValueDataINTEL {
29365    #[inline]
29366    fn default() -> Self {
29367        unsafe { ::core::mem::zeroed() }
29368    }
29369}
29370#[repr(C)]
29371#[derive(Copy, Clone, Default)]
29372#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceValueINTEL.html>"]
29373#[must_use]
29374pub struct PerformanceValueINTEL {
29375    pub ty: PerformanceValueTypeINTEL,
29376    pub data: PerformanceValueDataINTEL,
29377}
29378#[cfg(feature = "debug")]
29379impl fmt::Debug for PerformanceValueINTEL {
29380    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
29381        fmt.debug_struct("PerformanceValueINTEL")
29382            .field("ty", &self.ty)
29383            .field("data", &"union")
29384            .finish()
29385    }
29386}
29387impl PerformanceValueINTEL {
29388    #[inline]
29389    pub fn ty(mut self, ty: PerformanceValueTypeINTEL) -> Self {
29390        self.ty = ty;
29391        self
29392    }
29393    #[inline]
29394    pub fn data(mut self, data: PerformanceValueDataINTEL) -> Self {
29395        self.data = data;
29396        self
29397    }
29398}
29399#[repr(C)]
29400#[cfg_attr(feature = "debug", derive(Debug))]
29401#[derive(Copy, Clone)]
29402#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInitializePerformanceApiInfoINTEL.html>"]
29403#[must_use]
29404pub struct InitializePerformanceApiInfoINTEL<'a> {
29405    pub s_type: StructureType,
29406    pub p_next: *const c_void,
29407    pub p_user_data: *mut c_void,
29408    pub _marker: PhantomData<&'a ()>,
29409}
29410unsafe impl Send for InitializePerformanceApiInfoINTEL<'_> {}
29411unsafe impl Sync for InitializePerformanceApiInfoINTEL<'_> {}
29412impl ::core::default::Default for InitializePerformanceApiInfoINTEL<'_> {
29413    #[inline]
29414    fn default() -> Self {
29415        Self {
29416            s_type: Self::STRUCTURE_TYPE,
29417            p_next: ::core::ptr::null(),
29418            p_user_data: ::core::ptr::null_mut(),
29419            _marker: PhantomData,
29420        }
29421    }
29422}
29423unsafe impl<'a> TaggedStructure for InitializePerformanceApiInfoINTEL<'a> {
29424    const STRUCTURE_TYPE: StructureType = StructureType::INITIALIZE_PERFORMANCE_API_INFO_INTEL;
29425}
29426impl<'a> InitializePerformanceApiInfoINTEL<'a> {
29427    #[inline]
29428    pub fn user_data(mut self, user_data: *mut c_void) -> Self {
29429        self.p_user_data = user_data;
29430        self
29431    }
29432}
29433#[repr(C)]
29434#[cfg_attr(feature = "debug", derive(Debug))]
29435#[derive(Copy, Clone)]
29436#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPoolPerformanceQueryCreateInfoINTEL.html>"]
29437#[must_use]
29438pub struct QueryPoolPerformanceQueryCreateInfoINTEL<'a> {
29439    pub s_type: StructureType,
29440    pub p_next: *const c_void,
29441    pub performance_counters_sampling: QueryPoolSamplingModeINTEL,
29442    pub _marker: PhantomData<&'a ()>,
29443}
29444unsafe impl Send for QueryPoolPerformanceQueryCreateInfoINTEL<'_> {}
29445unsafe impl Sync for QueryPoolPerformanceQueryCreateInfoINTEL<'_> {}
29446impl ::core::default::Default for QueryPoolPerformanceQueryCreateInfoINTEL<'_> {
29447    #[inline]
29448    fn default() -> Self {
29449        Self {
29450            s_type: Self::STRUCTURE_TYPE,
29451            p_next: ::core::ptr::null(),
29452            performance_counters_sampling: QueryPoolSamplingModeINTEL::default(),
29453            _marker: PhantomData,
29454        }
29455    }
29456}
29457unsafe impl<'a> TaggedStructure for QueryPoolPerformanceQueryCreateInfoINTEL<'a> {
29458    const STRUCTURE_TYPE: StructureType =
29459        StructureType::QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL;
29460}
29461unsafe impl ExtendsQueryPoolCreateInfo for QueryPoolPerformanceQueryCreateInfoINTEL<'_> {}
29462impl<'a> QueryPoolPerformanceQueryCreateInfoINTEL<'a> {
29463    #[inline]
29464    pub fn performance_counters_sampling(
29465        mut self,
29466        performance_counters_sampling: QueryPoolSamplingModeINTEL,
29467    ) -> Self {
29468        self.performance_counters_sampling = performance_counters_sampling;
29469        self
29470    }
29471}
29472#[repr(C)]
29473#[cfg_attr(feature = "debug", derive(Debug))]
29474#[derive(Copy, Clone)]
29475#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceMarkerInfoINTEL.html>"]
29476#[must_use]
29477pub struct PerformanceMarkerInfoINTEL<'a> {
29478    pub s_type: StructureType,
29479    pub p_next: *const c_void,
29480    pub marker: u64,
29481    pub _marker: PhantomData<&'a ()>,
29482}
29483unsafe impl Send for PerformanceMarkerInfoINTEL<'_> {}
29484unsafe impl Sync for PerformanceMarkerInfoINTEL<'_> {}
29485impl ::core::default::Default for PerformanceMarkerInfoINTEL<'_> {
29486    #[inline]
29487    fn default() -> Self {
29488        Self {
29489            s_type: Self::STRUCTURE_TYPE,
29490            p_next: ::core::ptr::null(),
29491            marker: u64::default(),
29492            _marker: PhantomData,
29493        }
29494    }
29495}
29496unsafe impl<'a> TaggedStructure for PerformanceMarkerInfoINTEL<'a> {
29497    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_MARKER_INFO_INTEL;
29498}
29499impl<'a> PerformanceMarkerInfoINTEL<'a> {
29500    #[inline]
29501    pub fn marker(mut self, marker: u64) -> Self {
29502        self.marker = marker;
29503        self
29504    }
29505}
29506#[repr(C)]
29507#[cfg_attr(feature = "debug", derive(Debug))]
29508#[derive(Copy, Clone)]
29509#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceStreamMarkerInfoINTEL.html>"]
29510#[must_use]
29511pub struct PerformanceStreamMarkerInfoINTEL<'a> {
29512    pub s_type: StructureType,
29513    pub p_next: *const c_void,
29514    pub marker: u32,
29515    pub _marker: PhantomData<&'a ()>,
29516}
29517unsafe impl Send for PerformanceStreamMarkerInfoINTEL<'_> {}
29518unsafe impl Sync for PerformanceStreamMarkerInfoINTEL<'_> {}
29519impl ::core::default::Default for PerformanceStreamMarkerInfoINTEL<'_> {
29520    #[inline]
29521    fn default() -> Self {
29522        Self {
29523            s_type: Self::STRUCTURE_TYPE,
29524            p_next: ::core::ptr::null(),
29525            marker: u32::default(),
29526            _marker: PhantomData,
29527        }
29528    }
29529}
29530unsafe impl<'a> TaggedStructure for PerformanceStreamMarkerInfoINTEL<'a> {
29531    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_STREAM_MARKER_INFO_INTEL;
29532}
29533impl<'a> PerformanceStreamMarkerInfoINTEL<'a> {
29534    #[inline]
29535    pub fn marker(mut self, marker: u32) -> Self {
29536        self.marker = marker;
29537        self
29538    }
29539}
29540#[repr(C)]
29541#[cfg_attr(feature = "debug", derive(Debug))]
29542#[derive(Copy, Clone)]
29543#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceOverrideInfoINTEL.html>"]
29544#[must_use]
29545pub struct PerformanceOverrideInfoINTEL<'a> {
29546    pub s_type: StructureType,
29547    pub p_next: *const c_void,
29548    pub ty: PerformanceOverrideTypeINTEL,
29549    pub enable: Bool32,
29550    pub parameter: u64,
29551    pub _marker: PhantomData<&'a ()>,
29552}
29553unsafe impl Send for PerformanceOverrideInfoINTEL<'_> {}
29554unsafe impl Sync for PerformanceOverrideInfoINTEL<'_> {}
29555impl ::core::default::Default for PerformanceOverrideInfoINTEL<'_> {
29556    #[inline]
29557    fn default() -> Self {
29558        Self {
29559            s_type: Self::STRUCTURE_TYPE,
29560            p_next: ::core::ptr::null(),
29561            ty: PerformanceOverrideTypeINTEL::default(),
29562            enable: Bool32::default(),
29563            parameter: u64::default(),
29564            _marker: PhantomData,
29565        }
29566    }
29567}
29568unsafe impl<'a> TaggedStructure for PerformanceOverrideInfoINTEL<'a> {
29569    const STRUCTURE_TYPE: StructureType = StructureType::PERFORMANCE_OVERRIDE_INFO_INTEL;
29570}
29571impl<'a> PerformanceOverrideInfoINTEL<'a> {
29572    #[inline]
29573    pub fn ty(mut self, ty: PerformanceOverrideTypeINTEL) -> Self {
29574        self.ty = ty;
29575        self
29576    }
29577    #[inline]
29578    pub fn enable(mut self, enable: bool) -> Self {
29579        self.enable = enable.into();
29580        self
29581    }
29582    #[inline]
29583    pub fn parameter(mut self, parameter: u64) -> Self {
29584        self.parameter = parameter;
29585        self
29586    }
29587}
29588#[repr(C)]
29589#[cfg_attr(feature = "debug", derive(Debug))]
29590#[derive(Copy, Clone)]
29591#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPerformanceConfigurationAcquireInfoINTEL.html>"]
29592#[must_use]
29593pub struct PerformanceConfigurationAcquireInfoINTEL<'a> {
29594    pub s_type: StructureType,
29595    pub p_next: *const c_void,
29596    pub ty: PerformanceConfigurationTypeINTEL,
29597    pub _marker: PhantomData<&'a ()>,
29598}
29599unsafe impl Send for PerformanceConfigurationAcquireInfoINTEL<'_> {}
29600unsafe impl Sync for PerformanceConfigurationAcquireInfoINTEL<'_> {}
29601impl ::core::default::Default for PerformanceConfigurationAcquireInfoINTEL<'_> {
29602    #[inline]
29603    fn default() -> Self {
29604        Self {
29605            s_type: Self::STRUCTURE_TYPE,
29606            p_next: ::core::ptr::null(),
29607            ty: PerformanceConfigurationTypeINTEL::default(),
29608            _marker: PhantomData,
29609        }
29610    }
29611}
29612unsafe impl<'a> TaggedStructure for PerformanceConfigurationAcquireInfoINTEL<'a> {
29613    const STRUCTURE_TYPE: StructureType =
29614        StructureType::PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL;
29615}
29616impl<'a> PerformanceConfigurationAcquireInfoINTEL<'a> {
29617    #[inline]
29618    pub fn ty(mut self, ty: PerformanceConfigurationTypeINTEL) -> Self {
29619        self.ty = ty;
29620        self
29621    }
29622}
29623#[repr(C)]
29624#[cfg_attr(feature = "debug", derive(Debug))]
29625#[derive(Copy, Clone)]
29626#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderClockFeaturesKHR.html>"]
29627#[must_use]
29628pub struct PhysicalDeviceShaderClockFeaturesKHR<'a> {
29629    pub s_type: StructureType,
29630    pub p_next: *mut c_void,
29631    pub shader_subgroup_clock: Bool32,
29632    pub shader_device_clock: Bool32,
29633    pub _marker: PhantomData<&'a ()>,
29634}
29635unsafe impl Send for PhysicalDeviceShaderClockFeaturesKHR<'_> {}
29636unsafe impl Sync for PhysicalDeviceShaderClockFeaturesKHR<'_> {}
29637impl ::core::default::Default for PhysicalDeviceShaderClockFeaturesKHR<'_> {
29638    #[inline]
29639    fn default() -> Self {
29640        Self {
29641            s_type: Self::STRUCTURE_TYPE,
29642            p_next: ::core::ptr::null_mut(),
29643            shader_subgroup_clock: Bool32::default(),
29644            shader_device_clock: Bool32::default(),
29645            _marker: PhantomData,
29646        }
29647    }
29648}
29649unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderClockFeaturesKHR<'a> {
29650    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR;
29651}
29652unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderClockFeaturesKHR<'_> {}
29653unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderClockFeaturesKHR<'_> {}
29654impl<'a> PhysicalDeviceShaderClockFeaturesKHR<'a> {
29655    #[inline]
29656    pub fn shader_subgroup_clock(mut self, shader_subgroup_clock: bool) -> Self {
29657        self.shader_subgroup_clock = shader_subgroup_clock.into();
29658        self
29659    }
29660    #[inline]
29661    pub fn shader_device_clock(mut self, shader_device_clock: bool) -> Self {
29662        self.shader_device_clock = shader_device_clock.into();
29663        self
29664    }
29665}
29666#[repr(C)]
29667#[cfg_attr(feature = "debug", derive(Debug))]
29668#[derive(Copy, Clone)]
29669#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceIndexTypeUint8FeaturesKHR.html>"]
29670#[must_use]
29671pub struct PhysicalDeviceIndexTypeUint8FeaturesKHR<'a> {
29672    pub s_type: StructureType,
29673    pub p_next: *mut c_void,
29674    pub index_type_uint8: Bool32,
29675    pub _marker: PhantomData<&'a ()>,
29676}
29677unsafe impl Send for PhysicalDeviceIndexTypeUint8FeaturesKHR<'_> {}
29678unsafe impl Sync for PhysicalDeviceIndexTypeUint8FeaturesKHR<'_> {}
29679impl ::core::default::Default for PhysicalDeviceIndexTypeUint8FeaturesKHR<'_> {
29680    #[inline]
29681    fn default() -> Self {
29682        Self {
29683            s_type: Self::STRUCTURE_TYPE,
29684            p_next: ::core::ptr::null_mut(),
29685            index_type_uint8: Bool32::default(),
29686            _marker: PhantomData,
29687        }
29688    }
29689}
29690unsafe impl<'a> TaggedStructure for PhysicalDeviceIndexTypeUint8FeaturesKHR<'a> {
29691    const STRUCTURE_TYPE: StructureType =
29692        StructureType::PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR;
29693}
29694unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceIndexTypeUint8FeaturesKHR<'_> {}
29695unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceIndexTypeUint8FeaturesKHR<'_> {}
29696impl<'a> PhysicalDeviceIndexTypeUint8FeaturesKHR<'a> {
29697    #[inline]
29698    pub fn index_type_uint8(mut self, index_type_uint8: bool) -> Self {
29699        self.index_type_uint8 = index_type_uint8.into();
29700        self
29701    }
29702}
29703#[repr(C)]
29704#[cfg_attr(feature = "debug", derive(Debug))]
29705#[derive(Copy, Clone)]
29706#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderSMBuiltinsPropertiesNV.html>"]
29707#[must_use]
29708pub struct PhysicalDeviceShaderSMBuiltinsPropertiesNV<'a> {
29709    pub s_type: StructureType,
29710    pub p_next: *mut c_void,
29711    pub shader_sm_count: u32,
29712    pub shader_warps_per_sm: u32,
29713    pub _marker: PhantomData<&'a ()>,
29714}
29715unsafe impl Send for PhysicalDeviceShaderSMBuiltinsPropertiesNV<'_> {}
29716unsafe impl Sync for PhysicalDeviceShaderSMBuiltinsPropertiesNV<'_> {}
29717impl ::core::default::Default for PhysicalDeviceShaderSMBuiltinsPropertiesNV<'_> {
29718    #[inline]
29719    fn default() -> Self {
29720        Self {
29721            s_type: Self::STRUCTURE_TYPE,
29722            p_next: ::core::ptr::null_mut(),
29723            shader_sm_count: u32::default(),
29724            shader_warps_per_sm: u32::default(),
29725            _marker: PhantomData,
29726        }
29727    }
29728}
29729unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderSMBuiltinsPropertiesNV<'a> {
29730    const STRUCTURE_TYPE: StructureType =
29731        StructureType::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV;
29732}
29733unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderSMBuiltinsPropertiesNV<'_> {}
29734impl<'a> PhysicalDeviceShaderSMBuiltinsPropertiesNV<'a> {
29735    #[inline]
29736    pub fn shader_sm_count(mut self, shader_sm_count: u32) -> Self {
29737        self.shader_sm_count = shader_sm_count;
29738        self
29739    }
29740    #[inline]
29741    pub fn shader_warps_per_sm(mut self, shader_warps_per_sm: u32) -> Self {
29742        self.shader_warps_per_sm = shader_warps_per_sm;
29743        self
29744    }
29745}
29746#[repr(C)]
29747#[cfg_attr(feature = "debug", derive(Debug))]
29748#[derive(Copy, Clone)]
29749#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderSMBuiltinsFeaturesNV.html>"]
29750#[must_use]
29751pub struct PhysicalDeviceShaderSMBuiltinsFeaturesNV<'a> {
29752    pub s_type: StructureType,
29753    pub p_next: *mut c_void,
29754    pub shader_sm_builtins: Bool32,
29755    pub _marker: PhantomData<&'a ()>,
29756}
29757unsafe impl Send for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'_> {}
29758unsafe impl Sync for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'_> {}
29759impl ::core::default::Default for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'_> {
29760    #[inline]
29761    fn default() -> Self {
29762        Self {
29763            s_type: Self::STRUCTURE_TYPE,
29764            p_next: ::core::ptr::null_mut(),
29765            shader_sm_builtins: Bool32::default(),
29766            _marker: PhantomData,
29767        }
29768    }
29769}
29770unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'a> {
29771    const STRUCTURE_TYPE: StructureType =
29772        StructureType::PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV;
29773}
29774unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'_> {}
29775unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderSMBuiltinsFeaturesNV<'_> {}
29776impl<'a> PhysicalDeviceShaderSMBuiltinsFeaturesNV<'a> {
29777    #[inline]
29778    pub fn shader_sm_builtins(mut self, shader_sm_builtins: bool) -> Self {
29779        self.shader_sm_builtins = shader_sm_builtins.into();
29780        self
29781    }
29782}
29783#[repr(C)]
29784#[cfg_attr(feature = "debug", derive(Debug))]
29785#[derive(Copy, Clone)]
29786#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.html>"]
29787#[must_use]
29788pub struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'a> {
29789    pub s_type: StructureType,
29790    pub p_next: *mut c_void,
29791    pub fragment_shader_sample_interlock: Bool32,
29792    pub fragment_shader_pixel_interlock: Bool32,
29793    pub fragment_shader_shading_rate_interlock: Bool32,
29794    pub _marker: PhantomData<&'a ()>,
29795}
29796unsafe impl Send for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'_> {}
29797unsafe impl Sync for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'_> {}
29798impl ::core::default::Default for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'_> {
29799    #[inline]
29800    fn default() -> Self {
29801        Self {
29802            s_type: Self::STRUCTURE_TYPE,
29803            p_next: ::core::ptr::null_mut(),
29804            fragment_shader_sample_interlock: Bool32::default(),
29805            fragment_shader_pixel_interlock: Bool32::default(),
29806            fragment_shader_shading_rate_interlock: Bool32::default(),
29807            _marker: PhantomData,
29808        }
29809    }
29810}
29811unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'a> {
29812    const STRUCTURE_TYPE: StructureType =
29813        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT;
29814}
29815unsafe impl ExtendsPhysicalDeviceFeatures2
29816    for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'_>
29817{
29818}
29819unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'_> {}
29820impl<'a> PhysicalDeviceFragmentShaderInterlockFeaturesEXT<'a> {
29821    #[inline]
29822    pub fn fragment_shader_sample_interlock(
29823        mut self,
29824        fragment_shader_sample_interlock: bool,
29825    ) -> Self {
29826        self.fragment_shader_sample_interlock = fragment_shader_sample_interlock.into();
29827        self
29828    }
29829    #[inline]
29830    pub fn fragment_shader_pixel_interlock(
29831        mut self,
29832        fragment_shader_pixel_interlock: bool,
29833    ) -> Self {
29834        self.fragment_shader_pixel_interlock = fragment_shader_pixel_interlock.into();
29835        self
29836    }
29837    #[inline]
29838    pub fn fragment_shader_shading_rate_interlock(
29839        mut self,
29840        fragment_shader_shading_rate_interlock: bool,
29841    ) -> Self {
29842        self.fragment_shader_shading_rate_interlock = fragment_shader_shading_rate_interlock.into();
29843        self
29844    }
29845}
29846#[repr(C)]
29847#[cfg_attr(feature = "debug", derive(Debug))]
29848#[derive(Copy, Clone)]
29849#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.html>"]
29850#[must_use]
29851pub struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'a> {
29852    pub s_type: StructureType,
29853    pub p_next: *mut c_void,
29854    pub separate_depth_stencil_layouts: Bool32,
29855    pub _marker: PhantomData<&'a ()>,
29856}
29857unsafe impl Send for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'_> {}
29858unsafe impl Sync for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'_> {}
29859impl ::core::default::Default for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'_> {
29860    #[inline]
29861    fn default() -> Self {
29862        Self {
29863            s_type: Self::STRUCTURE_TYPE,
29864            p_next: ::core::ptr::null_mut(),
29865            separate_depth_stencil_layouts: Bool32::default(),
29866            _marker: PhantomData,
29867        }
29868    }
29869}
29870unsafe impl<'a> TaggedStructure for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'a> {
29871    const STRUCTURE_TYPE: StructureType =
29872        StructureType::PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES;
29873}
29874unsafe impl ExtendsPhysicalDeviceFeatures2
29875    for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'_>
29876{
29877}
29878unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'_> {}
29879impl<'a> PhysicalDeviceSeparateDepthStencilLayoutsFeatures<'a> {
29880    #[inline]
29881    pub fn separate_depth_stencil_layouts(mut self, separate_depth_stencil_layouts: bool) -> Self {
29882        self.separate_depth_stencil_layouts = separate_depth_stencil_layouts.into();
29883        self
29884    }
29885}
29886#[repr(C)]
29887#[cfg_attr(feature = "debug", derive(Debug))]
29888#[derive(Copy, Clone)]
29889#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentReferenceStencilLayout.html>"]
29890#[must_use]
29891pub struct AttachmentReferenceStencilLayout<'a> {
29892    pub s_type: StructureType,
29893    pub p_next: *mut c_void,
29894    pub stencil_layout: ImageLayout,
29895    pub _marker: PhantomData<&'a ()>,
29896}
29897unsafe impl Send for AttachmentReferenceStencilLayout<'_> {}
29898unsafe impl Sync for AttachmentReferenceStencilLayout<'_> {}
29899impl ::core::default::Default for AttachmentReferenceStencilLayout<'_> {
29900    #[inline]
29901    fn default() -> Self {
29902        Self {
29903            s_type: Self::STRUCTURE_TYPE,
29904            p_next: ::core::ptr::null_mut(),
29905            stencil_layout: ImageLayout::default(),
29906            _marker: PhantomData,
29907        }
29908    }
29909}
29910unsafe impl<'a> TaggedStructure for AttachmentReferenceStencilLayout<'a> {
29911    const STRUCTURE_TYPE: StructureType = StructureType::ATTACHMENT_REFERENCE_STENCIL_LAYOUT;
29912}
29913unsafe impl ExtendsAttachmentReference2 for AttachmentReferenceStencilLayout<'_> {}
29914impl<'a> AttachmentReferenceStencilLayout<'a> {
29915    #[inline]
29916    pub fn stencil_layout(mut self, stencil_layout: ImageLayout) -> Self {
29917        self.stencil_layout = stencil_layout;
29918        self
29919    }
29920}
29921#[repr(C)]
29922#[cfg_attr(feature = "debug", derive(Debug))]
29923#[derive(Copy, Clone)]
29924#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT.html>"]
29925#[must_use]
29926pub struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'a> {
29927    pub s_type: StructureType,
29928    pub p_next: *mut c_void,
29929    pub primitive_topology_list_restart: Bool32,
29930    pub primitive_topology_patch_list_restart: Bool32,
29931    pub _marker: PhantomData<&'a ()>,
29932}
29933unsafe impl Send for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'_> {}
29934unsafe impl Sync for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'_> {}
29935impl ::core::default::Default for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'_> {
29936    #[inline]
29937    fn default() -> Self {
29938        Self {
29939            s_type: Self::STRUCTURE_TYPE,
29940            p_next: ::core::ptr::null_mut(),
29941            primitive_topology_list_restart: Bool32::default(),
29942            primitive_topology_patch_list_restart: Bool32::default(),
29943            _marker: PhantomData,
29944        }
29945    }
29946}
29947unsafe impl<'a> TaggedStructure for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'a> {
29948    const STRUCTURE_TYPE: StructureType =
29949        StructureType::PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT;
29950}
29951unsafe impl ExtendsPhysicalDeviceFeatures2
29952    for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'_>
29953{
29954}
29955unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'_> {}
29956impl<'a> PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT<'a> {
29957    #[inline]
29958    pub fn primitive_topology_list_restart(
29959        mut self,
29960        primitive_topology_list_restart: bool,
29961    ) -> Self {
29962        self.primitive_topology_list_restart = primitive_topology_list_restart.into();
29963        self
29964    }
29965    #[inline]
29966    pub fn primitive_topology_patch_list_restart(
29967        mut self,
29968        primitive_topology_patch_list_restart: bool,
29969    ) -> Self {
29970        self.primitive_topology_patch_list_restart = primitive_topology_patch_list_restart.into();
29971        self
29972    }
29973}
29974#[repr(C)]
29975#[cfg_attr(feature = "debug", derive(Debug))]
29976#[derive(Copy, Clone)]
29977#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentDescriptionStencilLayout.html>"]
29978#[must_use]
29979pub struct AttachmentDescriptionStencilLayout<'a> {
29980    pub s_type: StructureType,
29981    pub p_next: *mut c_void,
29982    pub stencil_initial_layout: ImageLayout,
29983    pub stencil_final_layout: ImageLayout,
29984    pub _marker: PhantomData<&'a ()>,
29985}
29986unsafe impl Send for AttachmentDescriptionStencilLayout<'_> {}
29987unsafe impl Sync for AttachmentDescriptionStencilLayout<'_> {}
29988impl ::core::default::Default for AttachmentDescriptionStencilLayout<'_> {
29989    #[inline]
29990    fn default() -> Self {
29991        Self {
29992            s_type: Self::STRUCTURE_TYPE,
29993            p_next: ::core::ptr::null_mut(),
29994            stencil_initial_layout: ImageLayout::default(),
29995            stencil_final_layout: ImageLayout::default(),
29996            _marker: PhantomData,
29997        }
29998    }
29999}
30000unsafe impl<'a> TaggedStructure for AttachmentDescriptionStencilLayout<'a> {
30001    const STRUCTURE_TYPE: StructureType = StructureType::ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT;
30002}
30003unsafe impl ExtendsAttachmentDescription2 for AttachmentDescriptionStencilLayout<'_> {}
30004impl<'a> AttachmentDescriptionStencilLayout<'a> {
30005    #[inline]
30006    pub fn stencil_initial_layout(mut self, stencil_initial_layout: ImageLayout) -> Self {
30007        self.stencil_initial_layout = stencil_initial_layout;
30008        self
30009    }
30010    #[inline]
30011    pub fn stencil_final_layout(mut self, stencil_final_layout: ImageLayout) -> Self {
30012        self.stencil_final_layout = stencil_final_layout;
30013        self
30014    }
30015}
30016#[repr(C)]
30017#[cfg_attr(feature = "debug", derive(Debug))]
30018#[derive(Copy, Clone)]
30019#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR.html>"]
30020#[must_use]
30021pub struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'a> {
30022    pub s_type: StructureType,
30023    pub p_next: *mut c_void,
30024    pub pipeline_executable_info: Bool32,
30025    pub _marker: PhantomData<&'a ()>,
30026}
30027unsafe impl Send for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'_> {}
30028unsafe impl Sync for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'_> {}
30029impl ::core::default::Default for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'_> {
30030    #[inline]
30031    fn default() -> Self {
30032        Self {
30033            s_type: Self::STRUCTURE_TYPE,
30034            p_next: ::core::ptr::null_mut(),
30035            pipeline_executable_info: Bool32::default(),
30036            _marker: PhantomData,
30037        }
30038    }
30039}
30040unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'a> {
30041    const STRUCTURE_TYPE: StructureType =
30042        StructureType::PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR;
30043}
30044unsafe impl ExtendsPhysicalDeviceFeatures2
30045    for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'_>
30046{
30047}
30048unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'_> {}
30049impl<'a> PhysicalDevicePipelineExecutablePropertiesFeaturesKHR<'a> {
30050    #[inline]
30051    pub fn pipeline_executable_info(mut self, pipeline_executable_info: bool) -> Self {
30052        self.pipeline_executable_info = pipeline_executable_info.into();
30053        self
30054    }
30055}
30056#[repr(C)]
30057#[cfg_attr(feature = "debug", derive(Debug))]
30058#[derive(Copy, Clone)]
30059#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineInfoKHR.html>"]
30060#[must_use]
30061pub struct PipelineInfoKHR<'a> {
30062    pub s_type: StructureType,
30063    pub p_next: *const c_void,
30064    pub pipeline: Pipeline,
30065    pub _marker: PhantomData<&'a ()>,
30066}
30067unsafe impl Send for PipelineInfoKHR<'_> {}
30068unsafe impl Sync for PipelineInfoKHR<'_> {}
30069impl ::core::default::Default for PipelineInfoKHR<'_> {
30070    #[inline]
30071    fn default() -> Self {
30072        Self {
30073            s_type: Self::STRUCTURE_TYPE,
30074            p_next: ::core::ptr::null(),
30075            pipeline: Pipeline::default(),
30076            _marker: PhantomData,
30077        }
30078    }
30079}
30080unsafe impl<'a> TaggedStructure for PipelineInfoKHR<'a> {
30081    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_INFO_KHR;
30082}
30083impl<'a> PipelineInfoKHR<'a> {
30084    #[inline]
30085    pub fn pipeline(mut self, pipeline: Pipeline) -> Self {
30086        self.pipeline = pipeline;
30087        self
30088    }
30089}
30090#[repr(C)]
30091#[derive(Copy, Clone)]
30092#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineExecutablePropertiesKHR.html>"]
30093#[must_use]
30094pub struct PipelineExecutablePropertiesKHR<'a> {
30095    pub s_type: StructureType,
30096    pub p_next: *mut c_void,
30097    pub stages: ShaderStageFlags,
30098    pub name: [c_char; MAX_DESCRIPTION_SIZE],
30099    pub description: [c_char; MAX_DESCRIPTION_SIZE],
30100    pub subgroup_size: u32,
30101    pub _marker: PhantomData<&'a ()>,
30102}
30103unsafe impl Send for PipelineExecutablePropertiesKHR<'_> {}
30104unsafe impl Sync for PipelineExecutablePropertiesKHR<'_> {}
30105#[cfg(feature = "debug")]
30106impl fmt::Debug for PipelineExecutablePropertiesKHR<'_> {
30107    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
30108        fmt.debug_struct("PipelineExecutablePropertiesKHR")
30109            .field("s_type", &self.s_type)
30110            .field("p_next", &self.p_next)
30111            .field("stages", &self.stages)
30112            .field("name", &self.name_as_c_str())
30113            .field("description", &self.description_as_c_str())
30114            .field("subgroup_size", &self.subgroup_size)
30115            .finish()
30116    }
30117}
30118impl ::core::default::Default for PipelineExecutablePropertiesKHR<'_> {
30119    #[inline]
30120    fn default() -> Self {
30121        Self {
30122            s_type: Self::STRUCTURE_TYPE,
30123            p_next: ::core::ptr::null_mut(),
30124            stages: ShaderStageFlags::default(),
30125            name: unsafe { ::core::mem::zeroed() },
30126            description: unsafe { ::core::mem::zeroed() },
30127            subgroup_size: u32::default(),
30128            _marker: PhantomData,
30129        }
30130    }
30131}
30132unsafe impl<'a> TaggedStructure for PipelineExecutablePropertiesKHR<'a> {
30133    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_EXECUTABLE_PROPERTIES_KHR;
30134}
30135impl<'a> PipelineExecutablePropertiesKHR<'a> {
30136    #[inline]
30137    pub fn stages(mut self, stages: ShaderStageFlags) -> Self {
30138        self.stages = stages;
30139        self
30140    }
30141    #[inline]
30142    pub fn name(mut self, name: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30143        write_c_str_slice_with_nul(&mut self.name, name).map(|()| self)
30144    }
30145    #[inline]
30146    pub fn name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30147        wrap_c_str_slice_until_nul(&self.name)
30148    }
30149    #[inline]
30150    pub fn description(
30151        mut self,
30152        description: &CStr,
30153    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30154        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
30155    }
30156    #[inline]
30157    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30158        wrap_c_str_slice_until_nul(&self.description)
30159    }
30160    #[inline]
30161    pub fn subgroup_size(mut self, subgroup_size: u32) -> Self {
30162        self.subgroup_size = subgroup_size;
30163        self
30164    }
30165}
30166#[repr(C)]
30167#[cfg_attr(feature = "debug", derive(Debug))]
30168#[derive(Copy, Clone)]
30169#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineExecutableInfoKHR.html>"]
30170#[must_use]
30171pub struct PipelineExecutableInfoKHR<'a> {
30172    pub s_type: StructureType,
30173    pub p_next: *const c_void,
30174    pub pipeline: Pipeline,
30175    pub executable_index: u32,
30176    pub _marker: PhantomData<&'a ()>,
30177}
30178unsafe impl Send for PipelineExecutableInfoKHR<'_> {}
30179unsafe impl Sync for PipelineExecutableInfoKHR<'_> {}
30180impl ::core::default::Default for PipelineExecutableInfoKHR<'_> {
30181    #[inline]
30182    fn default() -> Self {
30183        Self {
30184            s_type: Self::STRUCTURE_TYPE,
30185            p_next: ::core::ptr::null(),
30186            pipeline: Pipeline::default(),
30187            executable_index: u32::default(),
30188            _marker: PhantomData,
30189        }
30190    }
30191}
30192unsafe impl<'a> TaggedStructure for PipelineExecutableInfoKHR<'a> {
30193    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_EXECUTABLE_INFO_KHR;
30194}
30195impl<'a> PipelineExecutableInfoKHR<'a> {
30196    #[inline]
30197    pub fn pipeline(mut self, pipeline: Pipeline) -> Self {
30198        self.pipeline = pipeline;
30199        self
30200    }
30201    #[inline]
30202    pub fn executable_index(mut self, executable_index: u32) -> Self {
30203        self.executable_index = executable_index;
30204        self
30205    }
30206}
30207#[repr(C)]
30208#[derive(Copy, Clone)]
30209#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineExecutableStatisticValueKHR.html>"]
30210pub union PipelineExecutableStatisticValueKHR {
30211    pub b32: Bool32,
30212    pub i64: i64,
30213    pub u64: u64,
30214    pub f64: f64,
30215}
30216impl ::core::default::Default for PipelineExecutableStatisticValueKHR {
30217    #[inline]
30218    fn default() -> Self {
30219        unsafe { ::core::mem::zeroed() }
30220    }
30221}
30222#[repr(C)]
30223#[derive(Copy, Clone)]
30224#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineExecutableStatisticKHR.html>"]
30225#[must_use]
30226pub struct PipelineExecutableStatisticKHR<'a> {
30227    pub s_type: StructureType,
30228    pub p_next: *mut c_void,
30229    pub name: [c_char; MAX_DESCRIPTION_SIZE],
30230    pub description: [c_char; MAX_DESCRIPTION_SIZE],
30231    pub format: PipelineExecutableStatisticFormatKHR,
30232    pub value: PipelineExecutableStatisticValueKHR,
30233    pub _marker: PhantomData<&'a ()>,
30234}
30235unsafe impl Send for PipelineExecutableStatisticKHR<'_> {}
30236unsafe impl Sync for PipelineExecutableStatisticKHR<'_> {}
30237#[cfg(feature = "debug")]
30238impl fmt::Debug for PipelineExecutableStatisticKHR<'_> {
30239    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
30240        fmt.debug_struct("PipelineExecutableStatisticKHR")
30241            .field("s_type", &self.s_type)
30242            .field("p_next", &self.p_next)
30243            .field("name", &self.name_as_c_str())
30244            .field("description", &self.description_as_c_str())
30245            .field("format", &self.format)
30246            .field("value", &"union")
30247            .finish()
30248    }
30249}
30250impl ::core::default::Default for PipelineExecutableStatisticKHR<'_> {
30251    #[inline]
30252    fn default() -> Self {
30253        Self {
30254            s_type: Self::STRUCTURE_TYPE,
30255            p_next: ::core::ptr::null_mut(),
30256            name: unsafe { ::core::mem::zeroed() },
30257            description: unsafe { ::core::mem::zeroed() },
30258            format: PipelineExecutableStatisticFormatKHR::default(),
30259            value: PipelineExecutableStatisticValueKHR::default(),
30260            _marker: PhantomData,
30261        }
30262    }
30263}
30264unsafe impl<'a> TaggedStructure for PipelineExecutableStatisticKHR<'a> {
30265    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_EXECUTABLE_STATISTIC_KHR;
30266}
30267impl<'a> PipelineExecutableStatisticKHR<'a> {
30268    #[inline]
30269    pub fn name(mut self, name: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30270        write_c_str_slice_with_nul(&mut self.name, name).map(|()| self)
30271    }
30272    #[inline]
30273    pub fn name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30274        wrap_c_str_slice_until_nul(&self.name)
30275    }
30276    #[inline]
30277    pub fn description(
30278        mut self,
30279        description: &CStr,
30280    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30281        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
30282    }
30283    #[inline]
30284    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30285        wrap_c_str_slice_until_nul(&self.description)
30286    }
30287    #[inline]
30288    pub fn format(mut self, format: PipelineExecutableStatisticFormatKHR) -> Self {
30289        self.format = format;
30290        self
30291    }
30292    #[inline]
30293    pub fn value(mut self, value: PipelineExecutableStatisticValueKHR) -> Self {
30294        self.value = value;
30295        self
30296    }
30297}
30298#[repr(C)]
30299#[derive(Copy, Clone)]
30300#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineExecutableInternalRepresentationKHR.html>"]
30301#[must_use]
30302pub struct PipelineExecutableInternalRepresentationKHR<'a> {
30303    pub s_type: StructureType,
30304    pub p_next: *mut c_void,
30305    pub name: [c_char; MAX_DESCRIPTION_SIZE],
30306    pub description: [c_char; MAX_DESCRIPTION_SIZE],
30307    pub is_text: Bool32,
30308    pub data_size: usize,
30309    pub p_data: *mut c_void,
30310    pub _marker: PhantomData<&'a ()>,
30311}
30312unsafe impl Send for PipelineExecutableInternalRepresentationKHR<'_> {}
30313unsafe impl Sync for PipelineExecutableInternalRepresentationKHR<'_> {}
30314#[cfg(feature = "debug")]
30315impl fmt::Debug for PipelineExecutableInternalRepresentationKHR<'_> {
30316    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
30317        fmt.debug_struct("PipelineExecutableInternalRepresentationKHR")
30318            .field("s_type", &self.s_type)
30319            .field("p_next", &self.p_next)
30320            .field("name", &self.name_as_c_str())
30321            .field("description", &self.description_as_c_str())
30322            .field("is_text", &self.is_text)
30323            .field("data_size", &self.data_size)
30324            .field("p_data", &self.p_data)
30325            .finish()
30326    }
30327}
30328impl ::core::default::Default for PipelineExecutableInternalRepresentationKHR<'_> {
30329    #[inline]
30330    fn default() -> Self {
30331        Self {
30332            s_type: Self::STRUCTURE_TYPE,
30333            p_next: ::core::ptr::null_mut(),
30334            name: unsafe { ::core::mem::zeroed() },
30335            description: unsafe { ::core::mem::zeroed() },
30336            is_text: Bool32::default(),
30337            data_size: usize::default(),
30338            p_data: ::core::ptr::null_mut(),
30339            _marker: PhantomData,
30340        }
30341    }
30342}
30343unsafe impl<'a> TaggedStructure for PipelineExecutableInternalRepresentationKHR<'a> {
30344    const STRUCTURE_TYPE: StructureType =
30345        StructureType::PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR;
30346}
30347impl<'a> PipelineExecutableInternalRepresentationKHR<'a> {
30348    #[inline]
30349    pub fn name(mut self, name: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30350        write_c_str_slice_with_nul(&mut self.name, name).map(|()| self)
30351    }
30352    #[inline]
30353    pub fn name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30354        wrap_c_str_slice_until_nul(&self.name)
30355    }
30356    #[inline]
30357    pub fn description(
30358        mut self,
30359        description: &CStr,
30360    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
30361        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
30362    }
30363    #[inline]
30364    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
30365        wrap_c_str_slice_until_nul(&self.description)
30366    }
30367    #[inline]
30368    pub fn is_text(mut self, is_text: bool) -> Self {
30369        self.is_text = is_text.into();
30370        self
30371    }
30372    #[inline]
30373    pub fn data(mut self, data: &'a mut [u8]) -> Self {
30374        self.data_size = data.len();
30375        self.p_data = data.as_mut_ptr().cast();
30376        self
30377    }
30378}
30379#[repr(C)]
30380#[cfg_attr(feature = "debug", derive(Debug))]
30381#[derive(Copy, Clone)]
30382#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.html>"]
30383#[must_use]
30384pub struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'a> {
30385    pub s_type: StructureType,
30386    pub p_next: *mut c_void,
30387    pub shader_demote_to_helper_invocation: Bool32,
30388    pub _marker: PhantomData<&'a ()>,
30389}
30390unsafe impl Send for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'_> {}
30391unsafe impl Sync for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'_> {}
30392impl ::core::default::Default for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'_> {
30393    #[inline]
30394    fn default() -> Self {
30395        Self {
30396            s_type: Self::STRUCTURE_TYPE,
30397            p_next: ::core::ptr::null_mut(),
30398            shader_demote_to_helper_invocation: Bool32::default(),
30399            _marker: PhantomData,
30400        }
30401    }
30402}
30403unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'a> {
30404    const STRUCTURE_TYPE: StructureType =
30405        StructureType::PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES;
30406}
30407unsafe impl ExtendsPhysicalDeviceFeatures2
30408    for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'_>
30409{
30410}
30411unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'_> {}
30412impl<'a> PhysicalDeviceShaderDemoteToHelperInvocationFeatures<'a> {
30413    #[inline]
30414    pub fn shader_demote_to_helper_invocation(
30415        mut self,
30416        shader_demote_to_helper_invocation: bool,
30417    ) -> Self {
30418        self.shader_demote_to_helper_invocation = shader_demote_to_helper_invocation.into();
30419        self
30420    }
30421}
30422#[repr(C)]
30423#[cfg_attr(feature = "debug", derive(Debug))]
30424#[derive(Copy, Clone)]
30425#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT.html>"]
30426#[must_use]
30427pub struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'a> {
30428    pub s_type: StructureType,
30429    pub p_next: *mut c_void,
30430    pub texel_buffer_alignment: Bool32,
30431    pub _marker: PhantomData<&'a ()>,
30432}
30433unsafe impl Send for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'_> {}
30434unsafe impl Sync for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'_> {}
30435impl ::core::default::Default for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'_> {
30436    #[inline]
30437    fn default() -> Self {
30438        Self {
30439            s_type: Self::STRUCTURE_TYPE,
30440            p_next: ::core::ptr::null_mut(),
30441            texel_buffer_alignment: Bool32::default(),
30442            _marker: PhantomData,
30443        }
30444    }
30445}
30446unsafe impl<'a> TaggedStructure for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'a> {
30447    const STRUCTURE_TYPE: StructureType =
30448        StructureType::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT;
30449}
30450unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'_> {}
30451unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'_> {}
30452impl<'a> PhysicalDeviceTexelBufferAlignmentFeaturesEXT<'a> {
30453    #[inline]
30454    pub fn texel_buffer_alignment(mut self, texel_buffer_alignment: bool) -> Self {
30455        self.texel_buffer_alignment = texel_buffer_alignment.into();
30456        self
30457    }
30458}
30459#[repr(C)]
30460#[cfg_attr(feature = "debug", derive(Debug))]
30461#[derive(Copy, Clone)]
30462#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html>"]
30463#[must_use]
30464pub struct PhysicalDeviceTexelBufferAlignmentProperties<'a> {
30465    pub s_type: StructureType,
30466    pub p_next: *mut c_void,
30467    pub storage_texel_buffer_offset_alignment_bytes: DeviceSize,
30468    pub storage_texel_buffer_offset_single_texel_alignment: Bool32,
30469    pub uniform_texel_buffer_offset_alignment_bytes: DeviceSize,
30470    pub uniform_texel_buffer_offset_single_texel_alignment: Bool32,
30471    pub _marker: PhantomData<&'a ()>,
30472}
30473unsafe impl Send for PhysicalDeviceTexelBufferAlignmentProperties<'_> {}
30474unsafe impl Sync for PhysicalDeviceTexelBufferAlignmentProperties<'_> {}
30475impl ::core::default::Default for PhysicalDeviceTexelBufferAlignmentProperties<'_> {
30476    #[inline]
30477    fn default() -> Self {
30478        Self {
30479            s_type: Self::STRUCTURE_TYPE,
30480            p_next: ::core::ptr::null_mut(),
30481            storage_texel_buffer_offset_alignment_bytes: DeviceSize::default(),
30482            storage_texel_buffer_offset_single_texel_alignment: Bool32::default(),
30483            uniform_texel_buffer_offset_alignment_bytes: DeviceSize::default(),
30484            uniform_texel_buffer_offset_single_texel_alignment: Bool32::default(),
30485            _marker: PhantomData,
30486        }
30487    }
30488}
30489unsafe impl<'a> TaggedStructure for PhysicalDeviceTexelBufferAlignmentProperties<'a> {
30490    const STRUCTURE_TYPE: StructureType =
30491        StructureType::PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES;
30492}
30493unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceTexelBufferAlignmentProperties<'_> {}
30494impl<'a> PhysicalDeviceTexelBufferAlignmentProperties<'a> {
30495    #[inline]
30496    pub fn storage_texel_buffer_offset_alignment_bytes(
30497        mut self,
30498        storage_texel_buffer_offset_alignment_bytes: DeviceSize,
30499    ) -> Self {
30500        self.storage_texel_buffer_offset_alignment_bytes =
30501            storage_texel_buffer_offset_alignment_bytes;
30502        self
30503    }
30504    #[inline]
30505    pub fn storage_texel_buffer_offset_single_texel_alignment(
30506        mut self,
30507        storage_texel_buffer_offset_single_texel_alignment: bool,
30508    ) -> Self {
30509        self.storage_texel_buffer_offset_single_texel_alignment =
30510            storage_texel_buffer_offset_single_texel_alignment.into();
30511        self
30512    }
30513    #[inline]
30514    pub fn uniform_texel_buffer_offset_alignment_bytes(
30515        mut self,
30516        uniform_texel_buffer_offset_alignment_bytes: DeviceSize,
30517    ) -> Self {
30518        self.uniform_texel_buffer_offset_alignment_bytes =
30519            uniform_texel_buffer_offset_alignment_bytes;
30520        self
30521    }
30522    #[inline]
30523    pub fn uniform_texel_buffer_offset_single_texel_alignment(
30524        mut self,
30525        uniform_texel_buffer_offset_single_texel_alignment: bool,
30526    ) -> Self {
30527        self.uniform_texel_buffer_offset_single_texel_alignment =
30528            uniform_texel_buffer_offset_single_texel_alignment.into();
30529        self
30530    }
30531}
30532#[repr(C)]
30533#[cfg_attr(feature = "debug", derive(Debug))]
30534#[derive(Copy, Clone)]
30535#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html>"]
30536#[must_use]
30537pub struct PhysicalDeviceSubgroupSizeControlFeatures<'a> {
30538    pub s_type: StructureType,
30539    pub p_next: *mut c_void,
30540    pub subgroup_size_control: Bool32,
30541    pub compute_full_subgroups: Bool32,
30542    pub _marker: PhantomData<&'a ()>,
30543}
30544unsafe impl Send for PhysicalDeviceSubgroupSizeControlFeatures<'_> {}
30545unsafe impl Sync for PhysicalDeviceSubgroupSizeControlFeatures<'_> {}
30546impl ::core::default::Default for PhysicalDeviceSubgroupSizeControlFeatures<'_> {
30547    #[inline]
30548    fn default() -> Self {
30549        Self {
30550            s_type: Self::STRUCTURE_TYPE,
30551            p_next: ::core::ptr::null_mut(),
30552            subgroup_size_control: Bool32::default(),
30553            compute_full_subgroups: Bool32::default(),
30554            _marker: PhantomData,
30555        }
30556    }
30557}
30558unsafe impl<'a> TaggedStructure for PhysicalDeviceSubgroupSizeControlFeatures<'a> {
30559    const STRUCTURE_TYPE: StructureType =
30560        StructureType::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES;
30561}
30562unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSubgroupSizeControlFeatures<'_> {}
30563unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSubgroupSizeControlFeatures<'_> {}
30564impl<'a> PhysicalDeviceSubgroupSizeControlFeatures<'a> {
30565    #[inline]
30566    pub fn subgroup_size_control(mut self, subgroup_size_control: bool) -> Self {
30567        self.subgroup_size_control = subgroup_size_control.into();
30568        self
30569    }
30570    #[inline]
30571    pub fn compute_full_subgroups(mut self, compute_full_subgroups: bool) -> Self {
30572        self.compute_full_subgroups = compute_full_subgroups.into();
30573        self
30574    }
30575}
30576#[repr(C)]
30577#[cfg_attr(feature = "debug", derive(Debug))]
30578#[derive(Copy, Clone)]
30579#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlProperties.html>"]
30580#[must_use]
30581pub struct PhysicalDeviceSubgroupSizeControlProperties<'a> {
30582    pub s_type: StructureType,
30583    pub p_next: *mut c_void,
30584    pub min_subgroup_size: u32,
30585    pub max_subgroup_size: u32,
30586    pub max_compute_workgroup_subgroups: u32,
30587    pub required_subgroup_size_stages: ShaderStageFlags,
30588    pub _marker: PhantomData<&'a ()>,
30589}
30590unsafe impl Send for PhysicalDeviceSubgroupSizeControlProperties<'_> {}
30591unsafe impl Sync for PhysicalDeviceSubgroupSizeControlProperties<'_> {}
30592impl ::core::default::Default for PhysicalDeviceSubgroupSizeControlProperties<'_> {
30593    #[inline]
30594    fn default() -> Self {
30595        Self {
30596            s_type: Self::STRUCTURE_TYPE,
30597            p_next: ::core::ptr::null_mut(),
30598            min_subgroup_size: u32::default(),
30599            max_subgroup_size: u32::default(),
30600            max_compute_workgroup_subgroups: u32::default(),
30601            required_subgroup_size_stages: ShaderStageFlags::default(),
30602            _marker: PhantomData,
30603        }
30604    }
30605}
30606unsafe impl<'a> TaggedStructure for PhysicalDeviceSubgroupSizeControlProperties<'a> {
30607    const STRUCTURE_TYPE: StructureType =
30608        StructureType::PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES;
30609}
30610unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSubgroupSizeControlProperties<'_> {}
30611impl<'a> PhysicalDeviceSubgroupSizeControlProperties<'a> {
30612    #[inline]
30613    pub fn min_subgroup_size(mut self, min_subgroup_size: u32) -> Self {
30614        self.min_subgroup_size = min_subgroup_size;
30615        self
30616    }
30617    #[inline]
30618    pub fn max_subgroup_size(mut self, max_subgroup_size: u32) -> Self {
30619        self.max_subgroup_size = max_subgroup_size;
30620        self
30621    }
30622    #[inline]
30623    pub fn max_compute_workgroup_subgroups(mut self, max_compute_workgroup_subgroups: u32) -> Self {
30624        self.max_compute_workgroup_subgroups = max_compute_workgroup_subgroups;
30625        self
30626    }
30627    #[inline]
30628    pub fn required_subgroup_size_stages(
30629        mut self,
30630        required_subgroup_size_stages: ShaderStageFlags,
30631    ) -> Self {
30632        self.required_subgroup_size_stages = required_subgroup_size_stages;
30633        self
30634    }
30635}
30636#[repr(C)]
30637#[cfg_attr(feature = "debug", derive(Debug))]
30638#[derive(Copy, Clone)]
30639#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineShaderStageRequiredSubgroupSizeCreateInfo.html>"]
30640#[must_use]
30641pub struct PipelineShaderStageRequiredSubgroupSizeCreateInfo<'a> {
30642    pub s_type: StructureType,
30643    pub p_next: *mut c_void,
30644    pub required_subgroup_size: u32,
30645    pub _marker: PhantomData<&'a ()>,
30646}
30647unsafe impl Send for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'_> {}
30648unsafe impl Sync for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'_> {}
30649impl ::core::default::Default for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'_> {
30650    #[inline]
30651    fn default() -> Self {
30652        Self {
30653            s_type: Self::STRUCTURE_TYPE,
30654            p_next: ::core::ptr::null_mut(),
30655            required_subgroup_size: u32::default(),
30656            _marker: PhantomData,
30657        }
30658    }
30659}
30660unsafe impl<'a> TaggedStructure for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'a> {
30661    const STRUCTURE_TYPE: StructureType =
30662        StructureType::PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO;
30663}
30664unsafe impl ExtendsPipelineShaderStageCreateInfo
30665    for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'_>
30666{
30667}
30668unsafe impl ExtendsShaderCreateInfoEXT for PipelineShaderStageRequiredSubgroupSizeCreateInfo<'_> {}
30669impl<'a> PipelineShaderStageRequiredSubgroupSizeCreateInfo<'a> {
30670    #[inline]
30671    pub fn required_subgroup_size(mut self, required_subgroup_size: u32) -> Self {
30672        self.required_subgroup_size = required_subgroup_size;
30673        self
30674    }
30675}
30676#[repr(C)]
30677#[cfg_attr(feature = "debug", derive(Debug))]
30678#[derive(Copy, Clone)]
30679#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassShadingPipelineCreateInfoHUAWEI.html>"]
30680#[must_use]
30681pub struct SubpassShadingPipelineCreateInfoHUAWEI<'a> {
30682    pub s_type: StructureType,
30683    pub p_next: *mut c_void,
30684    pub render_pass: RenderPass,
30685    pub subpass: u32,
30686    pub _marker: PhantomData<&'a ()>,
30687}
30688unsafe impl Send for SubpassShadingPipelineCreateInfoHUAWEI<'_> {}
30689unsafe impl Sync for SubpassShadingPipelineCreateInfoHUAWEI<'_> {}
30690impl ::core::default::Default for SubpassShadingPipelineCreateInfoHUAWEI<'_> {
30691    #[inline]
30692    fn default() -> Self {
30693        Self {
30694            s_type: Self::STRUCTURE_TYPE,
30695            p_next: ::core::ptr::null_mut(),
30696            render_pass: RenderPass::default(),
30697            subpass: u32::default(),
30698            _marker: PhantomData,
30699        }
30700    }
30701}
30702unsafe impl<'a> TaggedStructure for SubpassShadingPipelineCreateInfoHUAWEI<'a> {
30703    const STRUCTURE_TYPE: StructureType =
30704        StructureType::SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI;
30705}
30706unsafe impl ExtendsComputePipelineCreateInfo for SubpassShadingPipelineCreateInfoHUAWEI<'_> {}
30707impl<'a> SubpassShadingPipelineCreateInfoHUAWEI<'a> {
30708    #[inline]
30709    pub fn render_pass(mut self, render_pass: RenderPass) -> Self {
30710        self.render_pass = render_pass;
30711        self
30712    }
30713    #[inline]
30714    pub fn subpass(mut self, subpass: u32) -> Self {
30715        self.subpass = subpass;
30716        self
30717    }
30718}
30719#[repr(C)]
30720#[cfg_attr(feature = "debug", derive(Debug))]
30721#[derive(Copy, Clone)]
30722#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubpassShadingPropertiesHUAWEI.html>"]
30723#[must_use]
30724pub struct PhysicalDeviceSubpassShadingPropertiesHUAWEI<'a> {
30725    pub s_type: StructureType,
30726    pub p_next: *mut c_void,
30727    pub max_subpass_shading_workgroup_size_aspect_ratio: u32,
30728    pub _marker: PhantomData<&'a ()>,
30729}
30730unsafe impl Send for PhysicalDeviceSubpassShadingPropertiesHUAWEI<'_> {}
30731unsafe impl Sync for PhysicalDeviceSubpassShadingPropertiesHUAWEI<'_> {}
30732impl ::core::default::Default for PhysicalDeviceSubpassShadingPropertiesHUAWEI<'_> {
30733    #[inline]
30734    fn default() -> Self {
30735        Self {
30736            s_type: Self::STRUCTURE_TYPE,
30737            p_next: ::core::ptr::null_mut(),
30738            max_subpass_shading_workgroup_size_aspect_ratio: u32::default(),
30739            _marker: PhantomData,
30740        }
30741    }
30742}
30743unsafe impl<'a> TaggedStructure for PhysicalDeviceSubpassShadingPropertiesHUAWEI<'a> {
30744    const STRUCTURE_TYPE: StructureType =
30745        StructureType::PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI;
30746}
30747unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSubpassShadingPropertiesHUAWEI<'_> {}
30748impl<'a> PhysicalDeviceSubpassShadingPropertiesHUAWEI<'a> {
30749    #[inline]
30750    pub fn max_subpass_shading_workgroup_size_aspect_ratio(
30751        mut self,
30752        max_subpass_shading_workgroup_size_aspect_ratio: u32,
30753    ) -> Self {
30754        self.max_subpass_shading_workgroup_size_aspect_ratio =
30755            max_subpass_shading_workgroup_size_aspect_ratio;
30756        self
30757    }
30758}
30759#[repr(C)]
30760#[cfg_attr(feature = "debug", derive(Debug))]
30761#[derive(Copy, Clone)]
30762#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceClusterCullingShaderPropertiesHUAWEI.html>"]
30763#[must_use]
30764pub struct PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'a> {
30765    pub s_type: StructureType,
30766    pub p_next: *mut c_void,
30767    pub max_work_group_count: [u32; 3],
30768    pub max_work_group_size: [u32; 3],
30769    pub max_output_cluster_count: u32,
30770    pub indirect_buffer_offset_alignment: DeviceSize,
30771    pub _marker: PhantomData<&'a ()>,
30772}
30773unsafe impl Send for PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'_> {}
30774unsafe impl Sync for PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'_> {}
30775impl ::core::default::Default for PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'_> {
30776    #[inline]
30777    fn default() -> Self {
30778        Self {
30779            s_type: Self::STRUCTURE_TYPE,
30780            p_next: ::core::ptr::null_mut(),
30781            max_work_group_count: unsafe { ::core::mem::zeroed() },
30782            max_work_group_size: unsafe { ::core::mem::zeroed() },
30783            max_output_cluster_count: u32::default(),
30784            indirect_buffer_offset_alignment: DeviceSize::default(),
30785            _marker: PhantomData,
30786        }
30787    }
30788}
30789unsafe impl<'a> TaggedStructure for PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'a> {
30790    const STRUCTURE_TYPE: StructureType =
30791        StructureType::PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_PROPERTIES_HUAWEI;
30792}
30793unsafe impl ExtendsPhysicalDeviceProperties2
30794    for PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'_>
30795{
30796}
30797impl<'a> PhysicalDeviceClusterCullingShaderPropertiesHUAWEI<'a> {
30798    #[inline]
30799    pub fn max_work_group_count(mut self, max_work_group_count: [u32; 3]) -> Self {
30800        self.max_work_group_count = max_work_group_count;
30801        self
30802    }
30803    #[inline]
30804    pub fn max_work_group_size(mut self, max_work_group_size: [u32; 3]) -> Self {
30805        self.max_work_group_size = max_work_group_size;
30806        self
30807    }
30808    #[inline]
30809    pub fn max_output_cluster_count(mut self, max_output_cluster_count: u32) -> Self {
30810        self.max_output_cluster_count = max_output_cluster_count;
30811        self
30812    }
30813    #[inline]
30814    pub fn indirect_buffer_offset_alignment(
30815        mut self,
30816        indirect_buffer_offset_alignment: DeviceSize,
30817    ) -> Self {
30818        self.indirect_buffer_offset_alignment = indirect_buffer_offset_alignment;
30819        self
30820    }
30821}
30822#[repr(C)]
30823#[cfg_attr(feature = "debug", derive(Debug))]
30824#[derive(Copy, Clone)]
30825#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryOpaqueCaptureAddressAllocateInfo.html>"]
30826#[must_use]
30827pub struct MemoryOpaqueCaptureAddressAllocateInfo<'a> {
30828    pub s_type: StructureType,
30829    pub p_next: *const c_void,
30830    pub opaque_capture_address: u64,
30831    pub _marker: PhantomData<&'a ()>,
30832}
30833unsafe impl Send for MemoryOpaqueCaptureAddressAllocateInfo<'_> {}
30834unsafe impl Sync for MemoryOpaqueCaptureAddressAllocateInfo<'_> {}
30835impl ::core::default::Default for MemoryOpaqueCaptureAddressAllocateInfo<'_> {
30836    #[inline]
30837    fn default() -> Self {
30838        Self {
30839            s_type: Self::STRUCTURE_TYPE,
30840            p_next: ::core::ptr::null(),
30841            opaque_capture_address: u64::default(),
30842            _marker: PhantomData,
30843        }
30844    }
30845}
30846unsafe impl<'a> TaggedStructure for MemoryOpaqueCaptureAddressAllocateInfo<'a> {
30847    const STRUCTURE_TYPE: StructureType =
30848        StructureType::MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO;
30849}
30850unsafe impl ExtendsMemoryAllocateInfo for MemoryOpaqueCaptureAddressAllocateInfo<'_> {}
30851impl<'a> MemoryOpaqueCaptureAddressAllocateInfo<'a> {
30852    #[inline]
30853    pub fn opaque_capture_address(mut self, opaque_capture_address: u64) -> Self {
30854        self.opaque_capture_address = opaque_capture_address;
30855        self
30856    }
30857}
30858#[repr(C)]
30859#[cfg_attr(feature = "debug", derive(Debug))]
30860#[derive(Copy, Clone)]
30861#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceMemoryOpaqueCaptureAddressInfo.html>"]
30862#[must_use]
30863pub struct DeviceMemoryOpaqueCaptureAddressInfo<'a> {
30864    pub s_type: StructureType,
30865    pub p_next: *const c_void,
30866    pub memory: DeviceMemory,
30867    pub _marker: PhantomData<&'a ()>,
30868}
30869unsafe impl Send for DeviceMemoryOpaqueCaptureAddressInfo<'_> {}
30870unsafe impl Sync for DeviceMemoryOpaqueCaptureAddressInfo<'_> {}
30871impl ::core::default::Default for DeviceMemoryOpaqueCaptureAddressInfo<'_> {
30872    #[inline]
30873    fn default() -> Self {
30874        Self {
30875            s_type: Self::STRUCTURE_TYPE,
30876            p_next: ::core::ptr::null(),
30877            memory: DeviceMemory::default(),
30878            _marker: PhantomData,
30879        }
30880    }
30881}
30882unsafe impl<'a> TaggedStructure for DeviceMemoryOpaqueCaptureAddressInfo<'a> {
30883    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO;
30884}
30885impl<'a> DeviceMemoryOpaqueCaptureAddressInfo<'a> {
30886    #[inline]
30887    pub fn memory(mut self, memory: DeviceMemory) -> Self {
30888        self.memory = memory;
30889        self
30890    }
30891}
30892#[repr(C)]
30893#[cfg_attr(feature = "debug", derive(Debug))]
30894#[derive(Copy, Clone)]
30895#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLineRasterizationFeaturesKHR.html>"]
30896#[must_use]
30897pub struct PhysicalDeviceLineRasterizationFeaturesKHR<'a> {
30898    pub s_type: StructureType,
30899    pub p_next: *mut c_void,
30900    pub rectangular_lines: Bool32,
30901    pub bresenham_lines: Bool32,
30902    pub smooth_lines: Bool32,
30903    pub stippled_rectangular_lines: Bool32,
30904    pub stippled_bresenham_lines: Bool32,
30905    pub stippled_smooth_lines: Bool32,
30906    pub _marker: PhantomData<&'a ()>,
30907}
30908unsafe impl Send for PhysicalDeviceLineRasterizationFeaturesKHR<'_> {}
30909unsafe impl Sync for PhysicalDeviceLineRasterizationFeaturesKHR<'_> {}
30910impl ::core::default::Default for PhysicalDeviceLineRasterizationFeaturesKHR<'_> {
30911    #[inline]
30912    fn default() -> Self {
30913        Self {
30914            s_type: Self::STRUCTURE_TYPE,
30915            p_next: ::core::ptr::null_mut(),
30916            rectangular_lines: Bool32::default(),
30917            bresenham_lines: Bool32::default(),
30918            smooth_lines: Bool32::default(),
30919            stippled_rectangular_lines: Bool32::default(),
30920            stippled_bresenham_lines: Bool32::default(),
30921            stippled_smooth_lines: Bool32::default(),
30922            _marker: PhantomData,
30923        }
30924    }
30925}
30926unsafe impl<'a> TaggedStructure for PhysicalDeviceLineRasterizationFeaturesKHR<'a> {
30927    const STRUCTURE_TYPE: StructureType =
30928        StructureType::PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR;
30929}
30930unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceLineRasterizationFeaturesKHR<'_> {}
30931unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceLineRasterizationFeaturesKHR<'_> {}
30932impl<'a> PhysicalDeviceLineRasterizationFeaturesKHR<'a> {
30933    #[inline]
30934    pub fn rectangular_lines(mut self, rectangular_lines: bool) -> Self {
30935        self.rectangular_lines = rectangular_lines.into();
30936        self
30937    }
30938    #[inline]
30939    pub fn bresenham_lines(mut self, bresenham_lines: bool) -> Self {
30940        self.bresenham_lines = bresenham_lines.into();
30941        self
30942    }
30943    #[inline]
30944    pub fn smooth_lines(mut self, smooth_lines: bool) -> Self {
30945        self.smooth_lines = smooth_lines.into();
30946        self
30947    }
30948    #[inline]
30949    pub fn stippled_rectangular_lines(mut self, stippled_rectangular_lines: bool) -> Self {
30950        self.stippled_rectangular_lines = stippled_rectangular_lines.into();
30951        self
30952    }
30953    #[inline]
30954    pub fn stippled_bresenham_lines(mut self, stippled_bresenham_lines: bool) -> Self {
30955        self.stippled_bresenham_lines = stippled_bresenham_lines.into();
30956        self
30957    }
30958    #[inline]
30959    pub fn stippled_smooth_lines(mut self, stippled_smooth_lines: bool) -> Self {
30960        self.stippled_smooth_lines = stippled_smooth_lines.into();
30961        self
30962    }
30963}
30964#[repr(C)]
30965#[cfg_attr(feature = "debug", derive(Debug))]
30966#[derive(Copy, Clone)]
30967#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLineRasterizationPropertiesKHR.html>"]
30968#[must_use]
30969pub struct PhysicalDeviceLineRasterizationPropertiesKHR<'a> {
30970    pub s_type: StructureType,
30971    pub p_next: *mut c_void,
30972    pub line_sub_pixel_precision_bits: u32,
30973    pub _marker: PhantomData<&'a ()>,
30974}
30975unsafe impl Send for PhysicalDeviceLineRasterizationPropertiesKHR<'_> {}
30976unsafe impl Sync for PhysicalDeviceLineRasterizationPropertiesKHR<'_> {}
30977impl ::core::default::Default for PhysicalDeviceLineRasterizationPropertiesKHR<'_> {
30978    #[inline]
30979    fn default() -> Self {
30980        Self {
30981            s_type: Self::STRUCTURE_TYPE,
30982            p_next: ::core::ptr::null_mut(),
30983            line_sub_pixel_precision_bits: u32::default(),
30984            _marker: PhantomData,
30985        }
30986    }
30987}
30988unsafe impl<'a> TaggedStructure for PhysicalDeviceLineRasterizationPropertiesKHR<'a> {
30989    const STRUCTURE_TYPE: StructureType =
30990        StructureType::PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR;
30991}
30992unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceLineRasterizationPropertiesKHR<'_> {}
30993impl<'a> PhysicalDeviceLineRasterizationPropertiesKHR<'a> {
30994    #[inline]
30995    pub fn line_sub_pixel_precision_bits(mut self, line_sub_pixel_precision_bits: u32) -> Self {
30996        self.line_sub_pixel_precision_bits = line_sub_pixel_precision_bits;
30997        self
30998    }
30999}
31000#[repr(C)]
31001#[cfg_attr(feature = "debug", derive(Debug))]
31002#[derive(Copy, Clone)]
31003#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationLineStateCreateInfoKHR.html>"]
31004#[must_use]
31005pub struct PipelineRasterizationLineStateCreateInfoKHR<'a> {
31006    pub s_type: StructureType,
31007    pub p_next: *const c_void,
31008    pub line_rasterization_mode: LineRasterizationModeKHR,
31009    pub stippled_line_enable: Bool32,
31010    pub line_stipple_factor: u32,
31011    pub line_stipple_pattern: u16,
31012    pub _marker: PhantomData<&'a ()>,
31013}
31014unsafe impl Send for PipelineRasterizationLineStateCreateInfoKHR<'_> {}
31015unsafe impl Sync for PipelineRasterizationLineStateCreateInfoKHR<'_> {}
31016impl ::core::default::Default for PipelineRasterizationLineStateCreateInfoKHR<'_> {
31017    #[inline]
31018    fn default() -> Self {
31019        Self {
31020            s_type: Self::STRUCTURE_TYPE,
31021            p_next: ::core::ptr::null(),
31022            line_rasterization_mode: LineRasterizationModeKHR::default(),
31023            stippled_line_enable: Bool32::default(),
31024            line_stipple_factor: u32::default(),
31025            line_stipple_pattern: u16::default(),
31026            _marker: PhantomData,
31027        }
31028    }
31029}
31030unsafe impl<'a> TaggedStructure for PipelineRasterizationLineStateCreateInfoKHR<'a> {
31031    const STRUCTURE_TYPE: StructureType =
31032        StructureType::PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR;
31033}
31034unsafe impl ExtendsPipelineRasterizationStateCreateInfo
31035    for PipelineRasterizationLineStateCreateInfoKHR<'_>
31036{
31037}
31038impl<'a> PipelineRasterizationLineStateCreateInfoKHR<'a> {
31039    #[inline]
31040    pub fn line_rasterization_mode(
31041        mut self,
31042        line_rasterization_mode: LineRasterizationModeKHR,
31043    ) -> Self {
31044        self.line_rasterization_mode = line_rasterization_mode;
31045        self
31046    }
31047    #[inline]
31048    pub fn stippled_line_enable(mut self, stippled_line_enable: bool) -> Self {
31049        self.stippled_line_enable = stippled_line_enable.into();
31050        self
31051    }
31052    #[inline]
31053    pub fn line_stipple_factor(mut self, line_stipple_factor: u32) -> Self {
31054        self.line_stipple_factor = line_stipple_factor;
31055        self
31056    }
31057    #[inline]
31058    pub fn line_stipple_pattern(mut self, line_stipple_pattern: u16) -> Self {
31059        self.line_stipple_pattern = line_stipple_pattern;
31060        self
31061    }
31062}
31063#[repr(C)]
31064#[cfg_attr(feature = "debug", derive(Debug))]
31065#[derive(Copy, Clone)]
31066#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineCreationCacheControlFeatures.html>"]
31067#[must_use]
31068pub struct PhysicalDevicePipelineCreationCacheControlFeatures<'a> {
31069    pub s_type: StructureType,
31070    pub p_next: *mut c_void,
31071    pub pipeline_creation_cache_control: Bool32,
31072    pub _marker: PhantomData<&'a ()>,
31073}
31074unsafe impl Send for PhysicalDevicePipelineCreationCacheControlFeatures<'_> {}
31075unsafe impl Sync for PhysicalDevicePipelineCreationCacheControlFeatures<'_> {}
31076impl ::core::default::Default for PhysicalDevicePipelineCreationCacheControlFeatures<'_> {
31077    #[inline]
31078    fn default() -> Self {
31079        Self {
31080            s_type: Self::STRUCTURE_TYPE,
31081            p_next: ::core::ptr::null_mut(),
31082            pipeline_creation_cache_control: Bool32::default(),
31083            _marker: PhantomData,
31084        }
31085    }
31086}
31087unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineCreationCacheControlFeatures<'a> {
31088    const STRUCTURE_TYPE: StructureType =
31089        StructureType::PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES;
31090}
31091unsafe impl ExtendsPhysicalDeviceFeatures2
31092    for PhysicalDevicePipelineCreationCacheControlFeatures<'_>
31093{
31094}
31095unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelineCreationCacheControlFeatures<'_> {}
31096impl<'a> PhysicalDevicePipelineCreationCacheControlFeatures<'a> {
31097    #[inline]
31098    pub fn pipeline_creation_cache_control(
31099        mut self,
31100        pipeline_creation_cache_control: bool,
31101    ) -> Self {
31102        self.pipeline_creation_cache_control = pipeline_creation_cache_control.into();
31103        self
31104    }
31105}
31106#[repr(C)]
31107#[cfg_attr(feature = "debug", derive(Debug))]
31108#[derive(Copy, Clone)]
31109#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan11Features.html>"]
31110#[must_use]
31111pub struct PhysicalDeviceVulkan11Features<'a> {
31112    pub s_type: StructureType,
31113    pub p_next: *mut c_void,
31114    pub storage_buffer16_bit_access: Bool32,
31115    pub uniform_and_storage_buffer16_bit_access: Bool32,
31116    pub storage_push_constant16: Bool32,
31117    pub storage_input_output16: Bool32,
31118    pub multiview: Bool32,
31119    pub multiview_geometry_shader: Bool32,
31120    pub multiview_tessellation_shader: Bool32,
31121    pub variable_pointers_storage_buffer: Bool32,
31122    pub variable_pointers: Bool32,
31123    pub protected_memory: Bool32,
31124    pub sampler_ycbcr_conversion: Bool32,
31125    pub shader_draw_parameters: Bool32,
31126    pub _marker: PhantomData<&'a ()>,
31127}
31128unsafe impl Send for PhysicalDeviceVulkan11Features<'_> {}
31129unsafe impl Sync for PhysicalDeviceVulkan11Features<'_> {}
31130impl ::core::default::Default for PhysicalDeviceVulkan11Features<'_> {
31131    #[inline]
31132    fn default() -> Self {
31133        Self {
31134            s_type: Self::STRUCTURE_TYPE,
31135            p_next: ::core::ptr::null_mut(),
31136            storage_buffer16_bit_access: Bool32::default(),
31137            uniform_and_storage_buffer16_bit_access: Bool32::default(),
31138            storage_push_constant16: Bool32::default(),
31139            storage_input_output16: Bool32::default(),
31140            multiview: Bool32::default(),
31141            multiview_geometry_shader: Bool32::default(),
31142            multiview_tessellation_shader: Bool32::default(),
31143            variable_pointers_storage_buffer: Bool32::default(),
31144            variable_pointers: Bool32::default(),
31145            protected_memory: Bool32::default(),
31146            sampler_ycbcr_conversion: Bool32::default(),
31147            shader_draw_parameters: Bool32::default(),
31148            _marker: PhantomData,
31149        }
31150    }
31151}
31152unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan11Features<'a> {
31153    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
31154}
31155unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVulkan11Features<'_> {}
31156unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVulkan11Features<'_> {}
31157impl<'a> PhysicalDeviceVulkan11Features<'a> {
31158    #[inline]
31159    pub fn storage_buffer16_bit_access(mut self, storage_buffer16_bit_access: bool) -> Self {
31160        self.storage_buffer16_bit_access = storage_buffer16_bit_access.into();
31161        self
31162    }
31163    #[inline]
31164    pub fn uniform_and_storage_buffer16_bit_access(
31165        mut self,
31166        uniform_and_storage_buffer16_bit_access: bool,
31167    ) -> Self {
31168        self.uniform_and_storage_buffer16_bit_access =
31169            uniform_and_storage_buffer16_bit_access.into();
31170        self
31171    }
31172    #[inline]
31173    pub fn storage_push_constant16(mut self, storage_push_constant16: bool) -> Self {
31174        self.storage_push_constant16 = storage_push_constant16.into();
31175        self
31176    }
31177    #[inline]
31178    pub fn storage_input_output16(mut self, storage_input_output16: bool) -> Self {
31179        self.storage_input_output16 = storage_input_output16.into();
31180        self
31181    }
31182    #[inline]
31183    pub fn multiview(mut self, multiview: bool) -> Self {
31184        self.multiview = multiview.into();
31185        self
31186    }
31187    #[inline]
31188    pub fn multiview_geometry_shader(mut self, multiview_geometry_shader: bool) -> Self {
31189        self.multiview_geometry_shader = multiview_geometry_shader.into();
31190        self
31191    }
31192    #[inline]
31193    pub fn multiview_tessellation_shader(mut self, multiview_tessellation_shader: bool) -> Self {
31194        self.multiview_tessellation_shader = multiview_tessellation_shader.into();
31195        self
31196    }
31197    #[inline]
31198    pub fn variable_pointers_storage_buffer(
31199        mut self,
31200        variable_pointers_storage_buffer: bool,
31201    ) -> Self {
31202        self.variable_pointers_storage_buffer = variable_pointers_storage_buffer.into();
31203        self
31204    }
31205    #[inline]
31206    pub fn variable_pointers(mut self, variable_pointers: bool) -> Self {
31207        self.variable_pointers = variable_pointers.into();
31208        self
31209    }
31210    #[inline]
31211    pub fn protected_memory(mut self, protected_memory: bool) -> Self {
31212        self.protected_memory = protected_memory.into();
31213        self
31214    }
31215    #[inline]
31216    pub fn sampler_ycbcr_conversion(mut self, sampler_ycbcr_conversion: bool) -> Self {
31217        self.sampler_ycbcr_conversion = sampler_ycbcr_conversion.into();
31218        self
31219    }
31220    #[inline]
31221    pub fn shader_draw_parameters(mut self, shader_draw_parameters: bool) -> Self {
31222        self.shader_draw_parameters = shader_draw_parameters.into();
31223        self
31224    }
31225}
31226#[repr(C)]
31227#[cfg_attr(feature = "debug", derive(Debug))]
31228#[derive(Copy, Clone)]
31229#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan11Properties.html>"]
31230#[must_use]
31231pub struct PhysicalDeviceVulkan11Properties<'a> {
31232    pub s_type: StructureType,
31233    pub p_next: *mut c_void,
31234    pub device_uuid: [u8; UUID_SIZE],
31235    pub driver_uuid: [u8; UUID_SIZE],
31236    pub device_luid: [u8; LUID_SIZE],
31237    pub device_node_mask: u32,
31238    pub device_luid_valid: Bool32,
31239    pub subgroup_size: u32,
31240    pub subgroup_supported_stages: ShaderStageFlags,
31241    pub subgroup_supported_operations: SubgroupFeatureFlags,
31242    pub subgroup_quad_operations_in_all_stages: Bool32,
31243    pub point_clipping_behavior: PointClippingBehavior,
31244    pub max_multiview_view_count: u32,
31245    pub max_multiview_instance_index: u32,
31246    pub protected_no_fault: Bool32,
31247    pub max_per_set_descriptors: u32,
31248    pub max_memory_allocation_size: DeviceSize,
31249    pub _marker: PhantomData<&'a ()>,
31250}
31251unsafe impl Send for PhysicalDeviceVulkan11Properties<'_> {}
31252unsafe impl Sync for PhysicalDeviceVulkan11Properties<'_> {}
31253impl ::core::default::Default for PhysicalDeviceVulkan11Properties<'_> {
31254    #[inline]
31255    fn default() -> Self {
31256        Self {
31257            s_type: Self::STRUCTURE_TYPE,
31258            p_next: ::core::ptr::null_mut(),
31259            device_uuid: unsafe { ::core::mem::zeroed() },
31260            driver_uuid: unsafe { ::core::mem::zeroed() },
31261            device_luid: unsafe { ::core::mem::zeroed() },
31262            device_node_mask: u32::default(),
31263            device_luid_valid: Bool32::default(),
31264            subgroup_size: u32::default(),
31265            subgroup_supported_stages: ShaderStageFlags::default(),
31266            subgroup_supported_operations: SubgroupFeatureFlags::default(),
31267            subgroup_quad_operations_in_all_stages: Bool32::default(),
31268            point_clipping_behavior: PointClippingBehavior::default(),
31269            max_multiview_view_count: u32::default(),
31270            max_multiview_instance_index: u32::default(),
31271            protected_no_fault: Bool32::default(),
31272            max_per_set_descriptors: u32::default(),
31273            max_memory_allocation_size: DeviceSize::default(),
31274            _marker: PhantomData,
31275        }
31276    }
31277}
31278unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan11Properties<'a> {
31279    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES;
31280}
31281unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceVulkan11Properties<'_> {}
31282impl<'a> PhysicalDeviceVulkan11Properties<'a> {
31283    #[inline]
31284    pub fn device_uuid(mut self, device_uuid: [u8; UUID_SIZE]) -> Self {
31285        self.device_uuid = device_uuid;
31286        self
31287    }
31288    #[inline]
31289    pub fn driver_uuid(mut self, driver_uuid: [u8; UUID_SIZE]) -> Self {
31290        self.driver_uuid = driver_uuid;
31291        self
31292    }
31293    #[inline]
31294    pub fn device_luid(mut self, device_luid: [u8; LUID_SIZE]) -> Self {
31295        self.device_luid = device_luid;
31296        self
31297    }
31298    #[inline]
31299    pub fn device_node_mask(mut self, device_node_mask: u32) -> Self {
31300        self.device_node_mask = device_node_mask;
31301        self
31302    }
31303    #[inline]
31304    pub fn device_luid_valid(mut self, device_luid_valid: bool) -> Self {
31305        self.device_luid_valid = device_luid_valid.into();
31306        self
31307    }
31308    #[inline]
31309    pub fn subgroup_size(mut self, subgroup_size: u32) -> Self {
31310        self.subgroup_size = subgroup_size;
31311        self
31312    }
31313    #[inline]
31314    pub fn subgroup_supported_stages(
31315        mut self,
31316        subgroup_supported_stages: ShaderStageFlags,
31317    ) -> Self {
31318        self.subgroup_supported_stages = subgroup_supported_stages;
31319        self
31320    }
31321    #[inline]
31322    pub fn subgroup_supported_operations(
31323        mut self,
31324        subgroup_supported_operations: SubgroupFeatureFlags,
31325    ) -> Self {
31326        self.subgroup_supported_operations = subgroup_supported_operations;
31327        self
31328    }
31329    #[inline]
31330    pub fn subgroup_quad_operations_in_all_stages(
31331        mut self,
31332        subgroup_quad_operations_in_all_stages: bool,
31333    ) -> Self {
31334        self.subgroup_quad_operations_in_all_stages = subgroup_quad_operations_in_all_stages.into();
31335        self
31336    }
31337    #[inline]
31338    pub fn point_clipping_behavior(
31339        mut self,
31340        point_clipping_behavior: PointClippingBehavior,
31341    ) -> Self {
31342        self.point_clipping_behavior = point_clipping_behavior;
31343        self
31344    }
31345    #[inline]
31346    pub fn max_multiview_view_count(mut self, max_multiview_view_count: u32) -> Self {
31347        self.max_multiview_view_count = max_multiview_view_count;
31348        self
31349    }
31350    #[inline]
31351    pub fn max_multiview_instance_index(mut self, max_multiview_instance_index: u32) -> Self {
31352        self.max_multiview_instance_index = max_multiview_instance_index;
31353        self
31354    }
31355    #[inline]
31356    pub fn protected_no_fault(mut self, protected_no_fault: bool) -> Self {
31357        self.protected_no_fault = protected_no_fault.into();
31358        self
31359    }
31360    #[inline]
31361    pub fn max_per_set_descriptors(mut self, max_per_set_descriptors: u32) -> Self {
31362        self.max_per_set_descriptors = max_per_set_descriptors;
31363        self
31364    }
31365    #[inline]
31366    pub fn max_memory_allocation_size(mut self, max_memory_allocation_size: DeviceSize) -> Self {
31367        self.max_memory_allocation_size = max_memory_allocation_size;
31368        self
31369    }
31370}
31371#[repr(C)]
31372#[cfg_attr(feature = "debug", derive(Debug))]
31373#[derive(Copy, Clone)]
31374#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan12Features.html>"]
31375#[must_use]
31376pub struct PhysicalDeviceVulkan12Features<'a> {
31377    pub s_type: StructureType,
31378    pub p_next: *mut c_void,
31379    pub sampler_mirror_clamp_to_edge: Bool32,
31380    pub draw_indirect_count: Bool32,
31381    pub storage_buffer8_bit_access: Bool32,
31382    pub uniform_and_storage_buffer8_bit_access: Bool32,
31383    pub storage_push_constant8: Bool32,
31384    pub shader_buffer_int64_atomics: Bool32,
31385    pub shader_shared_int64_atomics: Bool32,
31386    pub shader_float16: Bool32,
31387    pub shader_int8: Bool32,
31388    pub descriptor_indexing: Bool32,
31389    pub shader_input_attachment_array_dynamic_indexing: Bool32,
31390    pub shader_uniform_texel_buffer_array_dynamic_indexing: Bool32,
31391    pub shader_storage_texel_buffer_array_dynamic_indexing: Bool32,
31392    pub shader_uniform_buffer_array_non_uniform_indexing: Bool32,
31393    pub shader_sampled_image_array_non_uniform_indexing: Bool32,
31394    pub shader_storage_buffer_array_non_uniform_indexing: Bool32,
31395    pub shader_storage_image_array_non_uniform_indexing: Bool32,
31396    pub shader_input_attachment_array_non_uniform_indexing: Bool32,
31397    pub shader_uniform_texel_buffer_array_non_uniform_indexing: Bool32,
31398    pub shader_storage_texel_buffer_array_non_uniform_indexing: Bool32,
31399    pub descriptor_binding_uniform_buffer_update_after_bind: Bool32,
31400    pub descriptor_binding_sampled_image_update_after_bind: Bool32,
31401    pub descriptor_binding_storage_image_update_after_bind: Bool32,
31402    pub descriptor_binding_storage_buffer_update_after_bind: Bool32,
31403    pub descriptor_binding_uniform_texel_buffer_update_after_bind: Bool32,
31404    pub descriptor_binding_storage_texel_buffer_update_after_bind: Bool32,
31405    pub descriptor_binding_update_unused_while_pending: Bool32,
31406    pub descriptor_binding_partially_bound: Bool32,
31407    pub descriptor_binding_variable_descriptor_count: Bool32,
31408    pub runtime_descriptor_array: Bool32,
31409    pub sampler_filter_minmax: Bool32,
31410    pub scalar_block_layout: Bool32,
31411    pub imageless_framebuffer: Bool32,
31412    pub uniform_buffer_standard_layout: Bool32,
31413    pub shader_subgroup_extended_types: Bool32,
31414    pub separate_depth_stencil_layouts: Bool32,
31415    pub host_query_reset: Bool32,
31416    pub timeline_semaphore: Bool32,
31417    pub buffer_device_address: Bool32,
31418    pub buffer_device_address_capture_replay: Bool32,
31419    pub buffer_device_address_multi_device: Bool32,
31420    pub vulkan_memory_model: Bool32,
31421    pub vulkan_memory_model_device_scope: Bool32,
31422    pub vulkan_memory_model_availability_visibility_chains: Bool32,
31423    pub shader_output_viewport_index: Bool32,
31424    pub shader_output_layer: Bool32,
31425    pub subgroup_broadcast_dynamic_id: Bool32,
31426    pub _marker: PhantomData<&'a ()>,
31427}
31428unsafe impl Send for PhysicalDeviceVulkan12Features<'_> {}
31429unsafe impl Sync for PhysicalDeviceVulkan12Features<'_> {}
31430impl ::core::default::Default for PhysicalDeviceVulkan12Features<'_> {
31431    #[inline]
31432    fn default() -> Self {
31433        Self {
31434            s_type: Self::STRUCTURE_TYPE,
31435            p_next: ::core::ptr::null_mut(),
31436            sampler_mirror_clamp_to_edge: Bool32::default(),
31437            draw_indirect_count: Bool32::default(),
31438            storage_buffer8_bit_access: Bool32::default(),
31439            uniform_and_storage_buffer8_bit_access: Bool32::default(),
31440            storage_push_constant8: Bool32::default(),
31441            shader_buffer_int64_atomics: Bool32::default(),
31442            shader_shared_int64_atomics: Bool32::default(),
31443            shader_float16: Bool32::default(),
31444            shader_int8: Bool32::default(),
31445            descriptor_indexing: Bool32::default(),
31446            shader_input_attachment_array_dynamic_indexing: Bool32::default(),
31447            shader_uniform_texel_buffer_array_dynamic_indexing: Bool32::default(),
31448            shader_storage_texel_buffer_array_dynamic_indexing: Bool32::default(),
31449            shader_uniform_buffer_array_non_uniform_indexing: Bool32::default(),
31450            shader_sampled_image_array_non_uniform_indexing: Bool32::default(),
31451            shader_storage_buffer_array_non_uniform_indexing: Bool32::default(),
31452            shader_storage_image_array_non_uniform_indexing: Bool32::default(),
31453            shader_input_attachment_array_non_uniform_indexing: Bool32::default(),
31454            shader_uniform_texel_buffer_array_non_uniform_indexing: Bool32::default(),
31455            shader_storage_texel_buffer_array_non_uniform_indexing: Bool32::default(),
31456            descriptor_binding_uniform_buffer_update_after_bind: Bool32::default(),
31457            descriptor_binding_sampled_image_update_after_bind: Bool32::default(),
31458            descriptor_binding_storage_image_update_after_bind: Bool32::default(),
31459            descriptor_binding_storage_buffer_update_after_bind: Bool32::default(),
31460            descriptor_binding_uniform_texel_buffer_update_after_bind: Bool32::default(),
31461            descriptor_binding_storage_texel_buffer_update_after_bind: Bool32::default(),
31462            descriptor_binding_update_unused_while_pending: Bool32::default(),
31463            descriptor_binding_partially_bound: Bool32::default(),
31464            descriptor_binding_variable_descriptor_count: Bool32::default(),
31465            runtime_descriptor_array: Bool32::default(),
31466            sampler_filter_minmax: Bool32::default(),
31467            scalar_block_layout: Bool32::default(),
31468            imageless_framebuffer: Bool32::default(),
31469            uniform_buffer_standard_layout: Bool32::default(),
31470            shader_subgroup_extended_types: Bool32::default(),
31471            separate_depth_stencil_layouts: Bool32::default(),
31472            host_query_reset: Bool32::default(),
31473            timeline_semaphore: Bool32::default(),
31474            buffer_device_address: Bool32::default(),
31475            buffer_device_address_capture_replay: Bool32::default(),
31476            buffer_device_address_multi_device: Bool32::default(),
31477            vulkan_memory_model: Bool32::default(),
31478            vulkan_memory_model_device_scope: Bool32::default(),
31479            vulkan_memory_model_availability_visibility_chains: Bool32::default(),
31480            shader_output_viewport_index: Bool32::default(),
31481            shader_output_layer: Bool32::default(),
31482            subgroup_broadcast_dynamic_id: Bool32::default(),
31483            _marker: PhantomData,
31484        }
31485    }
31486}
31487unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan12Features<'a> {
31488    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
31489}
31490unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVulkan12Features<'_> {}
31491unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVulkan12Features<'_> {}
31492impl<'a> PhysicalDeviceVulkan12Features<'a> {
31493    #[inline]
31494    pub fn sampler_mirror_clamp_to_edge(mut self, sampler_mirror_clamp_to_edge: bool) -> Self {
31495        self.sampler_mirror_clamp_to_edge = sampler_mirror_clamp_to_edge.into();
31496        self
31497    }
31498    #[inline]
31499    pub fn draw_indirect_count(mut self, draw_indirect_count: bool) -> Self {
31500        self.draw_indirect_count = draw_indirect_count.into();
31501        self
31502    }
31503    #[inline]
31504    pub fn storage_buffer8_bit_access(mut self, storage_buffer8_bit_access: bool) -> Self {
31505        self.storage_buffer8_bit_access = storage_buffer8_bit_access.into();
31506        self
31507    }
31508    #[inline]
31509    pub fn uniform_and_storage_buffer8_bit_access(
31510        mut self,
31511        uniform_and_storage_buffer8_bit_access: bool,
31512    ) -> Self {
31513        self.uniform_and_storage_buffer8_bit_access = uniform_and_storage_buffer8_bit_access.into();
31514        self
31515    }
31516    #[inline]
31517    pub fn storage_push_constant8(mut self, storage_push_constant8: bool) -> Self {
31518        self.storage_push_constant8 = storage_push_constant8.into();
31519        self
31520    }
31521    #[inline]
31522    pub fn shader_buffer_int64_atomics(mut self, shader_buffer_int64_atomics: bool) -> Self {
31523        self.shader_buffer_int64_atomics = shader_buffer_int64_atomics.into();
31524        self
31525    }
31526    #[inline]
31527    pub fn shader_shared_int64_atomics(mut self, shader_shared_int64_atomics: bool) -> Self {
31528        self.shader_shared_int64_atomics = shader_shared_int64_atomics.into();
31529        self
31530    }
31531    #[inline]
31532    pub fn shader_float16(mut self, shader_float16: bool) -> Self {
31533        self.shader_float16 = shader_float16.into();
31534        self
31535    }
31536    #[inline]
31537    pub fn shader_int8(mut self, shader_int8: bool) -> Self {
31538        self.shader_int8 = shader_int8.into();
31539        self
31540    }
31541    #[inline]
31542    pub fn descriptor_indexing(mut self, descriptor_indexing: bool) -> Self {
31543        self.descriptor_indexing = descriptor_indexing.into();
31544        self
31545    }
31546    #[inline]
31547    pub fn shader_input_attachment_array_dynamic_indexing(
31548        mut self,
31549        shader_input_attachment_array_dynamic_indexing: bool,
31550    ) -> Self {
31551        self.shader_input_attachment_array_dynamic_indexing =
31552            shader_input_attachment_array_dynamic_indexing.into();
31553        self
31554    }
31555    #[inline]
31556    pub fn shader_uniform_texel_buffer_array_dynamic_indexing(
31557        mut self,
31558        shader_uniform_texel_buffer_array_dynamic_indexing: bool,
31559    ) -> Self {
31560        self.shader_uniform_texel_buffer_array_dynamic_indexing =
31561            shader_uniform_texel_buffer_array_dynamic_indexing.into();
31562        self
31563    }
31564    #[inline]
31565    pub fn shader_storage_texel_buffer_array_dynamic_indexing(
31566        mut self,
31567        shader_storage_texel_buffer_array_dynamic_indexing: bool,
31568    ) -> Self {
31569        self.shader_storage_texel_buffer_array_dynamic_indexing =
31570            shader_storage_texel_buffer_array_dynamic_indexing.into();
31571        self
31572    }
31573    #[inline]
31574    pub fn shader_uniform_buffer_array_non_uniform_indexing(
31575        mut self,
31576        shader_uniform_buffer_array_non_uniform_indexing: bool,
31577    ) -> Self {
31578        self.shader_uniform_buffer_array_non_uniform_indexing =
31579            shader_uniform_buffer_array_non_uniform_indexing.into();
31580        self
31581    }
31582    #[inline]
31583    pub fn shader_sampled_image_array_non_uniform_indexing(
31584        mut self,
31585        shader_sampled_image_array_non_uniform_indexing: bool,
31586    ) -> Self {
31587        self.shader_sampled_image_array_non_uniform_indexing =
31588            shader_sampled_image_array_non_uniform_indexing.into();
31589        self
31590    }
31591    #[inline]
31592    pub fn shader_storage_buffer_array_non_uniform_indexing(
31593        mut self,
31594        shader_storage_buffer_array_non_uniform_indexing: bool,
31595    ) -> Self {
31596        self.shader_storage_buffer_array_non_uniform_indexing =
31597            shader_storage_buffer_array_non_uniform_indexing.into();
31598        self
31599    }
31600    #[inline]
31601    pub fn shader_storage_image_array_non_uniform_indexing(
31602        mut self,
31603        shader_storage_image_array_non_uniform_indexing: bool,
31604    ) -> Self {
31605        self.shader_storage_image_array_non_uniform_indexing =
31606            shader_storage_image_array_non_uniform_indexing.into();
31607        self
31608    }
31609    #[inline]
31610    pub fn shader_input_attachment_array_non_uniform_indexing(
31611        mut self,
31612        shader_input_attachment_array_non_uniform_indexing: bool,
31613    ) -> Self {
31614        self.shader_input_attachment_array_non_uniform_indexing =
31615            shader_input_attachment_array_non_uniform_indexing.into();
31616        self
31617    }
31618    #[inline]
31619    pub fn shader_uniform_texel_buffer_array_non_uniform_indexing(
31620        mut self,
31621        shader_uniform_texel_buffer_array_non_uniform_indexing: bool,
31622    ) -> Self {
31623        self.shader_uniform_texel_buffer_array_non_uniform_indexing =
31624            shader_uniform_texel_buffer_array_non_uniform_indexing.into();
31625        self
31626    }
31627    #[inline]
31628    pub fn shader_storage_texel_buffer_array_non_uniform_indexing(
31629        mut self,
31630        shader_storage_texel_buffer_array_non_uniform_indexing: bool,
31631    ) -> Self {
31632        self.shader_storage_texel_buffer_array_non_uniform_indexing =
31633            shader_storage_texel_buffer_array_non_uniform_indexing.into();
31634        self
31635    }
31636    #[inline]
31637    pub fn descriptor_binding_uniform_buffer_update_after_bind(
31638        mut self,
31639        descriptor_binding_uniform_buffer_update_after_bind: bool,
31640    ) -> Self {
31641        self.descriptor_binding_uniform_buffer_update_after_bind =
31642            descriptor_binding_uniform_buffer_update_after_bind.into();
31643        self
31644    }
31645    #[inline]
31646    pub fn descriptor_binding_sampled_image_update_after_bind(
31647        mut self,
31648        descriptor_binding_sampled_image_update_after_bind: bool,
31649    ) -> Self {
31650        self.descriptor_binding_sampled_image_update_after_bind =
31651            descriptor_binding_sampled_image_update_after_bind.into();
31652        self
31653    }
31654    #[inline]
31655    pub fn descriptor_binding_storage_image_update_after_bind(
31656        mut self,
31657        descriptor_binding_storage_image_update_after_bind: bool,
31658    ) -> Self {
31659        self.descriptor_binding_storage_image_update_after_bind =
31660            descriptor_binding_storage_image_update_after_bind.into();
31661        self
31662    }
31663    #[inline]
31664    pub fn descriptor_binding_storage_buffer_update_after_bind(
31665        mut self,
31666        descriptor_binding_storage_buffer_update_after_bind: bool,
31667    ) -> Self {
31668        self.descriptor_binding_storage_buffer_update_after_bind =
31669            descriptor_binding_storage_buffer_update_after_bind.into();
31670        self
31671    }
31672    #[inline]
31673    pub fn descriptor_binding_uniform_texel_buffer_update_after_bind(
31674        mut self,
31675        descriptor_binding_uniform_texel_buffer_update_after_bind: bool,
31676    ) -> Self {
31677        self.descriptor_binding_uniform_texel_buffer_update_after_bind =
31678            descriptor_binding_uniform_texel_buffer_update_after_bind.into();
31679        self
31680    }
31681    #[inline]
31682    pub fn descriptor_binding_storage_texel_buffer_update_after_bind(
31683        mut self,
31684        descriptor_binding_storage_texel_buffer_update_after_bind: bool,
31685    ) -> Self {
31686        self.descriptor_binding_storage_texel_buffer_update_after_bind =
31687            descriptor_binding_storage_texel_buffer_update_after_bind.into();
31688        self
31689    }
31690    #[inline]
31691    pub fn descriptor_binding_update_unused_while_pending(
31692        mut self,
31693        descriptor_binding_update_unused_while_pending: bool,
31694    ) -> Self {
31695        self.descriptor_binding_update_unused_while_pending =
31696            descriptor_binding_update_unused_while_pending.into();
31697        self
31698    }
31699    #[inline]
31700    pub fn descriptor_binding_partially_bound(
31701        mut self,
31702        descriptor_binding_partially_bound: bool,
31703    ) -> Self {
31704        self.descriptor_binding_partially_bound = descriptor_binding_partially_bound.into();
31705        self
31706    }
31707    #[inline]
31708    pub fn descriptor_binding_variable_descriptor_count(
31709        mut self,
31710        descriptor_binding_variable_descriptor_count: bool,
31711    ) -> Self {
31712        self.descriptor_binding_variable_descriptor_count =
31713            descriptor_binding_variable_descriptor_count.into();
31714        self
31715    }
31716    #[inline]
31717    pub fn runtime_descriptor_array(mut self, runtime_descriptor_array: bool) -> Self {
31718        self.runtime_descriptor_array = runtime_descriptor_array.into();
31719        self
31720    }
31721    #[inline]
31722    pub fn sampler_filter_minmax(mut self, sampler_filter_minmax: bool) -> Self {
31723        self.sampler_filter_minmax = sampler_filter_minmax.into();
31724        self
31725    }
31726    #[inline]
31727    pub fn scalar_block_layout(mut self, scalar_block_layout: bool) -> Self {
31728        self.scalar_block_layout = scalar_block_layout.into();
31729        self
31730    }
31731    #[inline]
31732    pub fn imageless_framebuffer(mut self, imageless_framebuffer: bool) -> Self {
31733        self.imageless_framebuffer = imageless_framebuffer.into();
31734        self
31735    }
31736    #[inline]
31737    pub fn uniform_buffer_standard_layout(mut self, uniform_buffer_standard_layout: bool) -> Self {
31738        self.uniform_buffer_standard_layout = uniform_buffer_standard_layout.into();
31739        self
31740    }
31741    #[inline]
31742    pub fn shader_subgroup_extended_types(mut self, shader_subgroup_extended_types: bool) -> Self {
31743        self.shader_subgroup_extended_types = shader_subgroup_extended_types.into();
31744        self
31745    }
31746    #[inline]
31747    pub fn separate_depth_stencil_layouts(mut self, separate_depth_stencil_layouts: bool) -> Self {
31748        self.separate_depth_stencil_layouts = separate_depth_stencil_layouts.into();
31749        self
31750    }
31751    #[inline]
31752    pub fn host_query_reset(mut self, host_query_reset: bool) -> Self {
31753        self.host_query_reset = host_query_reset.into();
31754        self
31755    }
31756    #[inline]
31757    pub fn timeline_semaphore(mut self, timeline_semaphore: bool) -> Self {
31758        self.timeline_semaphore = timeline_semaphore.into();
31759        self
31760    }
31761    #[inline]
31762    pub fn buffer_device_address(mut self, buffer_device_address: bool) -> Self {
31763        self.buffer_device_address = buffer_device_address.into();
31764        self
31765    }
31766    #[inline]
31767    pub fn buffer_device_address_capture_replay(
31768        mut self,
31769        buffer_device_address_capture_replay: bool,
31770    ) -> Self {
31771        self.buffer_device_address_capture_replay = buffer_device_address_capture_replay.into();
31772        self
31773    }
31774    #[inline]
31775    pub fn buffer_device_address_multi_device(
31776        mut self,
31777        buffer_device_address_multi_device: bool,
31778    ) -> Self {
31779        self.buffer_device_address_multi_device = buffer_device_address_multi_device.into();
31780        self
31781    }
31782    #[inline]
31783    pub fn vulkan_memory_model(mut self, vulkan_memory_model: bool) -> Self {
31784        self.vulkan_memory_model = vulkan_memory_model.into();
31785        self
31786    }
31787    #[inline]
31788    pub fn vulkan_memory_model_device_scope(
31789        mut self,
31790        vulkan_memory_model_device_scope: bool,
31791    ) -> Self {
31792        self.vulkan_memory_model_device_scope = vulkan_memory_model_device_scope.into();
31793        self
31794    }
31795    #[inline]
31796    pub fn vulkan_memory_model_availability_visibility_chains(
31797        mut self,
31798        vulkan_memory_model_availability_visibility_chains: bool,
31799    ) -> Self {
31800        self.vulkan_memory_model_availability_visibility_chains =
31801            vulkan_memory_model_availability_visibility_chains.into();
31802        self
31803    }
31804    #[inline]
31805    pub fn shader_output_viewport_index(mut self, shader_output_viewport_index: bool) -> Self {
31806        self.shader_output_viewport_index = shader_output_viewport_index.into();
31807        self
31808    }
31809    #[inline]
31810    pub fn shader_output_layer(mut self, shader_output_layer: bool) -> Self {
31811        self.shader_output_layer = shader_output_layer.into();
31812        self
31813    }
31814    #[inline]
31815    pub fn subgroup_broadcast_dynamic_id(mut self, subgroup_broadcast_dynamic_id: bool) -> Self {
31816        self.subgroup_broadcast_dynamic_id = subgroup_broadcast_dynamic_id.into();
31817        self
31818    }
31819}
31820#[repr(C)]
31821#[derive(Copy, Clone)]
31822#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan12Properties.html>"]
31823#[must_use]
31824pub struct PhysicalDeviceVulkan12Properties<'a> {
31825    pub s_type: StructureType,
31826    pub p_next: *mut c_void,
31827    pub driver_id: DriverId,
31828    pub driver_name: [c_char; MAX_DRIVER_NAME_SIZE],
31829    pub driver_info: [c_char; MAX_DRIVER_INFO_SIZE],
31830    pub conformance_version: ConformanceVersion,
31831    pub denorm_behavior_independence: ShaderFloatControlsIndependence,
31832    pub rounding_mode_independence: ShaderFloatControlsIndependence,
31833    pub shader_signed_zero_inf_nan_preserve_float16: Bool32,
31834    pub shader_signed_zero_inf_nan_preserve_float32: Bool32,
31835    pub shader_signed_zero_inf_nan_preserve_float64: Bool32,
31836    pub shader_denorm_preserve_float16: Bool32,
31837    pub shader_denorm_preserve_float32: Bool32,
31838    pub shader_denorm_preserve_float64: Bool32,
31839    pub shader_denorm_flush_to_zero_float16: Bool32,
31840    pub shader_denorm_flush_to_zero_float32: Bool32,
31841    pub shader_denorm_flush_to_zero_float64: Bool32,
31842    pub shader_rounding_mode_rte_float16: Bool32,
31843    pub shader_rounding_mode_rte_float32: Bool32,
31844    pub shader_rounding_mode_rte_float64: Bool32,
31845    pub shader_rounding_mode_rtz_float16: Bool32,
31846    pub shader_rounding_mode_rtz_float32: Bool32,
31847    pub shader_rounding_mode_rtz_float64: Bool32,
31848    pub max_update_after_bind_descriptors_in_all_pools: u32,
31849    pub shader_uniform_buffer_array_non_uniform_indexing_native: Bool32,
31850    pub shader_sampled_image_array_non_uniform_indexing_native: Bool32,
31851    pub shader_storage_buffer_array_non_uniform_indexing_native: Bool32,
31852    pub shader_storage_image_array_non_uniform_indexing_native: Bool32,
31853    pub shader_input_attachment_array_non_uniform_indexing_native: Bool32,
31854    pub robust_buffer_access_update_after_bind: Bool32,
31855    pub quad_divergent_implicit_lod: Bool32,
31856    pub max_per_stage_descriptor_update_after_bind_samplers: u32,
31857    pub max_per_stage_descriptor_update_after_bind_uniform_buffers: u32,
31858    pub max_per_stage_descriptor_update_after_bind_storage_buffers: u32,
31859    pub max_per_stage_descriptor_update_after_bind_sampled_images: u32,
31860    pub max_per_stage_descriptor_update_after_bind_storage_images: u32,
31861    pub max_per_stage_descriptor_update_after_bind_input_attachments: u32,
31862    pub max_per_stage_update_after_bind_resources: u32,
31863    pub max_descriptor_set_update_after_bind_samplers: u32,
31864    pub max_descriptor_set_update_after_bind_uniform_buffers: u32,
31865    pub max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32,
31866    pub max_descriptor_set_update_after_bind_storage_buffers: u32,
31867    pub max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32,
31868    pub max_descriptor_set_update_after_bind_sampled_images: u32,
31869    pub max_descriptor_set_update_after_bind_storage_images: u32,
31870    pub max_descriptor_set_update_after_bind_input_attachments: u32,
31871    pub supported_depth_resolve_modes: ResolveModeFlags,
31872    pub supported_stencil_resolve_modes: ResolveModeFlags,
31873    pub independent_resolve_none: Bool32,
31874    pub independent_resolve: Bool32,
31875    pub filter_minmax_single_component_formats: Bool32,
31876    pub filter_minmax_image_component_mapping: Bool32,
31877    pub max_timeline_semaphore_value_difference: u64,
31878    pub framebuffer_integer_color_sample_counts: SampleCountFlags,
31879    pub _marker: PhantomData<&'a ()>,
31880}
31881unsafe impl Send for PhysicalDeviceVulkan12Properties<'_> {}
31882unsafe impl Sync for PhysicalDeviceVulkan12Properties<'_> {}
31883#[cfg(feature = "debug")]
31884impl fmt::Debug for PhysicalDeviceVulkan12Properties<'_> {
31885    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
31886        fmt.debug_struct("PhysicalDeviceVulkan12Properties")
31887            .field("s_type", &self.s_type)
31888            .field("p_next", &self.p_next)
31889            .field("driver_id", &self.driver_id)
31890            .field("driver_name", &self.driver_name_as_c_str())
31891            .field("driver_info", &self.driver_info_as_c_str())
31892            .field("conformance_version", &self.conformance_version)
31893            .field(
31894                "denorm_behavior_independence",
31895                &self.denorm_behavior_independence,
31896            )
31897            .field(
31898                "rounding_mode_independence",
31899                &self.rounding_mode_independence,
31900            )
31901            .field(
31902                "shader_signed_zero_inf_nan_preserve_float16",
31903                &self.shader_signed_zero_inf_nan_preserve_float16,
31904            )
31905            .field(
31906                "shader_signed_zero_inf_nan_preserve_float32",
31907                &self.shader_signed_zero_inf_nan_preserve_float32,
31908            )
31909            .field(
31910                "shader_signed_zero_inf_nan_preserve_float64",
31911                &self.shader_signed_zero_inf_nan_preserve_float64,
31912            )
31913            .field(
31914                "shader_denorm_preserve_float16",
31915                &self.shader_denorm_preserve_float16,
31916            )
31917            .field(
31918                "shader_denorm_preserve_float32",
31919                &self.shader_denorm_preserve_float32,
31920            )
31921            .field(
31922                "shader_denorm_preserve_float64",
31923                &self.shader_denorm_preserve_float64,
31924            )
31925            .field(
31926                "shader_denorm_flush_to_zero_float16",
31927                &self.shader_denorm_flush_to_zero_float16,
31928            )
31929            .field(
31930                "shader_denorm_flush_to_zero_float32",
31931                &self.shader_denorm_flush_to_zero_float32,
31932            )
31933            .field(
31934                "shader_denorm_flush_to_zero_float64",
31935                &self.shader_denorm_flush_to_zero_float64,
31936            )
31937            .field(
31938                "shader_rounding_mode_rte_float16",
31939                &self.shader_rounding_mode_rte_float16,
31940            )
31941            .field(
31942                "shader_rounding_mode_rte_float32",
31943                &self.shader_rounding_mode_rte_float32,
31944            )
31945            .field(
31946                "shader_rounding_mode_rte_float64",
31947                &self.shader_rounding_mode_rte_float64,
31948            )
31949            .field(
31950                "shader_rounding_mode_rtz_float16",
31951                &self.shader_rounding_mode_rtz_float16,
31952            )
31953            .field(
31954                "shader_rounding_mode_rtz_float32",
31955                &self.shader_rounding_mode_rtz_float32,
31956            )
31957            .field(
31958                "shader_rounding_mode_rtz_float64",
31959                &self.shader_rounding_mode_rtz_float64,
31960            )
31961            .field(
31962                "max_update_after_bind_descriptors_in_all_pools",
31963                &self.max_update_after_bind_descriptors_in_all_pools,
31964            )
31965            .field(
31966                "shader_uniform_buffer_array_non_uniform_indexing_native",
31967                &self.shader_uniform_buffer_array_non_uniform_indexing_native,
31968            )
31969            .field(
31970                "shader_sampled_image_array_non_uniform_indexing_native",
31971                &self.shader_sampled_image_array_non_uniform_indexing_native,
31972            )
31973            .field(
31974                "shader_storage_buffer_array_non_uniform_indexing_native",
31975                &self.shader_storage_buffer_array_non_uniform_indexing_native,
31976            )
31977            .field(
31978                "shader_storage_image_array_non_uniform_indexing_native",
31979                &self.shader_storage_image_array_non_uniform_indexing_native,
31980            )
31981            .field(
31982                "shader_input_attachment_array_non_uniform_indexing_native",
31983                &self.shader_input_attachment_array_non_uniform_indexing_native,
31984            )
31985            .field(
31986                "robust_buffer_access_update_after_bind",
31987                &self.robust_buffer_access_update_after_bind,
31988            )
31989            .field(
31990                "quad_divergent_implicit_lod",
31991                &self.quad_divergent_implicit_lod,
31992            )
31993            .field(
31994                "max_per_stage_descriptor_update_after_bind_samplers",
31995                &self.max_per_stage_descriptor_update_after_bind_samplers,
31996            )
31997            .field(
31998                "max_per_stage_descriptor_update_after_bind_uniform_buffers",
31999                &self.max_per_stage_descriptor_update_after_bind_uniform_buffers,
32000            )
32001            .field(
32002                "max_per_stage_descriptor_update_after_bind_storage_buffers",
32003                &self.max_per_stage_descriptor_update_after_bind_storage_buffers,
32004            )
32005            .field(
32006                "max_per_stage_descriptor_update_after_bind_sampled_images",
32007                &self.max_per_stage_descriptor_update_after_bind_sampled_images,
32008            )
32009            .field(
32010                "max_per_stage_descriptor_update_after_bind_storage_images",
32011                &self.max_per_stage_descriptor_update_after_bind_storage_images,
32012            )
32013            .field(
32014                "max_per_stage_descriptor_update_after_bind_input_attachments",
32015                &self.max_per_stage_descriptor_update_after_bind_input_attachments,
32016            )
32017            .field(
32018                "max_per_stage_update_after_bind_resources",
32019                &self.max_per_stage_update_after_bind_resources,
32020            )
32021            .field(
32022                "max_descriptor_set_update_after_bind_samplers",
32023                &self.max_descriptor_set_update_after_bind_samplers,
32024            )
32025            .field(
32026                "max_descriptor_set_update_after_bind_uniform_buffers",
32027                &self.max_descriptor_set_update_after_bind_uniform_buffers,
32028            )
32029            .field(
32030                "max_descriptor_set_update_after_bind_uniform_buffers_dynamic",
32031                &self.max_descriptor_set_update_after_bind_uniform_buffers_dynamic,
32032            )
32033            .field(
32034                "max_descriptor_set_update_after_bind_storage_buffers",
32035                &self.max_descriptor_set_update_after_bind_storage_buffers,
32036            )
32037            .field(
32038                "max_descriptor_set_update_after_bind_storage_buffers_dynamic",
32039                &self.max_descriptor_set_update_after_bind_storage_buffers_dynamic,
32040            )
32041            .field(
32042                "max_descriptor_set_update_after_bind_sampled_images",
32043                &self.max_descriptor_set_update_after_bind_sampled_images,
32044            )
32045            .field(
32046                "max_descriptor_set_update_after_bind_storage_images",
32047                &self.max_descriptor_set_update_after_bind_storage_images,
32048            )
32049            .field(
32050                "max_descriptor_set_update_after_bind_input_attachments",
32051                &self.max_descriptor_set_update_after_bind_input_attachments,
32052            )
32053            .field(
32054                "supported_depth_resolve_modes",
32055                &self.supported_depth_resolve_modes,
32056            )
32057            .field(
32058                "supported_stencil_resolve_modes",
32059                &self.supported_stencil_resolve_modes,
32060            )
32061            .field("independent_resolve_none", &self.independent_resolve_none)
32062            .field("independent_resolve", &self.independent_resolve)
32063            .field(
32064                "filter_minmax_single_component_formats",
32065                &self.filter_minmax_single_component_formats,
32066            )
32067            .field(
32068                "filter_minmax_image_component_mapping",
32069                &self.filter_minmax_image_component_mapping,
32070            )
32071            .field(
32072                "max_timeline_semaphore_value_difference",
32073                &self.max_timeline_semaphore_value_difference,
32074            )
32075            .field(
32076                "framebuffer_integer_color_sample_counts",
32077                &self.framebuffer_integer_color_sample_counts,
32078            )
32079            .finish()
32080    }
32081}
32082impl ::core::default::Default for PhysicalDeviceVulkan12Properties<'_> {
32083    #[inline]
32084    fn default() -> Self {
32085        Self {
32086            s_type: Self::STRUCTURE_TYPE,
32087            p_next: ::core::ptr::null_mut(),
32088            driver_id: DriverId::default(),
32089            driver_name: unsafe { ::core::mem::zeroed() },
32090            driver_info: unsafe { ::core::mem::zeroed() },
32091            conformance_version: ConformanceVersion::default(),
32092            denorm_behavior_independence: ShaderFloatControlsIndependence::default(),
32093            rounding_mode_independence: ShaderFloatControlsIndependence::default(),
32094            shader_signed_zero_inf_nan_preserve_float16: Bool32::default(),
32095            shader_signed_zero_inf_nan_preserve_float32: Bool32::default(),
32096            shader_signed_zero_inf_nan_preserve_float64: Bool32::default(),
32097            shader_denorm_preserve_float16: Bool32::default(),
32098            shader_denorm_preserve_float32: Bool32::default(),
32099            shader_denorm_preserve_float64: Bool32::default(),
32100            shader_denorm_flush_to_zero_float16: Bool32::default(),
32101            shader_denorm_flush_to_zero_float32: Bool32::default(),
32102            shader_denorm_flush_to_zero_float64: Bool32::default(),
32103            shader_rounding_mode_rte_float16: Bool32::default(),
32104            shader_rounding_mode_rte_float32: Bool32::default(),
32105            shader_rounding_mode_rte_float64: Bool32::default(),
32106            shader_rounding_mode_rtz_float16: Bool32::default(),
32107            shader_rounding_mode_rtz_float32: Bool32::default(),
32108            shader_rounding_mode_rtz_float64: Bool32::default(),
32109            max_update_after_bind_descriptors_in_all_pools: u32::default(),
32110            shader_uniform_buffer_array_non_uniform_indexing_native: Bool32::default(),
32111            shader_sampled_image_array_non_uniform_indexing_native: Bool32::default(),
32112            shader_storage_buffer_array_non_uniform_indexing_native: Bool32::default(),
32113            shader_storage_image_array_non_uniform_indexing_native: Bool32::default(),
32114            shader_input_attachment_array_non_uniform_indexing_native: Bool32::default(),
32115            robust_buffer_access_update_after_bind: Bool32::default(),
32116            quad_divergent_implicit_lod: Bool32::default(),
32117            max_per_stage_descriptor_update_after_bind_samplers: u32::default(),
32118            max_per_stage_descriptor_update_after_bind_uniform_buffers: u32::default(),
32119            max_per_stage_descriptor_update_after_bind_storage_buffers: u32::default(),
32120            max_per_stage_descriptor_update_after_bind_sampled_images: u32::default(),
32121            max_per_stage_descriptor_update_after_bind_storage_images: u32::default(),
32122            max_per_stage_descriptor_update_after_bind_input_attachments: u32::default(),
32123            max_per_stage_update_after_bind_resources: u32::default(),
32124            max_descriptor_set_update_after_bind_samplers: u32::default(),
32125            max_descriptor_set_update_after_bind_uniform_buffers: u32::default(),
32126            max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32::default(),
32127            max_descriptor_set_update_after_bind_storage_buffers: u32::default(),
32128            max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32::default(),
32129            max_descriptor_set_update_after_bind_sampled_images: u32::default(),
32130            max_descriptor_set_update_after_bind_storage_images: u32::default(),
32131            max_descriptor_set_update_after_bind_input_attachments: u32::default(),
32132            supported_depth_resolve_modes: ResolveModeFlags::default(),
32133            supported_stencil_resolve_modes: ResolveModeFlags::default(),
32134            independent_resolve_none: Bool32::default(),
32135            independent_resolve: Bool32::default(),
32136            filter_minmax_single_component_formats: Bool32::default(),
32137            filter_minmax_image_component_mapping: Bool32::default(),
32138            max_timeline_semaphore_value_difference: u64::default(),
32139            framebuffer_integer_color_sample_counts: SampleCountFlags::default(),
32140            _marker: PhantomData,
32141        }
32142    }
32143}
32144unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan12Properties<'a> {
32145    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES;
32146}
32147unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceVulkan12Properties<'_> {}
32148impl<'a> PhysicalDeviceVulkan12Properties<'a> {
32149    #[inline]
32150    pub fn driver_id(mut self, driver_id: DriverId) -> Self {
32151        self.driver_id = driver_id;
32152        self
32153    }
32154    #[inline]
32155    pub fn driver_name(
32156        mut self,
32157        driver_name: &CStr,
32158    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
32159        write_c_str_slice_with_nul(&mut self.driver_name, driver_name).map(|()| self)
32160    }
32161    #[inline]
32162    pub fn driver_name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
32163        wrap_c_str_slice_until_nul(&self.driver_name)
32164    }
32165    #[inline]
32166    pub fn driver_info(
32167        mut self,
32168        driver_info: &CStr,
32169    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
32170        write_c_str_slice_with_nul(&mut self.driver_info, driver_info).map(|()| self)
32171    }
32172    #[inline]
32173    pub fn driver_info_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
32174        wrap_c_str_slice_until_nul(&self.driver_info)
32175    }
32176    #[inline]
32177    pub fn conformance_version(mut self, conformance_version: ConformanceVersion) -> Self {
32178        self.conformance_version = conformance_version;
32179        self
32180    }
32181    #[inline]
32182    pub fn denorm_behavior_independence(
32183        mut self,
32184        denorm_behavior_independence: ShaderFloatControlsIndependence,
32185    ) -> Self {
32186        self.denorm_behavior_independence = denorm_behavior_independence;
32187        self
32188    }
32189    #[inline]
32190    pub fn rounding_mode_independence(
32191        mut self,
32192        rounding_mode_independence: ShaderFloatControlsIndependence,
32193    ) -> Self {
32194        self.rounding_mode_independence = rounding_mode_independence;
32195        self
32196    }
32197    #[inline]
32198    pub fn shader_signed_zero_inf_nan_preserve_float16(
32199        mut self,
32200        shader_signed_zero_inf_nan_preserve_float16: bool,
32201    ) -> Self {
32202        self.shader_signed_zero_inf_nan_preserve_float16 =
32203            shader_signed_zero_inf_nan_preserve_float16.into();
32204        self
32205    }
32206    #[inline]
32207    pub fn shader_signed_zero_inf_nan_preserve_float32(
32208        mut self,
32209        shader_signed_zero_inf_nan_preserve_float32: bool,
32210    ) -> Self {
32211        self.shader_signed_zero_inf_nan_preserve_float32 =
32212            shader_signed_zero_inf_nan_preserve_float32.into();
32213        self
32214    }
32215    #[inline]
32216    pub fn shader_signed_zero_inf_nan_preserve_float64(
32217        mut self,
32218        shader_signed_zero_inf_nan_preserve_float64: bool,
32219    ) -> Self {
32220        self.shader_signed_zero_inf_nan_preserve_float64 =
32221            shader_signed_zero_inf_nan_preserve_float64.into();
32222        self
32223    }
32224    #[inline]
32225    pub fn shader_denorm_preserve_float16(mut self, shader_denorm_preserve_float16: bool) -> Self {
32226        self.shader_denorm_preserve_float16 = shader_denorm_preserve_float16.into();
32227        self
32228    }
32229    #[inline]
32230    pub fn shader_denorm_preserve_float32(mut self, shader_denorm_preserve_float32: bool) -> Self {
32231        self.shader_denorm_preserve_float32 = shader_denorm_preserve_float32.into();
32232        self
32233    }
32234    #[inline]
32235    pub fn shader_denorm_preserve_float64(mut self, shader_denorm_preserve_float64: bool) -> Self {
32236        self.shader_denorm_preserve_float64 = shader_denorm_preserve_float64.into();
32237        self
32238    }
32239    #[inline]
32240    pub fn shader_denorm_flush_to_zero_float16(
32241        mut self,
32242        shader_denorm_flush_to_zero_float16: bool,
32243    ) -> Self {
32244        self.shader_denorm_flush_to_zero_float16 = shader_denorm_flush_to_zero_float16.into();
32245        self
32246    }
32247    #[inline]
32248    pub fn shader_denorm_flush_to_zero_float32(
32249        mut self,
32250        shader_denorm_flush_to_zero_float32: bool,
32251    ) -> Self {
32252        self.shader_denorm_flush_to_zero_float32 = shader_denorm_flush_to_zero_float32.into();
32253        self
32254    }
32255    #[inline]
32256    pub fn shader_denorm_flush_to_zero_float64(
32257        mut self,
32258        shader_denorm_flush_to_zero_float64: bool,
32259    ) -> Self {
32260        self.shader_denorm_flush_to_zero_float64 = shader_denorm_flush_to_zero_float64.into();
32261        self
32262    }
32263    #[inline]
32264    pub fn shader_rounding_mode_rte_float16(
32265        mut self,
32266        shader_rounding_mode_rte_float16: bool,
32267    ) -> Self {
32268        self.shader_rounding_mode_rte_float16 = shader_rounding_mode_rte_float16.into();
32269        self
32270    }
32271    #[inline]
32272    pub fn shader_rounding_mode_rte_float32(
32273        mut self,
32274        shader_rounding_mode_rte_float32: bool,
32275    ) -> Self {
32276        self.shader_rounding_mode_rte_float32 = shader_rounding_mode_rte_float32.into();
32277        self
32278    }
32279    #[inline]
32280    pub fn shader_rounding_mode_rte_float64(
32281        mut self,
32282        shader_rounding_mode_rte_float64: bool,
32283    ) -> Self {
32284        self.shader_rounding_mode_rte_float64 = shader_rounding_mode_rte_float64.into();
32285        self
32286    }
32287    #[inline]
32288    pub fn shader_rounding_mode_rtz_float16(
32289        mut self,
32290        shader_rounding_mode_rtz_float16: bool,
32291    ) -> Self {
32292        self.shader_rounding_mode_rtz_float16 = shader_rounding_mode_rtz_float16.into();
32293        self
32294    }
32295    #[inline]
32296    pub fn shader_rounding_mode_rtz_float32(
32297        mut self,
32298        shader_rounding_mode_rtz_float32: bool,
32299    ) -> Self {
32300        self.shader_rounding_mode_rtz_float32 = shader_rounding_mode_rtz_float32.into();
32301        self
32302    }
32303    #[inline]
32304    pub fn shader_rounding_mode_rtz_float64(
32305        mut self,
32306        shader_rounding_mode_rtz_float64: bool,
32307    ) -> Self {
32308        self.shader_rounding_mode_rtz_float64 = shader_rounding_mode_rtz_float64.into();
32309        self
32310    }
32311    #[inline]
32312    pub fn max_update_after_bind_descriptors_in_all_pools(
32313        mut self,
32314        max_update_after_bind_descriptors_in_all_pools: u32,
32315    ) -> Self {
32316        self.max_update_after_bind_descriptors_in_all_pools =
32317            max_update_after_bind_descriptors_in_all_pools;
32318        self
32319    }
32320    #[inline]
32321    pub fn shader_uniform_buffer_array_non_uniform_indexing_native(
32322        mut self,
32323        shader_uniform_buffer_array_non_uniform_indexing_native: bool,
32324    ) -> Self {
32325        self.shader_uniform_buffer_array_non_uniform_indexing_native =
32326            shader_uniform_buffer_array_non_uniform_indexing_native.into();
32327        self
32328    }
32329    #[inline]
32330    pub fn shader_sampled_image_array_non_uniform_indexing_native(
32331        mut self,
32332        shader_sampled_image_array_non_uniform_indexing_native: bool,
32333    ) -> Self {
32334        self.shader_sampled_image_array_non_uniform_indexing_native =
32335            shader_sampled_image_array_non_uniform_indexing_native.into();
32336        self
32337    }
32338    #[inline]
32339    pub fn shader_storage_buffer_array_non_uniform_indexing_native(
32340        mut self,
32341        shader_storage_buffer_array_non_uniform_indexing_native: bool,
32342    ) -> Self {
32343        self.shader_storage_buffer_array_non_uniform_indexing_native =
32344            shader_storage_buffer_array_non_uniform_indexing_native.into();
32345        self
32346    }
32347    #[inline]
32348    pub fn shader_storage_image_array_non_uniform_indexing_native(
32349        mut self,
32350        shader_storage_image_array_non_uniform_indexing_native: bool,
32351    ) -> Self {
32352        self.shader_storage_image_array_non_uniform_indexing_native =
32353            shader_storage_image_array_non_uniform_indexing_native.into();
32354        self
32355    }
32356    #[inline]
32357    pub fn shader_input_attachment_array_non_uniform_indexing_native(
32358        mut self,
32359        shader_input_attachment_array_non_uniform_indexing_native: bool,
32360    ) -> Self {
32361        self.shader_input_attachment_array_non_uniform_indexing_native =
32362            shader_input_attachment_array_non_uniform_indexing_native.into();
32363        self
32364    }
32365    #[inline]
32366    pub fn robust_buffer_access_update_after_bind(
32367        mut self,
32368        robust_buffer_access_update_after_bind: bool,
32369    ) -> Self {
32370        self.robust_buffer_access_update_after_bind = robust_buffer_access_update_after_bind.into();
32371        self
32372    }
32373    #[inline]
32374    pub fn quad_divergent_implicit_lod(mut self, quad_divergent_implicit_lod: bool) -> Self {
32375        self.quad_divergent_implicit_lod = quad_divergent_implicit_lod.into();
32376        self
32377    }
32378    #[inline]
32379    pub fn max_per_stage_descriptor_update_after_bind_samplers(
32380        mut self,
32381        max_per_stage_descriptor_update_after_bind_samplers: u32,
32382    ) -> Self {
32383        self.max_per_stage_descriptor_update_after_bind_samplers =
32384            max_per_stage_descriptor_update_after_bind_samplers;
32385        self
32386    }
32387    #[inline]
32388    pub fn max_per_stage_descriptor_update_after_bind_uniform_buffers(
32389        mut self,
32390        max_per_stage_descriptor_update_after_bind_uniform_buffers: u32,
32391    ) -> Self {
32392        self.max_per_stage_descriptor_update_after_bind_uniform_buffers =
32393            max_per_stage_descriptor_update_after_bind_uniform_buffers;
32394        self
32395    }
32396    #[inline]
32397    pub fn max_per_stage_descriptor_update_after_bind_storage_buffers(
32398        mut self,
32399        max_per_stage_descriptor_update_after_bind_storage_buffers: u32,
32400    ) -> Self {
32401        self.max_per_stage_descriptor_update_after_bind_storage_buffers =
32402            max_per_stage_descriptor_update_after_bind_storage_buffers;
32403        self
32404    }
32405    #[inline]
32406    pub fn max_per_stage_descriptor_update_after_bind_sampled_images(
32407        mut self,
32408        max_per_stage_descriptor_update_after_bind_sampled_images: u32,
32409    ) -> Self {
32410        self.max_per_stage_descriptor_update_after_bind_sampled_images =
32411            max_per_stage_descriptor_update_after_bind_sampled_images;
32412        self
32413    }
32414    #[inline]
32415    pub fn max_per_stage_descriptor_update_after_bind_storage_images(
32416        mut self,
32417        max_per_stage_descriptor_update_after_bind_storage_images: u32,
32418    ) -> Self {
32419        self.max_per_stage_descriptor_update_after_bind_storage_images =
32420            max_per_stage_descriptor_update_after_bind_storage_images;
32421        self
32422    }
32423    #[inline]
32424    pub fn max_per_stage_descriptor_update_after_bind_input_attachments(
32425        mut self,
32426        max_per_stage_descriptor_update_after_bind_input_attachments: u32,
32427    ) -> Self {
32428        self.max_per_stage_descriptor_update_after_bind_input_attachments =
32429            max_per_stage_descriptor_update_after_bind_input_attachments;
32430        self
32431    }
32432    #[inline]
32433    pub fn max_per_stage_update_after_bind_resources(
32434        mut self,
32435        max_per_stage_update_after_bind_resources: u32,
32436    ) -> Self {
32437        self.max_per_stage_update_after_bind_resources = max_per_stage_update_after_bind_resources;
32438        self
32439    }
32440    #[inline]
32441    pub fn max_descriptor_set_update_after_bind_samplers(
32442        mut self,
32443        max_descriptor_set_update_after_bind_samplers: u32,
32444    ) -> Self {
32445        self.max_descriptor_set_update_after_bind_samplers =
32446            max_descriptor_set_update_after_bind_samplers;
32447        self
32448    }
32449    #[inline]
32450    pub fn max_descriptor_set_update_after_bind_uniform_buffers(
32451        mut self,
32452        max_descriptor_set_update_after_bind_uniform_buffers: u32,
32453    ) -> Self {
32454        self.max_descriptor_set_update_after_bind_uniform_buffers =
32455            max_descriptor_set_update_after_bind_uniform_buffers;
32456        self
32457    }
32458    #[inline]
32459    pub fn max_descriptor_set_update_after_bind_uniform_buffers_dynamic(
32460        mut self,
32461        max_descriptor_set_update_after_bind_uniform_buffers_dynamic: u32,
32462    ) -> Self {
32463        self.max_descriptor_set_update_after_bind_uniform_buffers_dynamic =
32464            max_descriptor_set_update_after_bind_uniform_buffers_dynamic;
32465        self
32466    }
32467    #[inline]
32468    pub fn max_descriptor_set_update_after_bind_storage_buffers(
32469        mut self,
32470        max_descriptor_set_update_after_bind_storage_buffers: u32,
32471    ) -> Self {
32472        self.max_descriptor_set_update_after_bind_storage_buffers =
32473            max_descriptor_set_update_after_bind_storage_buffers;
32474        self
32475    }
32476    #[inline]
32477    pub fn max_descriptor_set_update_after_bind_storage_buffers_dynamic(
32478        mut self,
32479        max_descriptor_set_update_after_bind_storage_buffers_dynamic: u32,
32480    ) -> Self {
32481        self.max_descriptor_set_update_after_bind_storage_buffers_dynamic =
32482            max_descriptor_set_update_after_bind_storage_buffers_dynamic;
32483        self
32484    }
32485    #[inline]
32486    pub fn max_descriptor_set_update_after_bind_sampled_images(
32487        mut self,
32488        max_descriptor_set_update_after_bind_sampled_images: u32,
32489    ) -> Self {
32490        self.max_descriptor_set_update_after_bind_sampled_images =
32491            max_descriptor_set_update_after_bind_sampled_images;
32492        self
32493    }
32494    #[inline]
32495    pub fn max_descriptor_set_update_after_bind_storage_images(
32496        mut self,
32497        max_descriptor_set_update_after_bind_storage_images: u32,
32498    ) -> Self {
32499        self.max_descriptor_set_update_after_bind_storage_images =
32500            max_descriptor_set_update_after_bind_storage_images;
32501        self
32502    }
32503    #[inline]
32504    pub fn max_descriptor_set_update_after_bind_input_attachments(
32505        mut self,
32506        max_descriptor_set_update_after_bind_input_attachments: u32,
32507    ) -> Self {
32508        self.max_descriptor_set_update_after_bind_input_attachments =
32509            max_descriptor_set_update_after_bind_input_attachments;
32510        self
32511    }
32512    #[inline]
32513    pub fn supported_depth_resolve_modes(
32514        mut self,
32515        supported_depth_resolve_modes: ResolveModeFlags,
32516    ) -> Self {
32517        self.supported_depth_resolve_modes = supported_depth_resolve_modes;
32518        self
32519    }
32520    #[inline]
32521    pub fn supported_stencil_resolve_modes(
32522        mut self,
32523        supported_stencil_resolve_modes: ResolveModeFlags,
32524    ) -> Self {
32525        self.supported_stencil_resolve_modes = supported_stencil_resolve_modes;
32526        self
32527    }
32528    #[inline]
32529    pub fn independent_resolve_none(mut self, independent_resolve_none: bool) -> Self {
32530        self.independent_resolve_none = independent_resolve_none.into();
32531        self
32532    }
32533    #[inline]
32534    pub fn independent_resolve(mut self, independent_resolve: bool) -> Self {
32535        self.independent_resolve = independent_resolve.into();
32536        self
32537    }
32538    #[inline]
32539    pub fn filter_minmax_single_component_formats(
32540        mut self,
32541        filter_minmax_single_component_formats: bool,
32542    ) -> Self {
32543        self.filter_minmax_single_component_formats = filter_minmax_single_component_formats.into();
32544        self
32545    }
32546    #[inline]
32547    pub fn filter_minmax_image_component_mapping(
32548        mut self,
32549        filter_minmax_image_component_mapping: bool,
32550    ) -> Self {
32551        self.filter_minmax_image_component_mapping = filter_minmax_image_component_mapping.into();
32552        self
32553    }
32554    #[inline]
32555    pub fn max_timeline_semaphore_value_difference(
32556        mut self,
32557        max_timeline_semaphore_value_difference: u64,
32558    ) -> Self {
32559        self.max_timeline_semaphore_value_difference = max_timeline_semaphore_value_difference;
32560        self
32561    }
32562    #[inline]
32563    pub fn framebuffer_integer_color_sample_counts(
32564        mut self,
32565        framebuffer_integer_color_sample_counts: SampleCountFlags,
32566    ) -> Self {
32567        self.framebuffer_integer_color_sample_counts = framebuffer_integer_color_sample_counts;
32568        self
32569    }
32570}
32571#[repr(C)]
32572#[cfg_attr(feature = "debug", derive(Debug))]
32573#[derive(Copy, Clone)]
32574#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan13Features.html>"]
32575#[must_use]
32576pub struct PhysicalDeviceVulkan13Features<'a> {
32577    pub s_type: StructureType,
32578    pub p_next: *mut c_void,
32579    pub robust_image_access: Bool32,
32580    pub inline_uniform_block: Bool32,
32581    pub descriptor_binding_inline_uniform_block_update_after_bind: Bool32,
32582    pub pipeline_creation_cache_control: Bool32,
32583    pub private_data: Bool32,
32584    pub shader_demote_to_helper_invocation: Bool32,
32585    pub shader_terminate_invocation: Bool32,
32586    pub subgroup_size_control: Bool32,
32587    pub compute_full_subgroups: Bool32,
32588    pub synchronization2: Bool32,
32589    pub texture_compression_astc_hdr: Bool32,
32590    pub shader_zero_initialize_workgroup_memory: Bool32,
32591    pub dynamic_rendering: Bool32,
32592    pub shader_integer_dot_product: Bool32,
32593    pub maintenance4: Bool32,
32594    pub _marker: PhantomData<&'a ()>,
32595}
32596unsafe impl Send for PhysicalDeviceVulkan13Features<'_> {}
32597unsafe impl Sync for PhysicalDeviceVulkan13Features<'_> {}
32598impl ::core::default::Default for PhysicalDeviceVulkan13Features<'_> {
32599    #[inline]
32600    fn default() -> Self {
32601        Self {
32602            s_type: Self::STRUCTURE_TYPE,
32603            p_next: ::core::ptr::null_mut(),
32604            robust_image_access: Bool32::default(),
32605            inline_uniform_block: Bool32::default(),
32606            descriptor_binding_inline_uniform_block_update_after_bind: Bool32::default(),
32607            pipeline_creation_cache_control: Bool32::default(),
32608            private_data: Bool32::default(),
32609            shader_demote_to_helper_invocation: Bool32::default(),
32610            shader_terminate_invocation: Bool32::default(),
32611            subgroup_size_control: Bool32::default(),
32612            compute_full_subgroups: Bool32::default(),
32613            synchronization2: Bool32::default(),
32614            texture_compression_astc_hdr: Bool32::default(),
32615            shader_zero_initialize_workgroup_memory: Bool32::default(),
32616            dynamic_rendering: Bool32::default(),
32617            shader_integer_dot_product: Bool32::default(),
32618            maintenance4: Bool32::default(),
32619            _marker: PhantomData,
32620        }
32621    }
32622}
32623unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan13Features<'a> {
32624    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
32625}
32626unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVulkan13Features<'_> {}
32627unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVulkan13Features<'_> {}
32628impl<'a> PhysicalDeviceVulkan13Features<'a> {
32629    #[inline]
32630    pub fn robust_image_access(mut self, robust_image_access: bool) -> Self {
32631        self.robust_image_access = robust_image_access.into();
32632        self
32633    }
32634    #[inline]
32635    pub fn inline_uniform_block(mut self, inline_uniform_block: bool) -> Self {
32636        self.inline_uniform_block = inline_uniform_block.into();
32637        self
32638    }
32639    #[inline]
32640    pub fn descriptor_binding_inline_uniform_block_update_after_bind(
32641        mut self,
32642        descriptor_binding_inline_uniform_block_update_after_bind: bool,
32643    ) -> Self {
32644        self.descriptor_binding_inline_uniform_block_update_after_bind =
32645            descriptor_binding_inline_uniform_block_update_after_bind.into();
32646        self
32647    }
32648    #[inline]
32649    pub fn pipeline_creation_cache_control(
32650        mut self,
32651        pipeline_creation_cache_control: bool,
32652    ) -> Self {
32653        self.pipeline_creation_cache_control = pipeline_creation_cache_control.into();
32654        self
32655    }
32656    #[inline]
32657    pub fn private_data(mut self, private_data: bool) -> Self {
32658        self.private_data = private_data.into();
32659        self
32660    }
32661    #[inline]
32662    pub fn shader_demote_to_helper_invocation(
32663        mut self,
32664        shader_demote_to_helper_invocation: bool,
32665    ) -> Self {
32666        self.shader_demote_to_helper_invocation = shader_demote_to_helper_invocation.into();
32667        self
32668    }
32669    #[inline]
32670    pub fn shader_terminate_invocation(mut self, shader_terminate_invocation: bool) -> Self {
32671        self.shader_terminate_invocation = shader_terminate_invocation.into();
32672        self
32673    }
32674    #[inline]
32675    pub fn subgroup_size_control(mut self, subgroup_size_control: bool) -> Self {
32676        self.subgroup_size_control = subgroup_size_control.into();
32677        self
32678    }
32679    #[inline]
32680    pub fn compute_full_subgroups(mut self, compute_full_subgroups: bool) -> Self {
32681        self.compute_full_subgroups = compute_full_subgroups.into();
32682        self
32683    }
32684    #[inline]
32685    pub fn synchronization2(mut self, synchronization2: bool) -> Self {
32686        self.synchronization2 = synchronization2.into();
32687        self
32688    }
32689    #[inline]
32690    pub fn texture_compression_astc_hdr(mut self, texture_compression_astc_hdr: bool) -> Self {
32691        self.texture_compression_astc_hdr = texture_compression_astc_hdr.into();
32692        self
32693    }
32694    #[inline]
32695    pub fn shader_zero_initialize_workgroup_memory(
32696        mut self,
32697        shader_zero_initialize_workgroup_memory: bool,
32698    ) -> Self {
32699        self.shader_zero_initialize_workgroup_memory =
32700            shader_zero_initialize_workgroup_memory.into();
32701        self
32702    }
32703    #[inline]
32704    pub fn dynamic_rendering(mut self, dynamic_rendering: bool) -> Self {
32705        self.dynamic_rendering = dynamic_rendering.into();
32706        self
32707    }
32708    #[inline]
32709    pub fn shader_integer_dot_product(mut self, shader_integer_dot_product: bool) -> Self {
32710        self.shader_integer_dot_product = shader_integer_dot_product.into();
32711        self
32712    }
32713    #[inline]
32714    pub fn maintenance4(mut self, maintenance4: bool) -> Self {
32715        self.maintenance4 = maintenance4.into();
32716        self
32717    }
32718}
32719#[repr(C)]
32720#[cfg_attr(feature = "debug", derive(Debug))]
32721#[derive(Copy, Clone)]
32722#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVulkan13Properties.html>"]
32723#[must_use]
32724pub struct PhysicalDeviceVulkan13Properties<'a> {
32725    pub s_type: StructureType,
32726    pub p_next: *mut c_void,
32727    pub min_subgroup_size: u32,
32728    pub max_subgroup_size: u32,
32729    pub max_compute_workgroup_subgroups: u32,
32730    pub required_subgroup_size_stages: ShaderStageFlags,
32731    pub max_inline_uniform_block_size: u32,
32732    pub max_per_stage_descriptor_inline_uniform_blocks: u32,
32733    pub max_per_stage_descriptor_update_after_bind_inline_uniform_blocks: u32,
32734    pub max_descriptor_set_inline_uniform_blocks: u32,
32735    pub max_descriptor_set_update_after_bind_inline_uniform_blocks: u32,
32736    pub max_inline_uniform_total_size: u32,
32737    pub integer_dot_product8_bit_unsigned_accelerated: Bool32,
32738    pub integer_dot_product8_bit_signed_accelerated: Bool32,
32739    pub integer_dot_product8_bit_mixed_signedness_accelerated: Bool32,
32740    pub integer_dot_product4x8_bit_packed_unsigned_accelerated: Bool32,
32741    pub integer_dot_product4x8_bit_packed_signed_accelerated: Bool32,
32742    pub integer_dot_product4x8_bit_packed_mixed_signedness_accelerated: Bool32,
32743    pub integer_dot_product16_bit_unsigned_accelerated: Bool32,
32744    pub integer_dot_product16_bit_signed_accelerated: Bool32,
32745    pub integer_dot_product16_bit_mixed_signedness_accelerated: Bool32,
32746    pub integer_dot_product32_bit_unsigned_accelerated: Bool32,
32747    pub integer_dot_product32_bit_signed_accelerated: Bool32,
32748    pub integer_dot_product32_bit_mixed_signedness_accelerated: Bool32,
32749    pub integer_dot_product64_bit_unsigned_accelerated: Bool32,
32750    pub integer_dot_product64_bit_signed_accelerated: Bool32,
32751    pub integer_dot_product64_bit_mixed_signedness_accelerated: Bool32,
32752    pub integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated: Bool32,
32753    pub integer_dot_product_accumulating_saturating8_bit_signed_accelerated: Bool32,
32754    pub integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated: Bool32,
32755    pub integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated: Bool32,
32756    pub integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated: Bool32,
32757    pub integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated:
32758        Bool32,
32759    pub integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated: Bool32,
32760    pub integer_dot_product_accumulating_saturating16_bit_signed_accelerated: Bool32,
32761    pub integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated: Bool32,
32762    pub integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated: Bool32,
32763    pub integer_dot_product_accumulating_saturating32_bit_signed_accelerated: Bool32,
32764    pub integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated: Bool32,
32765    pub integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated: Bool32,
32766    pub integer_dot_product_accumulating_saturating64_bit_signed_accelerated: Bool32,
32767    pub integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated: Bool32,
32768    pub storage_texel_buffer_offset_alignment_bytes: DeviceSize,
32769    pub storage_texel_buffer_offset_single_texel_alignment: Bool32,
32770    pub uniform_texel_buffer_offset_alignment_bytes: DeviceSize,
32771    pub uniform_texel_buffer_offset_single_texel_alignment: Bool32,
32772    pub max_buffer_size: DeviceSize,
32773    pub _marker: PhantomData<&'a ()>,
32774}
32775unsafe impl Send for PhysicalDeviceVulkan13Properties<'_> {}
32776unsafe impl Sync for PhysicalDeviceVulkan13Properties<'_> {}
32777impl ::core::default::Default for PhysicalDeviceVulkan13Properties<'_> {
32778    #[inline]
32779    fn default() -> Self {
32780        Self { s_type : Self :: STRUCTURE_TYPE , p_next : :: core :: ptr :: null_mut () , min_subgroup_size : u32 :: default () , max_subgroup_size : u32 :: default () , max_compute_workgroup_subgroups : u32 :: default () , required_subgroup_size_stages : ShaderStageFlags :: default () , max_inline_uniform_block_size : u32 :: default () , max_per_stage_descriptor_inline_uniform_blocks : u32 :: default () , max_per_stage_descriptor_update_after_bind_inline_uniform_blocks : u32 :: default () , max_descriptor_set_inline_uniform_blocks : u32 :: default () , max_descriptor_set_update_after_bind_inline_uniform_blocks : u32 :: default () , max_inline_uniform_total_size : u32 :: default () , integer_dot_product8_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product8_bit_signed_accelerated : Bool32 :: default () , integer_dot_product8_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_unsigned_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_signed_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product16_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product16_bit_signed_accelerated : Bool32 :: default () , integer_dot_product16_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product32_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product32_bit_signed_accelerated : Bool32 :: default () , integer_dot_product32_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product64_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product64_bit_signed_accelerated : Bool32 :: default () , integer_dot_product64_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated : Bool32 :: default () , storage_texel_buffer_offset_alignment_bytes : DeviceSize :: default () , storage_texel_buffer_offset_single_texel_alignment : Bool32 :: default () , uniform_texel_buffer_offset_alignment_bytes : DeviceSize :: default () , uniform_texel_buffer_offset_single_texel_alignment : Bool32 :: default () , max_buffer_size : DeviceSize :: default () , _marker : PhantomData , }
32781    }
32782}
32783unsafe impl<'a> TaggedStructure for PhysicalDeviceVulkan13Properties<'a> {
32784    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES;
32785}
32786unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceVulkan13Properties<'_> {}
32787impl<'a> PhysicalDeviceVulkan13Properties<'a> {
32788    #[inline]
32789    pub fn min_subgroup_size(mut self, min_subgroup_size: u32) -> Self {
32790        self.min_subgroup_size = min_subgroup_size;
32791        self
32792    }
32793    #[inline]
32794    pub fn max_subgroup_size(mut self, max_subgroup_size: u32) -> Self {
32795        self.max_subgroup_size = max_subgroup_size;
32796        self
32797    }
32798    #[inline]
32799    pub fn max_compute_workgroup_subgroups(mut self, max_compute_workgroup_subgroups: u32) -> Self {
32800        self.max_compute_workgroup_subgroups = max_compute_workgroup_subgroups;
32801        self
32802    }
32803    #[inline]
32804    pub fn required_subgroup_size_stages(
32805        mut self,
32806        required_subgroup_size_stages: ShaderStageFlags,
32807    ) -> Self {
32808        self.required_subgroup_size_stages = required_subgroup_size_stages;
32809        self
32810    }
32811    #[inline]
32812    pub fn max_inline_uniform_block_size(mut self, max_inline_uniform_block_size: u32) -> Self {
32813        self.max_inline_uniform_block_size = max_inline_uniform_block_size;
32814        self
32815    }
32816    #[inline]
32817    pub fn max_per_stage_descriptor_inline_uniform_blocks(
32818        mut self,
32819        max_per_stage_descriptor_inline_uniform_blocks: u32,
32820    ) -> Self {
32821        self.max_per_stage_descriptor_inline_uniform_blocks =
32822            max_per_stage_descriptor_inline_uniform_blocks;
32823        self
32824    }
32825    #[inline]
32826    pub fn max_per_stage_descriptor_update_after_bind_inline_uniform_blocks(
32827        mut self,
32828        max_per_stage_descriptor_update_after_bind_inline_uniform_blocks: u32,
32829    ) -> Self {
32830        self.max_per_stage_descriptor_update_after_bind_inline_uniform_blocks =
32831            max_per_stage_descriptor_update_after_bind_inline_uniform_blocks;
32832        self
32833    }
32834    #[inline]
32835    pub fn max_descriptor_set_inline_uniform_blocks(
32836        mut self,
32837        max_descriptor_set_inline_uniform_blocks: u32,
32838    ) -> Self {
32839        self.max_descriptor_set_inline_uniform_blocks = max_descriptor_set_inline_uniform_blocks;
32840        self
32841    }
32842    #[inline]
32843    pub fn max_descriptor_set_update_after_bind_inline_uniform_blocks(
32844        mut self,
32845        max_descriptor_set_update_after_bind_inline_uniform_blocks: u32,
32846    ) -> Self {
32847        self.max_descriptor_set_update_after_bind_inline_uniform_blocks =
32848            max_descriptor_set_update_after_bind_inline_uniform_blocks;
32849        self
32850    }
32851    #[inline]
32852    pub fn max_inline_uniform_total_size(mut self, max_inline_uniform_total_size: u32) -> Self {
32853        self.max_inline_uniform_total_size = max_inline_uniform_total_size;
32854        self
32855    }
32856    #[inline]
32857    pub fn integer_dot_product8_bit_unsigned_accelerated(
32858        mut self,
32859        integer_dot_product8_bit_unsigned_accelerated: bool,
32860    ) -> Self {
32861        self.integer_dot_product8_bit_unsigned_accelerated =
32862            integer_dot_product8_bit_unsigned_accelerated.into();
32863        self
32864    }
32865    #[inline]
32866    pub fn integer_dot_product8_bit_signed_accelerated(
32867        mut self,
32868        integer_dot_product8_bit_signed_accelerated: bool,
32869    ) -> Self {
32870        self.integer_dot_product8_bit_signed_accelerated =
32871            integer_dot_product8_bit_signed_accelerated.into();
32872        self
32873    }
32874    #[inline]
32875    pub fn integer_dot_product8_bit_mixed_signedness_accelerated(
32876        mut self,
32877        integer_dot_product8_bit_mixed_signedness_accelerated: bool,
32878    ) -> Self {
32879        self.integer_dot_product8_bit_mixed_signedness_accelerated =
32880            integer_dot_product8_bit_mixed_signedness_accelerated.into();
32881        self
32882    }
32883    #[inline]
32884    pub fn integer_dot_product4x8_bit_packed_unsigned_accelerated(
32885        mut self,
32886        integer_dot_product4x8_bit_packed_unsigned_accelerated: bool,
32887    ) -> Self {
32888        self.integer_dot_product4x8_bit_packed_unsigned_accelerated =
32889            integer_dot_product4x8_bit_packed_unsigned_accelerated.into();
32890        self
32891    }
32892    #[inline]
32893    pub fn integer_dot_product4x8_bit_packed_signed_accelerated(
32894        mut self,
32895        integer_dot_product4x8_bit_packed_signed_accelerated: bool,
32896    ) -> Self {
32897        self.integer_dot_product4x8_bit_packed_signed_accelerated =
32898            integer_dot_product4x8_bit_packed_signed_accelerated.into();
32899        self
32900    }
32901    #[inline]
32902    pub fn integer_dot_product4x8_bit_packed_mixed_signedness_accelerated(
32903        mut self,
32904        integer_dot_product4x8_bit_packed_mixed_signedness_accelerated: bool,
32905    ) -> Self {
32906        self.integer_dot_product4x8_bit_packed_mixed_signedness_accelerated =
32907            integer_dot_product4x8_bit_packed_mixed_signedness_accelerated.into();
32908        self
32909    }
32910    #[inline]
32911    pub fn integer_dot_product16_bit_unsigned_accelerated(
32912        mut self,
32913        integer_dot_product16_bit_unsigned_accelerated: bool,
32914    ) -> Self {
32915        self.integer_dot_product16_bit_unsigned_accelerated =
32916            integer_dot_product16_bit_unsigned_accelerated.into();
32917        self
32918    }
32919    #[inline]
32920    pub fn integer_dot_product16_bit_signed_accelerated(
32921        mut self,
32922        integer_dot_product16_bit_signed_accelerated: bool,
32923    ) -> Self {
32924        self.integer_dot_product16_bit_signed_accelerated =
32925            integer_dot_product16_bit_signed_accelerated.into();
32926        self
32927    }
32928    #[inline]
32929    pub fn integer_dot_product16_bit_mixed_signedness_accelerated(
32930        mut self,
32931        integer_dot_product16_bit_mixed_signedness_accelerated: bool,
32932    ) -> Self {
32933        self.integer_dot_product16_bit_mixed_signedness_accelerated =
32934            integer_dot_product16_bit_mixed_signedness_accelerated.into();
32935        self
32936    }
32937    #[inline]
32938    pub fn integer_dot_product32_bit_unsigned_accelerated(
32939        mut self,
32940        integer_dot_product32_bit_unsigned_accelerated: bool,
32941    ) -> Self {
32942        self.integer_dot_product32_bit_unsigned_accelerated =
32943            integer_dot_product32_bit_unsigned_accelerated.into();
32944        self
32945    }
32946    #[inline]
32947    pub fn integer_dot_product32_bit_signed_accelerated(
32948        mut self,
32949        integer_dot_product32_bit_signed_accelerated: bool,
32950    ) -> Self {
32951        self.integer_dot_product32_bit_signed_accelerated =
32952            integer_dot_product32_bit_signed_accelerated.into();
32953        self
32954    }
32955    #[inline]
32956    pub fn integer_dot_product32_bit_mixed_signedness_accelerated(
32957        mut self,
32958        integer_dot_product32_bit_mixed_signedness_accelerated: bool,
32959    ) -> Self {
32960        self.integer_dot_product32_bit_mixed_signedness_accelerated =
32961            integer_dot_product32_bit_mixed_signedness_accelerated.into();
32962        self
32963    }
32964    #[inline]
32965    pub fn integer_dot_product64_bit_unsigned_accelerated(
32966        mut self,
32967        integer_dot_product64_bit_unsigned_accelerated: bool,
32968    ) -> Self {
32969        self.integer_dot_product64_bit_unsigned_accelerated =
32970            integer_dot_product64_bit_unsigned_accelerated.into();
32971        self
32972    }
32973    #[inline]
32974    pub fn integer_dot_product64_bit_signed_accelerated(
32975        mut self,
32976        integer_dot_product64_bit_signed_accelerated: bool,
32977    ) -> Self {
32978        self.integer_dot_product64_bit_signed_accelerated =
32979            integer_dot_product64_bit_signed_accelerated.into();
32980        self
32981    }
32982    #[inline]
32983    pub fn integer_dot_product64_bit_mixed_signedness_accelerated(
32984        mut self,
32985        integer_dot_product64_bit_mixed_signedness_accelerated: bool,
32986    ) -> Self {
32987        self.integer_dot_product64_bit_mixed_signedness_accelerated =
32988            integer_dot_product64_bit_mixed_signedness_accelerated.into();
32989        self
32990    }
32991    #[inline]
32992    pub fn integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated(
32993        mut self,
32994        integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated: bool,
32995    ) -> Self {
32996        self.integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated =
32997            integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated.into();
32998        self
32999    }
33000    #[inline]
33001    pub fn integer_dot_product_accumulating_saturating8_bit_signed_accelerated(
33002        mut self,
33003        integer_dot_product_accumulating_saturating8_bit_signed_accelerated: bool,
33004    ) -> Self {
33005        self.integer_dot_product_accumulating_saturating8_bit_signed_accelerated =
33006            integer_dot_product_accumulating_saturating8_bit_signed_accelerated.into();
33007        self
33008    }
33009    #[inline]
33010    pub fn integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated(
33011        mut self,
33012        integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated: bool,
33013    ) -> Self {
33014        self.integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated =
33015            integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated.into();
33016        self
33017    }
33018    #[inline]
33019    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated(
33020        mut self,
33021        integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated: bool,
33022    ) -> Self {
33023        self.integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated =
33024            integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated.into();
33025        self
33026    }
33027    #[inline]
33028    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated(
33029        mut self,
33030        integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated: bool,
33031    ) -> Self {
33032        self.integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated =
33033            integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated.into();
33034        self
33035    }
33036    #[inline]
33037    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated(
33038        mut self,
33039        integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated : bool,
33040    ) -> Self {
33041        self . integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated = integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated . into () ;
33042        self
33043    }
33044    #[inline]
33045    pub fn integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated(
33046        mut self,
33047        integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated: bool,
33048    ) -> Self {
33049        self.integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated =
33050            integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated.into();
33051        self
33052    }
33053    #[inline]
33054    pub fn integer_dot_product_accumulating_saturating16_bit_signed_accelerated(
33055        mut self,
33056        integer_dot_product_accumulating_saturating16_bit_signed_accelerated: bool,
33057    ) -> Self {
33058        self.integer_dot_product_accumulating_saturating16_bit_signed_accelerated =
33059            integer_dot_product_accumulating_saturating16_bit_signed_accelerated.into();
33060        self
33061    }
33062    #[inline]
33063    pub fn integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated(
33064        mut self,
33065        integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated: bool,
33066    ) -> Self {
33067        self.integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated =
33068            integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated.into();
33069        self
33070    }
33071    #[inline]
33072    pub fn integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated(
33073        mut self,
33074        integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated: bool,
33075    ) -> Self {
33076        self.integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated =
33077            integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated.into();
33078        self
33079    }
33080    #[inline]
33081    pub fn integer_dot_product_accumulating_saturating32_bit_signed_accelerated(
33082        mut self,
33083        integer_dot_product_accumulating_saturating32_bit_signed_accelerated: bool,
33084    ) -> Self {
33085        self.integer_dot_product_accumulating_saturating32_bit_signed_accelerated =
33086            integer_dot_product_accumulating_saturating32_bit_signed_accelerated.into();
33087        self
33088    }
33089    #[inline]
33090    pub fn integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated(
33091        mut self,
33092        integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated: bool,
33093    ) -> Self {
33094        self.integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated =
33095            integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated.into();
33096        self
33097    }
33098    #[inline]
33099    pub fn integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated(
33100        mut self,
33101        integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated: bool,
33102    ) -> Self {
33103        self.integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated =
33104            integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated.into();
33105        self
33106    }
33107    #[inline]
33108    pub fn integer_dot_product_accumulating_saturating64_bit_signed_accelerated(
33109        mut self,
33110        integer_dot_product_accumulating_saturating64_bit_signed_accelerated: bool,
33111    ) -> Self {
33112        self.integer_dot_product_accumulating_saturating64_bit_signed_accelerated =
33113            integer_dot_product_accumulating_saturating64_bit_signed_accelerated.into();
33114        self
33115    }
33116    #[inline]
33117    pub fn integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated(
33118        mut self,
33119        integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated: bool,
33120    ) -> Self {
33121        self.integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated =
33122            integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated.into();
33123        self
33124    }
33125    #[inline]
33126    pub fn storage_texel_buffer_offset_alignment_bytes(
33127        mut self,
33128        storage_texel_buffer_offset_alignment_bytes: DeviceSize,
33129    ) -> Self {
33130        self.storage_texel_buffer_offset_alignment_bytes =
33131            storage_texel_buffer_offset_alignment_bytes;
33132        self
33133    }
33134    #[inline]
33135    pub fn storage_texel_buffer_offset_single_texel_alignment(
33136        mut self,
33137        storage_texel_buffer_offset_single_texel_alignment: bool,
33138    ) -> Self {
33139        self.storage_texel_buffer_offset_single_texel_alignment =
33140            storage_texel_buffer_offset_single_texel_alignment.into();
33141        self
33142    }
33143    #[inline]
33144    pub fn uniform_texel_buffer_offset_alignment_bytes(
33145        mut self,
33146        uniform_texel_buffer_offset_alignment_bytes: DeviceSize,
33147    ) -> Self {
33148        self.uniform_texel_buffer_offset_alignment_bytes =
33149            uniform_texel_buffer_offset_alignment_bytes;
33150        self
33151    }
33152    #[inline]
33153    pub fn uniform_texel_buffer_offset_single_texel_alignment(
33154        mut self,
33155        uniform_texel_buffer_offset_single_texel_alignment: bool,
33156    ) -> Self {
33157        self.uniform_texel_buffer_offset_single_texel_alignment =
33158            uniform_texel_buffer_offset_single_texel_alignment.into();
33159        self
33160    }
33161    #[inline]
33162    pub fn max_buffer_size(mut self, max_buffer_size: DeviceSize) -> Self {
33163        self.max_buffer_size = max_buffer_size;
33164        self
33165    }
33166}
33167#[repr(C)]
33168#[cfg_attr(feature = "debug", derive(Debug))]
33169#[derive(Copy, Clone)]
33170#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineCompilerControlCreateInfoAMD.html>"]
33171#[must_use]
33172pub struct PipelineCompilerControlCreateInfoAMD<'a> {
33173    pub s_type: StructureType,
33174    pub p_next: *const c_void,
33175    pub compiler_control_flags: PipelineCompilerControlFlagsAMD,
33176    pub _marker: PhantomData<&'a ()>,
33177}
33178unsafe impl Send for PipelineCompilerControlCreateInfoAMD<'_> {}
33179unsafe impl Sync for PipelineCompilerControlCreateInfoAMD<'_> {}
33180impl ::core::default::Default for PipelineCompilerControlCreateInfoAMD<'_> {
33181    #[inline]
33182    fn default() -> Self {
33183        Self {
33184            s_type: Self::STRUCTURE_TYPE,
33185            p_next: ::core::ptr::null(),
33186            compiler_control_flags: PipelineCompilerControlFlagsAMD::default(),
33187            _marker: PhantomData,
33188        }
33189    }
33190}
33191unsafe impl<'a> TaggedStructure for PipelineCompilerControlCreateInfoAMD<'a> {
33192    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD;
33193}
33194unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineCompilerControlCreateInfoAMD<'_> {}
33195unsafe impl ExtendsComputePipelineCreateInfo for PipelineCompilerControlCreateInfoAMD<'_> {}
33196unsafe impl ExtendsExecutionGraphPipelineCreateInfoAMDX
33197    for PipelineCompilerControlCreateInfoAMD<'_>
33198{
33199}
33200impl<'a> PipelineCompilerControlCreateInfoAMD<'a> {
33201    #[inline]
33202    pub fn compiler_control_flags(
33203        mut self,
33204        compiler_control_flags: PipelineCompilerControlFlagsAMD,
33205    ) -> Self {
33206        self.compiler_control_flags = compiler_control_flags;
33207        self
33208    }
33209}
33210#[repr(C)]
33211#[cfg_attr(feature = "debug", derive(Debug))]
33212#[derive(Copy, Clone)]
33213#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCoherentMemoryFeaturesAMD.html>"]
33214#[must_use]
33215pub struct PhysicalDeviceCoherentMemoryFeaturesAMD<'a> {
33216    pub s_type: StructureType,
33217    pub p_next: *mut c_void,
33218    pub device_coherent_memory: Bool32,
33219    pub _marker: PhantomData<&'a ()>,
33220}
33221unsafe impl Send for PhysicalDeviceCoherentMemoryFeaturesAMD<'_> {}
33222unsafe impl Sync for PhysicalDeviceCoherentMemoryFeaturesAMD<'_> {}
33223impl ::core::default::Default for PhysicalDeviceCoherentMemoryFeaturesAMD<'_> {
33224    #[inline]
33225    fn default() -> Self {
33226        Self {
33227            s_type: Self::STRUCTURE_TYPE,
33228            p_next: ::core::ptr::null_mut(),
33229            device_coherent_memory: Bool32::default(),
33230            _marker: PhantomData,
33231        }
33232    }
33233}
33234unsafe impl<'a> TaggedStructure for PhysicalDeviceCoherentMemoryFeaturesAMD<'a> {
33235    const STRUCTURE_TYPE: StructureType =
33236        StructureType::PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD;
33237}
33238unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCoherentMemoryFeaturesAMD<'_> {}
33239unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCoherentMemoryFeaturesAMD<'_> {}
33240impl<'a> PhysicalDeviceCoherentMemoryFeaturesAMD<'a> {
33241    #[inline]
33242    pub fn device_coherent_memory(mut self, device_coherent_memory: bool) -> Self {
33243        self.device_coherent_memory = device_coherent_memory.into();
33244        self
33245    }
33246}
33247#[repr(C)]
33248#[derive(Copy, Clone)]
33249#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceToolProperties.html>"]
33250#[must_use]
33251pub struct PhysicalDeviceToolProperties<'a> {
33252    pub s_type: StructureType,
33253    pub p_next: *mut c_void,
33254    pub name: [c_char; MAX_EXTENSION_NAME_SIZE],
33255    pub version: [c_char; MAX_EXTENSION_NAME_SIZE],
33256    pub purposes: ToolPurposeFlags,
33257    pub description: [c_char; MAX_DESCRIPTION_SIZE],
33258    pub layer: [c_char; MAX_EXTENSION_NAME_SIZE],
33259    pub _marker: PhantomData<&'a ()>,
33260}
33261unsafe impl Send for PhysicalDeviceToolProperties<'_> {}
33262unsafe impl Sync for PhysicalDeviceToolProperties<'_> {}
33263#[cfg(feature = "debug")]
33264impl fmt::Debug for PhysicalDeviceToolProperties<'_> {
33265    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33266        fmt.debug_struct("PhysicalDeviceToolProperties")
33267            .field("s_type", &self.s_type)
33268            .field("p_next", &self.p_next)
33269            .field("name", &self.name_as_c_str())
33270            .field("version", &self.version_as_c_str())
33271            .field("purposes", &self.purposes)
33272            .field("description", &self.description_as_c_str())
33273            .field("layer", &self.layer_as_c_str())
33274            .finish()
33275    }
33276}
33277impl ::core::default::Default for PhysicalDeviceToolProperties<'_> {
33278    #[inline]
33279    fn default() -> Self {
33280        Self {
33281            s_type: Self::STRUCTURE_TYPE,
33282            p_next: ::core::ptr::null_mut(),
33283            name: unsafe { ::core::mem::zeroed() },
33284            version: unsafe { ::core::mem::zeroed() },
33285            purposes: ToolPurposeFlags::default(),
33286            description: unsafe { ::core::mem::zeroed() },
33287            layer: unsafe { ::core::mem::zeroed() },
33288            _marker: PhantomData,
33289        }
33290    }
33291}
33292unsafe impl<'a> TaggedStructure for PhysicalDeviceToolProperties<'a> {
33293    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_TOOL_PROPERTIES;
33294}
33295impl<'a> PhysicalDeviceToolProperties<'a> {
33296    #[inline]
33297    pub fn name(mut self, name: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
33298        write_c_str_slice_with_nul(&mut self.name, name).map(|()| self)
33299    }
33300    #[inline]
33301    pub fn name_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
33302        wrap_c_str_slice_until_nul(&self.name)
33303    }
33304    #[inline]
33305    pub fn version(
33306        mut self,
33307        version: &CStr,
33308    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
33309        write_c_str_slice_with_nul(&mut self.version, version).map(|()| self)
33310    }
33311    #[inline]
33312    pub fn version_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
33313        wrap_c_str_slice_until_nul(&self.version)
33314    }
33315    #[inline]
33316    pub fn purposes(mut self, purposes: ToolPurposeFlags) -> Self {
33317        self.purposes = purposes;
33318        self
33319    }
33320    #[inline]
33321    pub fn description(
33322        mut self,
33323        description: &CStr,
33324    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
33325        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
33326    }
33327    #[inline]
33328    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
33329        wrap_c_str_slice_until_nul(&self.description)
33330    }
33331    #[inline]
33332    pub fn layer(mut self, layer: &CStr) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
33333        write_c_str_slice_with_nul(&mut self.layer, layer).map(|()| self)
33334    }
33335    #[inline]
33336    pub fn layer_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
33337        wrap_c_str_slice_until_nul(&self.layer)
33338    }
33339}
33340#[repr(C)]
33341#[derive(Copy, Clone)]
33342#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerCustomBorderColorCreateInfoEXT.html>"]
33343#[must_use]
33344pub struct SamplerCustomBorderColorCreateInfoEXT<'a> {
33345    pub s_type: StructureType,
33346    pub p_next: *const c_void,
33347    pub custom_border_color: ClearColorValue,
33348    pub format: Format,
33349    pub _marker: PhantomData<&'a ()>,
33350}
33351unsafe impl Send for SamplerCustomBorderColorCreateInfoEXT<'_> {}
33352unsafe impl Sync for SamplerCustomBorderColorCreateInfoEXT<'_> {}
33353#[cfg(feature = "debug")]
33354impl fmt::Debug for SamplerCustomBorderColorCreateInfoEXT<'_> {
33355    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33356        fmt.debug_struct("SamplerCustomBorderColorCreateInfoEXT")
33357            .field("s_type", &self.s_type)
33358            .field("p_next", &self.p_next)
33359            .field("custom_border_color", &"union")
33360            .field("format", &self.format)
33361            .finish()
33362    }
33363}
33364impl ::core::default::Default for SamplerCustomBorderColorCreateInfoEXT<'_> {
33365    #[inline]
33366    fn default() -> Self {
33367        Self {
33368            s_type: Self::STRUCTURE_TYPE,
33369            p_next: ::core::ptr::null(),
33370            custom_border_color: ClearColorValue::default(),
33371            format: Format::default(),
33372            _marker: PhantomData,
33373        }
33374    }
33375}
33376unsafe impl<'a> TaggedStructure for SamplerCustomBorderColorCreateInfoEXT<'a> {
33377    const STRUCTURE_TYPE: StructureType =
33378        StructureType::SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT;
33379}
33380unsafe impl ExtendsSamplerCreateInfo for SamplerCustomBorderColorCreateInfoEXT<'_> {}
33381impl<'a> SamplerCustomBorderColorCreateInfoEXT<'a> {
33382    #[inline]
33383    pub fn custom_border_color(mut self, custom_border_color: ClearColorValue) -> Self {
33384        self.custom_border_color = custom_border_color;
33385        self
33386    }
33387    #[inline]
33388    pub fn format(mut self, format: Format) -> Self {
33389        self.format = format;
33390        self
33391    }
33392}
33393#[repr(C)]
33394#[cfg_attr(feature = "debug", derive(Debug))]
33395#[derive(Copy, Clone)]
33396#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCustomBorderColorPropertiesEXT.html>"]
33397#[must_use]
33398pub struct PhysicalDeviceCustomBorderColorPropertiesEXT<'a> {
33399    pub s_type: StructureType,
33400    pub p_next: *mut c_void,
33401    pub max_custom_border_color_samplers: u32,
33402    pub _marker: PhantomData<&'a ()>,
33403}
33404unsafe impl Send for PhysicalDeviceCustomBorderColorPropertiesEXT<'_> {}
33405unsafe impl Sync for PhysicalDeviceCustomBorderColorPropertiesEXT<'_> {}
33406impl ::core::default::Default for PhysicalDeviceCustomBorderColorPropertiesEXT<'_> {
33407    #[inline]
33408    fn default() -> Self {
33409        Self {
33410            s_type: Self::STRUCTURE_TYPE,
33411            p_next: ::core::ptr::null_mut(),
33412            max_custom_border_color_samplers: u32::default(),
33413            _marker: PhantomData,
33414        }
33415    }
33416}
33417unsafe impl<'a> TaggedStructure for PhysicalDeviceCustomBorderColorPropertiesEXT<'a> {
33418    const STRUCTURE_TYPE: StructureType =
33419        StructureType::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT;
33420}
33421unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceCustomBorderColorPropertiesEXT<'_> {}
33422impl<'a> PhysicalDeviceCustomBorderColorPropertiesEXT<'a> {
33423    #[inline]
33424    pub fn max_custom_border_color_samplers(
33425        mut self,
33426        max_custom_border_color_samplers: u32,
33427    ) -> Self {
33428        self.max_custom_border_color_samplers = max_custom_border_color_samplers;
33429        self
33430    }
33431}
33432#[repr(C)]
33433#[cfg_attr(feature = "debug", derive(Debug))]
33434#[derive(Copy, Clone)]
33435#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCustomBorderColorFeaturesEXT.html>"]
33436#[must_use]
33437pub struct PhysicalDeviceCustomBorderColorFeaturesEXT<'a> {
33438    pub s_type: StructureType,
33439    pub p_next: *mut c_void,
33440    pub custom_border_colors: Bool32,
33441    pub custom_border_color_without_format: Bool32,
33442    pub _marker: PhantomData<&'a ()>,
33443}
33444unsafe impl Send for PhysicalDeviceCustomBorderColorFeaturesEXT<'_> {}
33445unsafe impl Sync for PhysicalDeviceCustomBorderColorFeaturesEXT<'_> {}
33446impl ::core::default::Default for PhysicalDeviceCustomBorderColorFeaturesEXT<'_> {
33447    #[inline]
33448    fn default() -> Self {
33449        Self {
33450            s_type: Self::STRUCTURE_TYPE,
33451            p_next: ::core::ptr::null_mut(),
33452            custom_border_colors: Bool32::default(),
33453            custom_border_color_without_format: Bool32::default(),
33454            _marker: PhantomData,
33455        }
33456    }
33457}
33458unsafe impl<'a> TaggedStructure for PhysicalDeviceCustomBorderColorFeaturesEXT<'a> {
33459    const STRUCTURE_TYPE: StructureType =
33460        StructureType::PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT;
33461}
33462unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCustomBorderColorFeaturesEXT<'_> {}
33463unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCustomBorderColorFeaturesEXT<'_> {}
33464impl<'a> PhysicalDeviceCustomBorderColorFeaturesEXT<'a> {
33465    #[inline]
33466    pub fn custom_border_colors(mut self, custom_border_colors: bool) -> Self {
33467        self.custom_border_colors = custom_border_colors.into();
33468        self
33469    }
33470    #[inline]
33471    pub fn custom_border_color_without_format(
33472        mut self,
33473        custom_border_color_without_format: bool,
33474    ) -> Self {
33475        self.custom_border_color_without_format = custom_border_color_without_format.into();
33476        self
33477    }
33478}
33479#[repr(C)]
33480#[cfg_attr(feature = "debug", derive(Debug))]
33481#[derive(Copy, Clone)]
33482#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerBorderColorComponentMappingCreateInfoEXT.html>"]
33483#[must_use]
33484pub struct SamplerBorderColorComponentMappingCreateInfoEXT<'a> {
33485    pub s_type: StructureType,
33486    pub p_next: *const c_void,
33487    pub components: ComponentMapping,
33488    pub srgb: Bool32,
33489    pub _marker: PhantomData<&'a ()>,
33490}
33491unsafe impl Send for SamplerBorderColorComponentMappingCreateInfoEXT<'_> {}
33492unsafe impl Sync for SamplerBorderColorComponentMappingCreateInfoEXT<'_> {}
33493impl ::core::default::Default for SamplerBorderColorComponentMappingCreateInfoEXT<'_> {
33494    #[inline]
33495    fn default() -> Self {
33496        Self {
33497            s_type: Self::STRUCTURE_TYPE,
33498            p_next: ::core::ptr::null(),
33499            components: ComponentMapping::default(),
33500            srgb: Bool32::default(),
33501            _marker: PhantomData,
33502        }
33503    }
33504}
33505unsafe impl<'a> TaggedStructure for SamplerBorderColorComponentMappingCreateInfoEXT<'a> {
33506    const STRUCTURE_TYPE: StructureType =
33507        StructureType::SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT;
33508}
33509unsafe impl ExtendsSamplerCreateInfo for SamplerBorderColorComponentMappingCreateInfoEXT<'_> {}
33510impl<'a> SamplerBorderColorComponentMappingCreateInfoEXT<'a> {
33511    #[inline]
33512    pub fn components(mut self, components: ComponentMapping) -> Self {
33513        self.components = components;
33514        self
33515    }
33516    #[inline]
33517    pub fn srgb(mut self, srgb: bool) -> Self {
33518        self.srgb = srgb.into();
33519        self
33520    }
33521}
33522#[repr(C)]
33523#[cfg_attr(feature = "debug", derive(Debug))]
33524#[derive(Copy, Clone)]
33525#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceBorderColorSwizzleFeaturesEXT.html>"]
33526#[must_use]
33527pub struct PhysicalDeviceBorderColorSwizzleFeaturesEXT<'a> {
33528    pub s_type: StructureType,
33529    pub p_next: *mut c_void,
33530    pub border_color_swizzle: Bool32,
33531    pub border_color_swizzle_from_image: Bool32,
33532    pub _marker: PhantomData<&'a ()>,
33533}
33534unsafe impl Send for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'_> {}
33535unsafe impl Sync for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'_> {}
33536impl ::core::default::Default for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'_> {
33537    #[inline]
33538    fn default() -> Self {
33539        Self {
33540            s_type: Self::STRUCTURE_TYPE,
33541            p_next: ::core::ptr::null_mut(),
33542            border_color_swizzle: Bool32::default(),
33543            border_color_swizzle_from_image: Bool32::default(),
33544            _marker: PhantomData,
33545        }
33546    }
33547}
33548unsafe impl<'a> TaggedStructure for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'a> {
33549    const STRUCTURE_TYPE: StructureType =
33550        StructureType::PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT;
33551}
33552unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'_> {}
33553unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceBorderColorSwizzleFeaturesEXT<'_> {}
33554impl<'a> PhysicalDeviceBorderColorSwizzleFeaturesEXT<'a> {
33555    #[inline]
33556    pub fn border_color_swizzle(mut self, border_color_swizzle: bool) -> Self {
33557        self.border_color_swizzle = border_color_swizzle.into();
33558        self
33559    }
33560    #[inline]
33561    pub fn border_color_swizzle_from_image(
33562        mut self,
33563        border_color_swizzle_from_image: bool,
33564    ) -> Self {
33565        self.border_color_swizzle_from_image = border_color_swizzle_from_image.into();
33566        self
33567    }
33568}
33569#[repr(C)]
33570#[derive(Copy, Clone)]
33571#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceOrHostAddressKHR.html>"]
33572pub union DeviceOrHostAddressKHR {
33573    pub device_address: DeviceAddress,
33574    pub host_address: *mut c_void,
33575}
33576impl ::core::default::Default for DeviceOrHostAddressKHR {
33577    #[inline]
33578    fn default() -> Self {
33579        unsafe { ::core::mem::zeroed() }
33580    }
33581}
33582#[repr(C)]
33583#[derive(Copy, Clone)]
33584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceOrHostAddressConstKHR.html>"]
33585pub union DeviceOrHostAddressConstKHR {
33586    pub device_address: DeviceAddress,
33587    pub host_address: *const c_void,
33588}
33589impl ::core::default::Default for DeviceOrHostAddressConstKHR {
33590    #[inline]
33591    fn default() -> Self {
33592        unsafe { ::core::mem::zeroed() }
33593    }
33594}
33595#[repr(C)]
33596#[derive(Copy, Clone)]
33597#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceOrHostAddressConstAMDX.html>"]
33598pub union DeviceOrHostAddressConstAMDX {
33599    pub device_address: DeviceAddress,
33600    pub host_address: *const c_void,
33601}
33602impl ::core::default::Default for DeviceOrHostAddressConstAMDX {
33603    #[inline]
33604    fn default() -> Self {
33605        unsafe { ::core::mem::zeroed() }
33606    }
33607}
33608#[repr(C)]
33609#[derive(Copy, Clone)]
33610#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryTrianglesDataKHR.html>"]
33611#[must_use]
33612pub struct AccelerationStructureGeometryTrianglesDataKHR<'a> {
33613    pub s_type: StructureType,
33614    pub p_next: *const c_void,
33615    pub vertex_format: Format,
33616    pub vertex_data: DeviceOrHostAddressConstKHR,
33617    pub vertex_stride: DeviceSize,
33618    pub max_vertex: u32,
33619    pub index_type: IndexType,
33620    pub index_data: DeviceOrHostAddressConstKHR,
33621    pub transform_data: DeviceOrHostAddressConstKHR,
33622    pub _marker: PhantomData<&'a ()>,
33623}
33624unsafe impl Send for AccelerationStructureGeometryTrianglesDataKHR<'_> {}
33625unsafe impl Sync for AccelerationStructureGeometryTrianglesDataKHR<'_> {}
33626#[cfg(feature = "debug")]
33627impl fmt::Debug for AccelerationStructureGeometryTrianglesDataKHR<'_> {
33628    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33629        fmt.debug_struct("AccelerationStructureGeometryTrianglesDataKHR")
33630            .field("s_type", &self.s_type)
33631            .field("p_next", &self.p_next)
33632            .field("vertex_format", &self.vertex_format)
33633            .field("vertex_data", &"union")
33634            .field("vertex_stride", &self.vertex_stride)
33635            .field("max_vertex", &self.max_vertex)
33636            .field("index_type", &self.index_type)
33637            .field("index_data", &"union")
33638            .field("transform_data", &"union")
33639            .finish()
33640    }
33641}
33642impl ::core::default::Default for AccelerationStructureGeometryTrianglesDataKHR<'_> {
33643    #[inline]
33644    fn default() -> Self {
33645        Self {
33646            s_type: Self::STRUCTURE_TYPE,
33647            p_next: ::core::ptr::null(),
33648            vertex_format: Format::default(),
33649            vertex_data: DeviceOrHostAddressConstKHR::default(),
33650            vertex_stride: DeviceSize::default(),
33651            max_vertex: u32::default(),
33652            index_type: IndexType::default(),
33653            index_data: DeviceOrHostAddressConstKHR::default(),
33654            transform_data: DeviceOrHostAddressConstKHR::default(),
33655            _marker: PhantomData,
33656        }
33657    }
33658}
33659unsafe impl<'a> TaggedStructure for AccelerationStructureGeometryTrianglesDataKHR<'a> {
33660    const STRUCTURE_TYPE: StructureType =
33661        StructureType::ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
33662}
33663pub unsafe trait ExtendsAccelerationStructureGeometryTrianglesDataKHR {}
33664impl<'a> AccelerationStructureGeometryTrianglesDataKHR<'a> {
33665    #[inline]
33666    pub fn vertex_format(mut self, vertex_format: Format) -> Self {
33667        self.vertex_format = vertex_format;
33668        self
33669    }
33670    #[inline]
33671    pub fn vertex_data(mut self, vertex_data: DeviceOrHostAddressConstKHR) -> Self {
33672        self.vertex_data = vertex_data;
33673        self
33674    }
33675    #[inline]
33676    pub fn vertex_stride(mut self, vertex_stride: DeviceSize) -> Self {
33677        self.vertex_stride = vertex_stride;
33678        self
33679    }
33680    #[inline]
33681    pub fn max_vertex(mut self, max_vertex: u32) -> Self {
33682        self.max_vertex = max_vertex;
33683        self
33684    }
33685    #[inline]
33686    pub fn index_type(mut self, index_type: IndexType) -> Self {
33687        self.index_type = index_type;
33688        self
33689    }
33690    #[inline]
33691    pub fn index_data(mut self, index_data: DeviceOrHostAddressConstKHR) -> Self {
33692        self.index_data = index_data;
33693        self
33694    }
33695    #[inline]
33696    pub fn transform_data(mut self, transform_data: DeviceOrHostAddressConstKHR) -> Self {
33697        self.transform_data = transform_data;
33698        self
33699    }
33700    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
33701    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
33702    #[doc = r" valid extension structs can be pushed into the chain."]
33703    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
33704    #[doc = r" chain will look like `A -> D -> B -> C`."]
33705    pub fn push_next<T: ExtendsAccelerationStructureGeometryTrianglesDataKHR + ?Sized>(
33706        mut self,
33707        next: &'a mut T,
33708    ) -> Self {
33709        unsafe {
33710            let next_ptr = <*const T>::cast(next);
33711            let last_next = ptr_chain_iter(next).last().unwrap();
33712            (*last_next).p_next = self.p_next as _;
33713            self.p_next = next_ptr;
33714        }
33715        self
33716    }
33717}
33718#[repr(C)]
33719#[derive(Copy, Clone)]
33720#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryAabbsDataKHR.html>"]
33721#[must_use]
33722pub struct AccelerationStructureGeometryAabbsDataKHR<'a> {
33723    pub s_type: StructureType,
33724    pub p_next: *const c_void,
33725    pub data: DeviceOrHostAddressConstKHR,
33726    pub stride: DeviceSize,
33727    pub _marker: PhantomData<&'a ()>,
33728}
33729unsafe impl Send for AccelerationStructureGeometryAabbsDataKHR<'_> {}
33730unsafe impl Sync for AccelerationStructureGeometryAabbsDataKHR<'_> {}
33731#[cfg(feature = "debug")]
33732impl fmt::Debug for AccelerationStructureGeometryAabbsDataKHR<'_> {
33733    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33734        fmt.debug_struct("AccelerationStructureGeometryAabbsDataKHR")
33735            .field("s_type", &self.s_type)
33736            .field("p_next", &self.p_next)
33737            .field("data", &"union")
33738            .field("stride", &self.stride)
33739            .finish()
33740    }
33741}
33742impl ::core::default::Default for AccelerationStructureGeometryAabbsDataKHR<'_> {
33743    #[inline]
33744    fn default() -> Self {
33745        Self {
33746            s_type: Self::STRUCTURE_TYPE,
33747            p_next: ::core::ptr::null(),
33748            data: DeviceOrHostAddressConstKHR::default(),
33749            stride: DeviceSize::default(),
33750            _marker: PhantomData,
33751        }
33752    }
33753}
33754unsafe impl<'a> TaggedStructure for AccelerationStructureGeometryAabbsDataKHR<'a> {
33755    const STRUCTURE_TYPE: StructureType =
33756        StructureType::ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR;
33757}
33758impl<'a> AccelerationStructureGeometryAabbsDataKHR<'a> {
33759    #[inline]
33760    pub fn data(mut self, data: DeviceOrHostAddressConstKHR) -> Self {
33761        self.data = data;
33762        self
33763    }
33764    #[inline]
33765    pub fn stride(mut self, stride: DeviceSize) -> Self {
33766        self.stride = stride;
33767        self
33768    }
33769}
33770#[repr(C)]
33771#[derive(Copy, Clone)]
33772#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryInstancesDataKHR.html>"]
33773#[must_use]
33774pub struct AccelerationStructureGeometryInstancesDataKHR<'a> {
33775    pub s_type: StructureType,
33776    pub p_next: *const c_void,
33777    pub array_of_pointers: Bool32,
33778    pub data: DeviceOrHostAddressConstKHR,
33779    pub _marker: PhantomData<&'a ()>,
33780}
33781unsafe impl Send for AccelerationStructureGeometryInstancesDataKHR<'_> {}
33782unsafe impl Sync for AccelerationStructureGeometryInstancesDataKHR<'_> {}
33783#[cfg(feature = "debug")]
33784impl fmt::Debug for AccelerationStructureGeometryInstancesDataKHR<'_> {
33785    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33786        fmt.debug_struct("AccelerationStructureGeometryInstancesDataKHR")
33787            .field("s_type", &self.s_type)
33788            .field("p_next", &self.p_next)
33789            .field("array_of_pointers", &self.array_of_pointers)
33790            .field("data", &"union")
33791            .finish()
33792    }
33793}
33794impl ::core::default::Default for AccelerationStructureGeometryInstancesDataKHR<'_> {
33795    #[inline]
33796    fn default() -> Self {
33797        Self {
33798            s_type: Self::STRUCTURE_TYPE,
33799            p_next: ::core::ptr::null(),
33800            array_of_pointers: Bool32::default(),
33801            data: DeviceOrHostAddressConstKHR::default(),
33802            _marker: PhantomData,
33803        }
33804    }
33805}
33806unsafe impl<'a> TaggedStructure for AccelerationStructureGeometryInstancesDataKHR<'a> {
33807    const STRUCTURE_TYPE: StructureType =
33808        StructureType::ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR;
33809}
33810impl<'a> AccelerationStructureGeometryInstancesDataKHR<'a> {
33811    #[inline]
33812    pub fn array_of_pointers(mut self, array_of_pointers: bool) -> Self {
33813        self.array_of_pointers = array_of_pointers.into();
33814        self
33815    }
33816    #[inline]
33817    pub fn data(mut self, data: DeviceOrHostAddressConstKHR) -> Self {
33818        self.data = data;
33819        self
33820    }
33821}
33822#[repr(C)]
33823#[derive(Copy, Clone)]
33824#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryDataKHR.html>"]
33825pub union AccelerationStructureGeometryDataKHR<'a> {
33826    pub triangles: AccelerationStructureGeometryTrianglesDataKHR<'a>,
33827    pub aabbs: AccelerationStructureGeometryAabbsDataKHR<'a>,
33828    pub instances: AccelerationStructureGeometryInstancesDataKHR<'a>,
33829}
33830impl<'a> ::core::default::Default for AccelerationStructureGeometryDataKHR<'a> {
33831    #[inline]
33832    fn default() -> Self {
33833        unsafe { ::core::mem::zeroed() }
33834    }
33835}
33836#[repr(C)]
33837#[derive(Copy, Clone)]
33838#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryKHR.html>"]
33839#[must_use]
33840pub struct AccelerationStructureGeometryKHR<'a> {
33841    pub s_type: StructureType,
33842    pub p_next: *const c_void,
33843    pub geometry_type: GeometryTypeKHR,
33844    pub geometry: AccelerationStructureGeometryDataKHR<'a>,
33845    pub flags: GeometryFlagsKHR,
33846    pub _marker: PhantomData<&'a ()>,
33847}
33848unsafe impl Send for AccelerationStructureGeometryKHR<'_> {}
33849unsafe impl Sync for AccelerationStructureGeometryKHR<'_> {}
33850#[cfg(feature = "debug")]
33851impl fmt::Debug for AccelerationStructureGeometryKHR<'_> {
33852    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33853        fmt.debug_struct("AccelerationStructureGeometryKHR")
33854            .field("s_type", &self.s_type)
33855            .field("p_next", &self.p_next)
33856            .field("geometry_type", &self.geometry_type)
33857            .field("geometry", &"union")
33858            .field("flags", &self.flags)
33859            .finish()
33860    }
33861}
33862impl ::core::default::Default for AccelerationStructureGeometryKHR<'_> {
33863    #[inline]
33864    fn default() -> Self {
33865        Self {
33866            s_type: Self::STRUCTURE_TYPE,
33867            p_next: ::core::ptr::null(),
33868            geometry_type: GeometryTypeKHR::default(),
33869            geometry: AccelerationStructureGeometryDataKHR::default(),
33870            flags: GeometryFlagsKHR::default(),
33871            _marker: PhantomData,
33872        }
33873    }
33874}
33875unsafe impl<'a> TaggedStructure for AccelerationStructureGeometryKHR<'a> {
33876    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_GEOMETRY_KHR;
33877}
33878impl<'a> AccelerationStructureGeometryKHR<'a> {
33879    #[inline]
33880    pub fn geometry_type(mut self, geometry_type: GeometryTypeKHR) -> Self {
33881        self.geometry_type = geometry_type;
33882        self
33883    }
33884    #[inline]
33885    pub fn geometry(mut self, geometry: AccelerationStructureGeometryDataKHR<'a>) -> Self {
33886        self.geometry = geometry;
33887        self
33888    }
33889    #[inline]
33890    pub fn flags(mut self, flags: GeometryFlagsKHR) -> Self {
33891        self.flags = flags;
33892        self
33893    }
33894}
33895#[repr(C)]
33896#[derive(Copy, Clone)]
33897#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureBuildGeometryInfoKHR.html>"]
33898#[must_use]
33899pub struct AccelerationStructureBuildGeometryInfoKHR<'a> {
33900    pub s_type: StructureType,
33901    pub p_next: *const c_void,
33902    pub ty: AccelerationStructureTypeKHR,
33903    pub flags: BuildAccelerationStructureFlagsKHR,
33904    pub mode: BuildAccelerationStructureModeKHR,
33905    pub src_acceleration_structure: AccelerationStructureKHR,
33906    pub dst_acceleration_structure: AccelerationStructureKHR,
33907    pub geometry_count: u32,
33908    pub p_geometries: *const AccelerationStructureGeometryKHR<'a>,
33909    pub pp_geometries: *const *const AccelerationStructureGeometryKHR<'a>,
33910    pub scratch_data: DeviceOrHostAddressKHR,
33911    pub _marker: PhantomData<&'a ()>,
33912}
33913unsafe impl Send for AccelerationStructureBuildGeometryInfoKHR<'_> {}
33914unsafe impl Sync for AccelerationStructureBuildGeometryInfoKHR<'_> {}
33915#[cfg(feature = "debug")]
33916impl fmt::Debug for AccelerationStructureBuildGeometryInfoKHR<'_> {
33917    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
33918        fmt.debug_struct("AccelerationStructureBuildGeometryInfoKHR")
33919            .field("s_type", &self.s_type)
33920            .field("p_next", &self.p_next)
33921            .field("ty", &self.ty)
33922            .field("flags", &self.flags)
33923            .field("mode", &self.mode)
33924            .field(
33925                "src_acceleration_structure",
33926                &self.src_acceleration_structure,
33927            )
33928            .field(
33929                "dst_acceleration_structure",
33930                &self.dst_acceleration_structure,
33931            )
33932            .field("geometry_count", &self.geometry_count)
33933            .field("p_geometries", &self.p_geometries)
33934            .field("pp_geometries", &self.pp_geometries)
33935            .field("scratch_data", &"union")
33936            .finish()
33937    }
33938}
33939impl ::core::default::Default for AccelerationStructureBuildGeometryInfoKHR<'_> {
33940    #[inline]
33941    fn default() -> Self {
33942        Self {
33943            s_type: Self::STRUCTURE_TYPE,
33944            p_next: ::core::ptr::null(),
33945            ty: AccelerationStructureTypeKHR::default(),
33946            flags: BuildAccelerationStructureFlagsKHR::default(),
33947            mode: BuildAccelerationStructureModeKHR::default(),
33948            src_acceleration_structure: AccelerationStructureKHR::default(),
33949            dst_acceleration_structure: AccelerationStructureKHR::default(),
33950            geometry_count: u32::default(),
33951            p_geometries: ::core::ptr::null(),
33952            pp_geometries: ::core::ptr::null(),
33953            scratch_data: DeviceOrHostAddressKHR::default(),
33954            _marker: PhantomData,
33955        }
33956    }
33957}
33958unsafe impl<'a> TaggedStructure for AccelerationStructureBuildGeometryInfoKHR<'a> {
33959    const STRUCTURE_TYPE: StructureType =
33960        StructureType::ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
33961}
33962impl<'a> AccelerationStructureBuildGeometryInfoKHR<'a> {
33963    #[inline]
33964    pub fn ty(mut self, ty: AccelerationStructureTypeKHR) -> Self {
33965        self.ty = ty;
33966        self
33967    }
33968    #[inline]
33969    pub fn flags(mut self, flags: BuildAccelerationStructureFlagsKHR) -> Self {
33970        self.flags = flags;
33971        self
33972    }
33973    #[inline]
33974    pub fn mode(mut self, mode: BuildAccelerationStructureModeKHR) -> Self {
33975        self.mode = mode;
33976        self
33977    }
33978    #[inline]
33979    pub fn src_acceleration_structure(
33980        mut self,
33981        src_acceleration_structure: AccelerationStructureKHR,
33982    ) -> Self {
33983        self.src_acceleration_structure = src_acceleration_structure;
33984        self
33985    }
33986    #[inline]
33987    pub fn dst_acceleration_structure(
33988        mut self,
33989        dst_acceleration_structure: AccelerationStructureKHR,
33990    ) -> Self {
33991        self.dst_acceleration_structure = dst_acceleration_structure;
33992        self
33993    }
33994    #[inline]
33995    pub fn geometries(mut self, geometries: &'a [AccelerationStructureGeometryKHR<'a>]) -> Self {
33996        self.geometry_count = geometries.len() as _;
33997        self.p_geometries = geometries.as_ptr();
33998        self
33999    }
34000    #[inline]
34001    pub fn geometries_ptrs(
34002        mut self,
34003        geometries_ptrs: &'a [&'a AccelerationStructureGeometryKHR<'a>],
34004    ) -> Self {
34005        self.geometry_count = geometries_ptrs.len() as _;
34006        self.pp_geometries = geometries_ptrs.as_ptr().cast();
34007        self
34008    }
34009    #[inline]
34010    pub fn scratch_data(mut self, scratch_data: DeviceOrHostAddressKHR) -> Self {
34011        self.scratch_data = scratch_data;
34012        self
34013    }
34014}
34015#[repr(C)]
34016#[cfg_attr(feature = "debug", derive(Debug))]
34017#[derive(Copy, Clone, Default)]
34018#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureBuildRangeInfoKHR.html>"]
34019#[must_use]
34020pub struct AccelerationStructureBuildRangeInfoKHR {
34021    pub primitive_count: u32,
34022    pub primitive_offset: u32,
34023    pub first_vertex: u32,
34024    pub transform_offset: u32,
34025}
34026impl AccelerationStructureBuildRangeInfoKHR {
34027    #[inline]
34028    pub fn primitive_count(mut self, primitive_count: u32) -> Self {
34029        self.primitive_count = primitive_count;
34030        self
34031    }
34032    #[inline]
34033    pub fn primitive_offset(mut self, primitive_offset: u32) -> Self {
34034        self.primitive_offset = primitive_offset;
34035        self
34036    }
34037    #[inline]
34038    pub fn first_vertex(mut self, first_vertex: u32) -> Self {
34039        self.first_vertex = first_vertex;
34040        self
34041    }
34042    #[inline]
34043    pub fn transform_offset(mut self, transform_offset: u32) -> Self {
34044        self.transform_offset = transform_offset;
34045        self
34046    }
34047}
34048#[repr(C)]
34049#[cfg_attr(feature = "debug", derive(Debug))]
34050#[derive(Copy, Clone)]
34051#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureCreateInfoKHR.html>"]
34052#[must_use]
34053pub struct AccelerationStructureCreateInfoKHR<'a> {
34054    pub s_type: StructureType,
34055    pub p_next: *const c_void,
34056    pub create_flags: AccelerationStructureCreateFlagsKHR,
34057    pub buffer: Buffer,
34058    pub offset: DeviceSize,
34059    pub size: DeviceSize,
34060    pub ty: AccelerationStructureTypeKHR,
34061    pub device_address: DeviceAddress,
34062    pub _marker: PhantomData<&'a ()>,
34063}
34064unsafe impl Send for AccelerationStructureCreateInfoKHR<'_> {}
34065unsafe impl Sync for AccelerationStructureCreateInfoKHR<'_> {}
34066impl ::core::default::Default for AccelerationStructureCreateInfoKHR<'_> {
34067    #[inline]
34068    fn default() -> Self {
34069        Self {
34070            s_type: Self::STRUCTURE_TYPE,
34071            p_next: ::core::ptr::null(),
34072            create_flags: AccelerationStructureCreateFlagsKHR::default(),
34073            buffer: Buffer::default(),
34074            offset: DeviceSize::default(),
34075            size: DeviceSize::default(),
34076            ty: AccelerationStructureTypeKHR::default(),
34077            device_address: DeviceAddress::default(),
34078            _marker: PhantomData,
34079        }
34080    }
34081}
34082unsafe impl<'a> TaggedStructure for AccelerationStructureCreateInfoKHR<'a> {
34083    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
34084}
34085pub unsafe trait ExtendsAccelerationStructureCreateInfoKHR {}
34086impl<'a> AccelerationStructureCreateInfoKHR<'a> {
34087    #[inline]
34088    pub fn create_flags(mut self, create_flags: AccelerationStructureCreateFlagsKHR) -> Self {
34089        self.create_flags = create_flags;
34090        self
34091    }
34092    #[inline]
34093    pub fn buffer(mut self, buffer: Buffer) -> Self {
34094        self.buffer = buffer;
34095        self
34096    }
34097    #[inline]
34098    pub fn offset(mut self, offset: DeviceSize) -> Self {
34099        self.offset = offset;
34100        self
34101    }
34102    #[inline]
34103    pub fn size(mut self, size: DeviceSize) -> Self {
34104        self.size = size;
34105        self
34106    }
34107    #[inline]
34108    pub fn ty(mut self, ty: AccelerationStructureTypeKHR) -> Self {
34109        self.ty = ty;
34110        self
34111    }
34112    #[inline]
34113    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
34114        self.device_address = device_address;
34115        self
34116    }
34117    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
34118    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
34119    #[doc = r" valid extension structs can be pushed into the chain."]
34120    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
34121    #[doc = r" chain will look like `A -> D -> B -> C`."]
34122    pub fn push_next<T: ExtendsAccelerationStructureCreateInfoKHR + ?Sized>(
34123        mut self,
34124        next: &'a mut T,
34125    ) -> Self {
34126        unsafe {
34127            let next_ptr = <*const T>::cast(next);
34128            let last_next = ptr_chain_iter(next).last().unwrap();
34129            (*last_next).p_next = self.p_next as _;
34130            self.p_next = next_ptr;
34131        }
34132        self
34133    }
34134}
34135#[repr(C)]
34136#[cfg_attr(feature = "debug", derive(Debug))]
34137#[derive(Copy, Clone, Default)]
34138#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAabbPositionsKHR.html>"]
34139#[must_use]
34140pub struct AabbPositionsKHR {
34141    pub min_x: f32,
34142    pub min_y: f32,
34143    pub min_z: f32,
34144    pub max_x: f32,
34145    pub max_y: f32,
34146    pub max_z: f32,
34147}
34148impl AabbPositionsKHR {
34149    #[inline]
34150    pub fn min_x(mut self, min_x: f32) -> Self {
34151        self.min_x = min_x;
34152        self
34153    }
34154    #[inline]
34155    pub fn min_y(mut self, min_y: f32) -> Self {
34156        self.min_y = min_y;
34157        self
34158    }
34159    #[inline]
34160    pub fn min_z(mut self, min_z: f32) -> Self {
34161        self.min_z = min_z;
34162        self
34163    }
34164    #[inline]
34165    pub fn max_x(mut self, max_x: f32) -> Self {
34166        self.max_x = max_x;
34167        self
34168    }
34169    #[inline]
34170    pub fn max_y(mut self, max_y: f32) -> Self {
34171        self.max_y = max_y;
34172        self
34173    }
34174    #[inline]
34175    pub fn max_z(mut self, max_z: f32) -> Self {
34176        self.max_z = max_z;
34177        self
34178    }
34179}
34180#[repr(C)]
34181#[derive(Copy, Clone)]
34182pub struct TransformMatrixKHR {
34183    pub matrix: [f32; 12],
34184}
34185#[repr(C)]
34186#[derive(Copy, Clone)]
34187pub union AccelerationStructureReferenceKHR {
34188    pub device_handle: DeviceAddress,
34189    pub host_handle: AccelerationStructureKHR,
34190}
34191#[repr(C)]
34192#[derive(Copy, Clone)]
34193#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureInstanceKHR.html>"]
34194pub struct AccelerationStructureInstanceKHR {
34195    pub transform: TransformMatrixKHR,
34196    #[doc = r" Use [`Packed24_8::new(instance_custom_index, mask)`][Packed24_8::new()] to construct this field"]
34197    pub instance_custom_index_and_mask: Packed24_8,
34198    #[doc = r" Use [`Packed24_8::new(instance_shader_binding_table_record_offset, flags)`][Packed24_8::new()] to construct this field"]
34199    pub instance_shader_binding_table_record_offset_and_flags: Packed24_8,
34200    pub acceleration_structure_reference: AccelerationStructureReferenceKHR,
34201}
34202#[repr(C)]
34203#[cfg_attr(feature = "debug", derive(Debug))]
34204#[derive(Copy, Clone)]
34205#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureDeviceAddressInfoKHR.html>"]
34206#[must_use]
34207pub struct AccelerationStructureDeviceAddressInfoKHR<'a> {
34208    pub s_type: StructureType,
34209    pub p_next: *const c_void,
34210    pub acceleration_structure: AccelerationStructureKHR,
34211    pub _marker: PhantomData<&'a ()>,
34212}
34213unsafe impl Send for AccelerationStructureDeviceAddressInfoKHR<'_> {}
34214unsafe impl Sync for AccelerationStructureDeviceAddressInfoKHR<'_> {}
34215impl ::core::default::Default for AccelerationStructureDeviceAddressInfoKHR<'_> {
34216    #[inline]
34217    fn default() -> Self {
34218        Self {
34219            s_type: Self::STRUCTURE_TYPE,
34220            p_next: ::core::ptr::null(),
34221            acceleration_structure: AccelerationStructureKHR::default(),
34222            _marker: PhantomData,
34223        }
34224    }
34225}
34226unsafe impl<'a> TaggedStructure for AccelerationStructureDeviceAddressInfoKHR<'a> {
34227    const STRUCTURE_TYPE: StructureType =
34228        StructureType::ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR;
34229}
34230impl<'a> AccelerationStructureDeviceAddressInfoKHR<'a> {
34231    #[inline]
34232    pub fn acceleration_structure(
34233        mut self,
34234        acceleration_structure: AccelerationStructureKHR,
34235    ) -> Self {
34236        self.acceleration_structure = acceleration_structure;
34237        self
34238    }
34239}
34240#[repr(C)]
34241#[cfg_attr(feature = "debug", derive(Debug))]
34242#[derive(Copy, Clone)]
34243#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureVersionInfoKHR.html>"]
34244#[must_use]
34245pub struct AccelerationStructureVersionInfoKHR<'a> {
34246    pub s_type: StructureType,
34247    pub p_next: *const c_void,
34248    pub p_version_data: *const [u8; 2 * UUID_SIZE],
34249    pub _marker: PhantomData<&'a ()>,
34250}
34251unsafe impl Send for AccelerationStructureVersionInfoKHR<'_> {}
34252unsafe impl Sync for AccelerationStructureVersionInfoKHR<'_> {}
34253impl ::core::default::Default for AccelerationStructureVersionInfoKHR<'_> {
34254    #[inline]
34255    fn default() -> Self {
34256        Self {
34257            s_type: Self::STRUCTURE_TYPE,
34258            p_next: ::core::ptr::null(),
34259            p_version_data: ::core::ptr::null(),
34260            _marker: PhantomData,
34261        }
34262    }
34263}
34264unsafe impl<'a> TaggedStructure for AccelerationStructureVersionInfoKHR<'a> {
34265    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_VERSION_INFO_KHR;
34266}
34267impl<'a> AccelerationStructureVersionInfoKHR<'a> {
34268    #[inline]
34269    pub fn version_data(mut self, version_data: &'a [u8; 2 * UUID_SIZE]) -> Self {
34270        self.p_version_data = version_data;
34271        self
34272    }
34273}
34274#[repr(C)]
34275#[cfg_attr(feature = "debug", derive(Debug))]
34276#[derive(Copy, Clone)]
34277#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyAccelerationStructureInfoKHR.html>"]
34278#[must_use]
34279pub struct CopyAccelerationStructureInfoKHR<'a> {
34280    pub s_type: StructureType,
34281    pub p_next: *const c_void,
34282    pub src: AccelerationStructureKHR,
34283    pub dst: AccelerationStructureKHR,
34284    pub mode: CopyAccelerationStructureModeKHR,
34285    pub _marker: PhantomData<&'a ()>,
34286}
34287unsafe impl Send for CopyAccelerationStructureInfoKHR<'_> {}
34288unsafe impl Sync for CopyAccelerationStructureInfoKHR<'_> {}
34289impl ::core::default::Default for CopyAccelerationStructureInfoKHR<'_> {
34290    #[inline]
34291    fn default() -> Self {
34292        Self {
34293            s_type: Self::STRUCTURE_TYPE,
34294            p_next: ::core::ptr::null(),
34295            src: AccelerationStructureKHR::default(),
34296            dst: AccelerationStructureKHR::default(),
34297            mode: CopyAccelerationStructureModeKHR::default(),
34298            _marker: PhantomData,
34299        }
34300    }
34301}
34302unsafe impl<'a> TaggedStructure for CopyAccelerationStructureInfoKHR<'a> {
34303    const STRUCTURE_TYPE: StructureType = StructureType::COPY_ACCELERATION_STRUCTURE_INFO_KHR;
34304}
34305impl<'a> CopyAccelerationStructureInfoKHR<'a> {
34306    #[inline]
34307    pub fn src(mut self, src: AccelerationStructureKHR) -> Self {
34308        self.src = src;
34309        self
34310    }
34311    #[inline]
34312    pub fn dst(mut self, dst: AccelerationStructureKHR) -> Self {
34313        self.dst = dst;
34314        self
34315    }
34316    #[inline]
34317    pub fn mode(mut self, mode: CopyAccelerationStructureModeKHR) -> Self {
34318        self.mode = mode;
34319        self
34320    }
34321}
34322#[repr(C)]
34323#[derive(Copy, Clone)]
34324#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyAccelerationStructureToMemoryInfoKHR.html>"]
34325#[must_use]
34326pub struct CopyAccelerationStructureToMemoryInfoKHR<'a> {
34327    pub s_type: StructureType,
34328    pub p_next: *const c_void,
34329    pub src: AccelerationStructureKHR,
34330    pub dst: DeviceOrHostAddressKHR,
34331    pub mode: CopyAccelerationStructureModeKHR,
34332    pub _marker: PhantomData<&'a ()>,
34333}
34334unsafe impl Send for CopyAccelerationStructureToMemoryInfoKHR<'_> {}
34335unsafe impl Sync for CopyAccelerationStructureToMemoryInfoKHR<'_> {}
34336#[cfg(feature = "debug")]
34337impl fmt::Debug for CopyAccelerationStructureToMemoryInfoKHR<'_> {
34338    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
34339        fmt.debug_struct("CopyAccelerationStructureToMemoryInfoKHR")
34340            .field("s_type", &self.s_type)
34341            .field("p_next", &self.p_next)
34342            .field("src", &self.src)
34343            .field("dst", &"union")
34344            .field("mode", &self.mode)
34345            .finish()
34346    }
34347}
34348impl ::core::default::Default for CopyAccelerationStructureToMemoryInfoKHR<'_> {
34349    #[inline]
34350    fn default() -> Self {
34351        Self {
34352            s_type: Self::STRUCTURE_TYPE,
34353            p_next: ::core::ptr::null(),
34354            src: AccelerationStructureKHR::default(),
34355            dst: DeviceOrHostAddressKHR::default(),
34356            mode: CopyAccelerationStructureModeKHR::default(),
34357            _marker: PhantomData,
34358        }
34359    }
34360}
34361unsafe impl<'a> TaggedStructure for CopyAccelerationStructureToMemoryInfoKHR<'a> {
34362    const STRUCTURE_TYPE: StructureType =
34363        StructureType::COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR;
34364}
34365impl<'a> CopyAccelerationStructureToMemoryInfoKHR<'a> {
34366    #[inline]
34367    pub fn src(mut self, src: AccelerationStructureKHR) -> Self {
34368        self.src = src;
34369        self
34370    }
34371    #[inline]
34372    pub fn dst(mut self, dst: DeviceOrHostAddressKHR) -> Self {
34373        self.dst = dst;
34374        self
34375    }
34376    #[inline]
34377    pub fn mode(mut self, mode: CopyAccelerationStructureModeKHR) -> Self {
34378        self.mode = mode;
34379        self
34380    }
34381}
34382#[repr(C)]
34383#[derive(Copy, Clone)]
34384#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryToAccelerationStructureInfoKHR.html>"]
34385#[must_use]
34386pub struct CopyMemoryToAccelerationStructureInfoKHR<'a> {
34387    pub s_type: StructureType,
34388    pub p_next: *const c_void,
34389    pub src: DeviceOrHostAddressConstKHR,
34390    pub dst: AccelerationStructureKHR,
34391    pub mode: CopyAccelerationStructureModeKHR,
34392    pub _marker: PhantomData<&'a ()>,
34393}
34394unsafe impl Send for CopyMemoryToAccelerationStructureInfoKHR<'_> {}
34395unsafe impl Sync for CopyMemoryToAccelerationStructureInfoKHR<'_> {}
34396#[cfg(feature = "debug")]
34397impl fmt::Debug for CopyMemoryToAccelerationStructureInfoKHR<'_> {
34398    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
34399        fmt.debug_struct("CopyMemoryToAccelerationStructureInfoKHR")
34400            .field("s_type", &self.s_type)
34401            .field("p_next", &self.p_next)
34402            .field("src", &"union")
34403            .field("dst", &self.dst)
34404            .field("mode", &self.mode)
34405            .finish()
34406    }
34407}
34408impl ::core::default::Default for CopyMemoryToAccelerationStructureInfoKHR<'_> {
34409    #[inline]
34410    fn default() -> Self {
34411        Self {
34412            s_type: Self::STRUCTURE_TYPE,
34413            p_next: ::core::ptr::null(),
34414            src: DeviceOrHostAddressConstKHR::default(),
34415            dst: AccelerationStructureKHR::default(),
34416            mode: CopyAccelerationStructureModeKHR::default(),
34417            _marker: PhantomData,
34418        }
34419    }
34420}
34421unsafe impl<'a> TaggedStructure for CopyMemoryToAccelerationStructureInfoKHR<'a> {
34422    const STRUCTURE_TYPE: StructureType =
34423        StructureType::COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR;
34424}
34425impl<'a> CopyMemoryToAccelerationStructureInfoKHR<'a> {
34426    #[inline]
34427    pub fn src(mut self, src: DeviceOrHostAddressConstKHR) -> Self {
34428        self.src = src;
34429        self
34430    }
34431    #[inline]
34432    pub fn dst(mut self, dst: AccelerationStructureKHR) -> Self {
34433        self.dst = dst;
34434        self
34435    }
34436    #[inline]
34437    pub fn mode(mut self, mode: CopyAccelerationStructureModeKHR) -> Self {
34438        self.mode = mode;
34439        self
34440    }
34441}
34442#[repr(C)]
34443#[cfg_attr(feature = "debug", derive(Debug))]
34444#[derive(Copy, Clone)]
34445#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRayTracingPipelineInterfaceCreateInfoKHR.html>"]
34446#[must_use]
34447pub struct RayTracingPipelineInterfaceCreateInfoKHR<'a> {
34448    pub s_type: StructureType,
34449    pub p_next: *const c_void,
34450    pub max_pipeline_ray_payload_size: u32,
34451    pub max_pipeline_ray_hit_attribute_size: u32,
34452    pub _marker: PhantomData<&'a ()>,
34453}
34454unsafe impl Send for RayTracingPipelineInterfaceCreateInfoKHR<'_> {}
34455unsafe impl Sync for RayTracingPipelineInterfaceCreateInfoKHR<'_> {}
34456impl ::core::default::Default for RayTracingPipelineInterfaceCreateInfoKHR<'_> {
34457    #[inline]
34458    fn default() -> Self {
34459        Self {
34460            s_type: Self::STRUCTURE_TYPE,
34461            p_next: ::core::ptr::null(),
34462            max_pipeline_ray_payload_size: u32::default(),
34463            max_pipeline_ray_hit_attribute_size: u32::default(),
34464            _marker: PhantomData,
34465        }
34466    }
34467}
34468unsafe impl<'a> TaggedStructure for RayTracingPipelineInterfaceCreateInfoKHR<'a> {
34469    const STRUCTURE_TYPE: StructureType =
34470        StructureType::RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR;
34471}
34472impl<'a> RayTracingPipelineInterfaceCreateInfoKHR<'a> {
34473    #[inline]
34474    pub fn max_pipeline_ray_payload_size(mut self, max_pipeline_ray_payload_size: u32) -> Self {
34475        self.max_pipeline_ray_payload_size = max_pipeline_ray_payload_size;
34476        self
34477    }
34478    #[inline]
34479    pub fn max_pipeline_ray_hit_attribute_size(
34480        mut self,
34481        max_pipeline_ray_hit_attribute_size: u32,
34482    ) -> Self {
34483        self.max_pipeline_ray_hit_attribute_size = max_pipeline_ray_hit_attribute_size;
34484        self
34485    }
34486}
34487#[repr(C)]
34488#[cfg_attr(feature = "debug", derive(Debug))]
34489#[derive(Copy, Clone)]
34490#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineLibraryCreateInfoKHR.html>"]
34491#[must_use]
34492pub struct PipelineLibraryCreateInfoKHR<'a> {
34493    pub s_type: StructureType,
34494    pub p_next: *const c_void,
34495    pub library_count: u32,
34496    pub p_libraries: *const Pipeline,
34497    pub _marker: PhantomData<&'a ()>,
34498}
34499unsafe impl Send for PipelineLibraryCreateInfoKHR<'_> {}
34500unsafe impl Sync for PipelineLibraryCreateInfoKHR<'_> {}
34501impl ::core::default::Default for PipelineLibraryCreateInfoKHR<'_> {
34502    #[inline]
34503    fn default() -> Self {
34504        Self {
34505            s_type: Self::STRUCTURE_TYPE,
34506            p_next: ::core::ptr::null(),
34507            library_count: u32::default(),
34508            p_libraries: ::core::ptr::null(),
34509            _marker: PhantomData,
34510        }
34511    }
34512}
34513unsafe impl<'a> TaggedStructure for PipelineLibraryCreateInfoKHR<'a> {
34514    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_LIBRARY_CREATE_INFO_KHR;
34515}
34516unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineLibraryCreateInfoKHR<'_> {}
34517impl<'a> PipelineLibraryCreateInfoKHR<'a> {
34518    #[inline]
34519    pub fn libraries(mut self, libraries: &'a [Pipeline]) -> Self {
34520        self.library_count = libraries.len() as _;
34521        self.p_libraries = libraries.as_ptr();
34522        self
34523    }
34524}
34525#[repr(C)]
34526#[cfg_attr(feature = "debug", derive(Debug))]
34527#[derive(Copy, Clone)]
34528#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedDynamicStateFeaturesEXT.html>"]
34529#[must_use]
34530pub struct PhysicalDeviceExtendedDynamicStateFeaturesEXT<'a> {
34531    pub s_type: StructureType,
34532    pub p_next: *mut c_void,
34533    pub extended_dynamic_state: Bool32,
34534    pub _marker: PhantomData<&'a ()>,
34535}
34536unsafe impl Send for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'_> {}
34537unsafe impl Sync for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'_> {}
34538impl ::core::default::Default for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'_> {
34539    #[inline]
34540    fn default() -> Self {
34541        Self {
34542            s_type: Self::STRUCTURE_TYPE,
34543            p_next: ::core::ptr::null_mut(),
34544            extended_dynamic_state: Bool32::default(),
34545            _marker: PhantomData,
34546        }
34547    }
34548}
34549unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'a> {
34550    const STRUCTURE_TYPE: StructureType =
34551        StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT;
34552}
34553unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'_> {}
34554unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExtendedDynamicStateFeaturesEXT<'_> {}
34555impl<'a> PhysicalDeviceExtendedDynamicStateFeaturesEXT<'a> {
34556    #[inline]
34557    pub fn extended_dynamic_state(mut self, extended_dynamic_state: bool) -> Self {
34558        self.extended_dynamic_state = extended_dynamic_state.into();
34559        self
34560    }
34561}
34562#[repr(C)]
34563#[cfg_attr(feature = "debug", derive(Debug))]
34564#[derive(Copy, Clone)]
34565#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.html>"]
34566#[must_use]
34567pub struct PhysicalDeviceExtendedDynamicState2FeaturesEXT<'a> {
34568    pub s_type: StructureType,
34569    pub p_next: *mut c_void,
34570    pub extended_dynamic_state2: Bool32,
34571    pub extended_dynamic_state2_logic_op: Bool32,
34572    pub extended_dynamic_state2_patch_control_points: Bool32,
34573    pub _marker: PhantomData<&'a ()>,
34574}
34575unsafe impl Send for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'_> {}
34576unsafe impl Sync for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'_> {}
34577impl ::core::default::Default for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'_> {
34578    #[inline]
34579    fn default() -> Self {
34580        Self {
34581            s_type: Self::STRUCTURE_TYPE,
34582            p_next: ::core::ptr::null_mut(),
34583            extended_dynamic_state2: Bool32::default(),
34584            extended_dynamic_state2_logic_op: Bool32::default(),
34585            extended_dynamic_state2_patch_control_points: Bool32::default(),
34586            _marker: PhantomData,
34587        }
34588    }
34589}
34590unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'a> {
34591    const STRUCTURE_TYPE: StructureType =
34592        StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT;
34593}
34594unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'_> {}
34595unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExtendedDynamicState2FeaturesEXT<'_> {}
34596impl<'a> PhysicalDeviceExtendedDynamicState2FeaturesEXT<'a> {
34597    #[inline]
34598    pub fn extended_dynamic_state2(mut self, extended_dynamic_state2: bool) -> Self {
34599        self.extended_dynamic_state2 = extended_dynamic_state2.into();
34600        self
34601    }
34602    #[inline]
34603    pub fn extended_dynamic_state2_logic_op(
34604        mut self,
34605        extended_dynamic_state2_logic_op: bool,
34606    ) -> Self {
34607        self.extended_dynamic_state2_logic_op = extended_dynamic_state2_logic_op.into();
34608        self
34609    }
34610    #[inline]
34611    pub fn extended_dynamic_state2_patch_control_points(
34612        mut self,
34613        extended_dynamic_state2_patch_control_points: bool,
34614    ) -> Self {
34615        self.extended_dynamic_state2_patch_control_points =
34616            extended_dynamic_state2_patch_control_points.into();
34617        self
34618    }
34619}
34620#[repr(C)]
34621#[cfg_attr(feature = "debug", derive(Debug))]
34622#[derive(Copy, Clone)]
34623#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedDynamicState3FeaturesEXT.html>"]
34624#[must_use]
34625pub struct PhysicalDeviceExtendedDynamicState3FeaturesEXT<'a> {
34626    pub s_type: StructureType,
34627    pub p_next: *mut c_void,
34628    pub extended_dynamic_state3_tessellation_domain_origin: Bool32,
34629    pub extended_dynamic_state3_depth_clamp_enable: Bool32,
34630    pub extended_dynamic_state3_polygon_mode: Bool32,
34631    pub extended_dynamic_state3_rasterization_samples: Bool32,
34632    pub extended_dynamic_state3_sample_mask: Bool32,
34633    pub extended_dynamic_state3_alpha_to_coverage_enable: Bool32,
34634    pub extended_dynamic_state3_alpha_to_one_enable: Bool32,
34635    pub extended_dynamic_state3_logic_op_enable: Bool32,
34636    pub extended_dynamic_state3_color_blend_enable: Bool32,
34637    pub extended_dynamic_state3_color_blend_equation: Bool32,
34638    pub extended_dynamic_state3_color_write_mask: Bool32,
34639    pub extended_dynamic_state3_rasterization_stream: Bool32,
34640    pub extended_dynamic_state3_conservative_rasterization_mode: Bool32,
34641    pub extended_dynamic_state3_extra_primitive_overestimation_size: Bool32,
34642    pub extended_dynamic_state3_depth_clip_enable: Bool32,
34643    pub extended_dynamic_state3_sample_locations_enable: Bool32,
34644    pub extended_dynamic_state3_color_blend_advanced: Bool32,
34645    pub extended_dynamic_state3_provoking_vertex_mode: Bool32,
34646    pub extended_dynamic_state3_line_rasterization_mode: Bool32,
34647    pub extended_dynamic_state3_line_stipple_enable: Bool32,
34648    pub extended_dynamic_state3_depth_clip_negative_one_to_one: Bool32,
34649    pub extended_dynamic_state3_viewport_w_scaling_enable: Bool32,
34650    pub extended_dynamic_state3_viewport_swizzle: Bool32,
34651    pub extended_dynamic_state3_coverage_to_color_enable: Bool32,
34652    pub extended_dynamic_state3_coverage_to_color_location: Bool32,
34653    pub extended_dynamic_state3_coverage_modulation_mode: Bool32,
34654    pub extended_dynamic_state3_coverage_modulation_table_enable: Bool32,
34655    pub extended_dynamic_state3_coverage_modulation_table: Bool32,
34656    pub extended_dynamic_state3_coverage_reduction_mode: Bool32,
34657    pub extended_dynamic_state3_representative_fragment_test_enable: Bool32,
34658    pub extended_dynamic_state3_shading_rate_image_enable: Bool32,
34659    pub _marker: PhantomData<&'a ()>,
34660}
34661unsafe impl Send for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'_> {}
34662unsafe impl Sync for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'_> {}
34663impl ::core::default::Default for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'_> {
34664    #[inline]
34665    fn default() -> Self {
34666        Self {
34667            s_type: Self::STRUCTURE_TYPE,
34668            p_next: ::core::ptr::null_mut(),
34669            extended_dynamic_state3_tessellation_domain_origin: Bool32::default(),
34670            extended_dynamic_state3_depth_clamp_enable: Bool32::default(),
34671            extended_dynamic_state3_polygon_mode: Bool32::default(),
34672            extended_dynamic_state3_rasterization_samples: Bool32::default(),
34673            extended_dynamic_state3_sample_mask: Bool32::default(),
34674            extended_dynamic_state3_alpha_to_coverage_enable: Bool32::default(),
34675            extended_dynamic_state3_alpha_to_one_enable: Bool32::default(),
34676            extended_dynamic_state3_logic_op_enable: Bool32::default(),
34677            extended_dynamic_state3_color_blend_enable: Bool32::default(),
34678            extended_dynamic_state3_color_blend_equation: Bool32::default(),
34679            extended_dynamic_state3_color_write_mask: Bool32::default(),
34680            extended_dynamic_state3_rasterization_stream: Bool32::default(),
34681            extended_dynamic_state3_conservative_rasterization_mode: Bool32::default(),
34682            extended_dynamic_state3_extra_primitive_overestimation_size: Bool32::default(),
34683            extended_dynamic_state3_depth_clip_enable: Bool32::default(),
34684            extended_dynamic_state3_sample_locations_enable: Bool32::default(),
34685            extended_dynamic_state3_color_blend_advanced: Bool32::default(),
34686            extended_dynamic_state3_provoking_vertex_mode: Bool32::default(),
34687            extended_dynamic_state3_line_rasterization_mode: Bool32::default(),
34688            extended_dynamic_state3_line_stipple_enable: Bool32::default(),
34689            extended_dynamic_state3_depth_clip_negative_one_to_one: Bool32::default(),
34690            extended_dynamic_state3_viewport_w_scaling_enable: Bool32::default(),
34691            extended_dynamic_state3_viewport_swizzle: Bool32::default(),
34692            extended_dynamic_state3_coverage_to_color_enable: Bool32::default(),
34693            extended_dynamic_state3_coverage_to_color_location: Bool32::default(),
34694            extended_dynamic_state3_coverage_modulation_mode: Bool32::default(),
34695            extended_dynamic_state3_coverage_modulation_table_enable: Bool32::default(),
34696            extended_dynamic_state3_coverage_modulation_table: Bool32::default(),
34697            extended_dynamic_state3_coverage_reduction_mode: Bool32::default(),
34698            extended_dynamic_state3_representative_fragment_test_enable: Bool32::default(),
34699            extended_dynamic_state3_shading_rate_image_enable: Bool32::default(),
34700            _marker: PhantomData,
34701        }
34702    }
34703}
34704unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'a> {
34705    const STRUCTURE_TYPE: StructureType =
34706        StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT;
34707}
34708unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'_> {}
34709unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExtendedDynamicState3FeaturesEXT<'_> {}
34710impl<'a> PhysicalDeviceExtendedDynamicState3FeaturesEXT<'a> {
34711    #[inline]
34712    pub fn extended_dynamic_state3_tessellation_domain_origin(
34713        mut self,
34714        extended_dynamic_state3_tessellation_domain_origin: bool,
34715    ) -> Self {
34716        self.extended_dynamic_state3_tessellation_domain_origin =
34717            extended_dynamic_state3_tessellation_domain_origin.into();
34718        self
34719    }
34720    #[inline]
34721    pub fn extended_dynamic_state3_depth_clamp_enable(
34722        mut self,
34723        extended_dynamic_state3_depth_clamp_enable: bool,
34724    ) -> Self {
34725        self.extended_dynamic_state3_depth_clamp_enable =
34726            extended_dynamic_state3_depth_clamp_enable.into();
34727        self
34728    }
34729    #[inline]
34730    pub fn extended_dynamic_state3_polygon_mode(
34731        mut self,
34732        extended_dynamic_state3_polygon_mode: bool,
34733    ) -> Self {
34734        self.extended_dynamic_state3_polygon_mode = extended_dynamic_state3_polygon_mode.into();
34735        self
34736    }
34737    #[inline]
34738    pub fn extended_dynamic_state3_rasterization_samples(
34739        mut self,
34740        extended_dynamic_state3_rasterization_samples: bool,
34741    ) -> Self {
34742        self.extended_dynamic_state3_rasterization_samples =
34743            extended_dynamic_state3_rasterization_samples.into();
34744        self
34745    }
34746    #[inline]
34747    pub fn extended_dynamic_state3_sample_mask(
34748        mut self,
34749        extended_dynamic_state3_sample_mask: bool,
34750    ) -> Self {
34751        self.extended_dynamic_state3_sample_mask = extended_dynamic_state3_sample_mask.into();
34752        self
34753    }
34754    #[inline]
34755    pub fn extended_dynamic_state3_alpha_to_coverage_enable(
34756        mut self,
34757        extended_dynamic_state3_alpha_to_coverage_enable: bool,
34758    ) -> Self {
34759        self.extended_dynamic_state3_alpha_to_coverage_enable =
34760            extended_dynamic_state3_alpha_to_coverage_enable.into();
34761        self
34762    }
34763    #[inline]
34764    pub fn extended_dynamic_state3_alpha_to_one_enable(
34765        mut self,
34766        extended_dynamic_state3_alpha_to_one_enable: bool,
34767    ) -> Self {
34768        self.extended_dynamic_state3_alpha_to_one_enable =
34769            extended_dynamic_state3_alpha_to_one_enable.into();
34770        self
34771    }
34772    #[inline]
34773    pub fn extended_dynamic_state3_logic_op_enable(
34774        mut self,
34775        extended_dynamic_state3_logic_op_enable: bool,
34776    ) -> Self {
34777        self.extended_dynamic_state3_logic_op_enable =
34778            extended_dynamic_state3_logic_op_enable.into();
34779        self
34780    }
34781    #[inline]
34782    pub fn extended_dynamic_state3_color_blend_enable(
34783        mut self,
34784        extended_dynamic_state3_color_blend_enable: bool,
34785    ) -> Self {
34786        self.extended_dynamic_state3_color_blend_enable =
34787            extended_dynamic_state3_color_blend_enable.into();
34788        self
34789    }
34790    #[inline]
34791    pub fn extended_dynamic_state3_color_blend_equation(
34792        mut self,
34793        extended_dynamic_state3_color_blend_equation: bool,
34794    ) -> Self {
34795        self.extended_dynamic_state3_color_blend_equation =
34796            extended_dynamic_state3_color_blend_equation.into();
34797        self
34798    }
34799    #[inline]
34800    pub fn extended_dynamic_state3_color_write_mask(
34801        mut self,
34802        extended_dynamic_state3_color_write_mask: bool,
34803    ) -> Self {
34804        self.extended_dynamic_state3_color_write_mask =
34805            extended_dynamic_state3_color_write_mask.into();
34806        self
34807    }
34808    #[inline]
34809    pub fn extended_dynamic_state3_rasterization_stream(
34810        mut self,
34811        extended_dynamic_state3_rasterization_stream: bool,
34812    ) -> Self {
34813        self.extended_dynamic_state3_rasterization_stream =
34814            extended_dynamic_state3_rasterization_stream.into();
34815        self
34816    }
34817    #[inline]
34818    pub fn extended_dynamic_state3_conservative_rasterization_mode(
34819        mut self,
34820        extended_dynamic_state3_conservative_rasterization_mode: bool,
34821    ) -> Self {
34822        self.extended_dynamic_state3_conservative_rasterization_mode =
34823            extended_dynamic_state3_conservative_rasterization_mode.into();
34824        self
34825    }
34826    #[inline]
34827    pub fn extended_dynamic_state3_extra_primitive_overestimation_size(
34828        mut self,
34829        extended_dynamic_state3_extra_primitive_overestimation_size: bool,
34830    ) -> Self {
34831        self.extended_dynamic_state3_extra_primitive_overestimation_size =
34832            extended_dynamic_state3_extra_primitive_overestimation_size.into();
34833        self
34834    }
34835    #[inline]
34836    pub fn extended_dynamic_state3_depth_clip_enable(
34837        mut self,
34838        extended_dynamic_state3_depth_clip_enable: bool,
34839    ) -> Self {
34840        self.extended_dynamic_state3_depth_clip_enable =
34841            extended_dynamic_state3_depth_clip_enable.into();
34842        self
34843    }
34844    #[inline]
34845    pub fn extended_dynamic_state3_sample_locations_enable(
34846        mut self,
34847        extended_dynamic_state3_sample_locations_enable: bool,
34848    ) -> Self {
34849        self.extended_dynamic_state3_sample_locations_enable =
34850            extended_dynamic_state3_sample_locations_enable.into();
34851        self
34852    }
34853    #[inline]
34854    pub fn extended_dynamic_state3_color_blend_advanced(
34855        mut self,
34856        extended_dynamic_state3_color_blend_advanced: bool,
34857    ) -> Self {
34858        self.extended_dynamic_state3_color_blend_advanced =
34859            extended_dynamic_state3_color_blend_advanced.into();
34860        self
34861    }
34862    #[inline]
34863    pub fn extended_dynamic_state3_provoking_vertex_mode(
34864        mut self,
34865        extended_dynamic_state3_provoking_vertex_mode: bool,
34866    ) -> Self {
34867        self.extended_dynamic_state3_provoking_vertex_mode =
34868            extended_dynamic_state3_provoking_vertex_mode.into();
34869        self
34870    }
34871    #[inline]
34872    pub fn extended_dynamic_state3_line_rasterization_mode(
34873        mut self,
34874        extended_dynamic_state3_line_rasterization_mode: bool,
34875    ) -> Self {
34876        self.extended_dynamic_state3_line_rasterization_mode =
34877            extended_dynamic_state3_line_rasterization_mode.into();
34878        self
34879    }
34880    #[inline]
34881    pub fn extended_dynamic_state3_line_stipple_enable(
34882        mut self,
34883        extended_dynamic_state3_line_stipple_enable: bool,
34884    ) -> Self {
34885        self.extended_dynamic_state3_line_stipple_enable =
34886            extended_dynamic_state3_line_stipple_enable.into();
34887        self
34888    }
34889    #[inline]
34890    pub fn extended_dynamic_state3_depth_clip_negative_one_to_one(
34891        mut self,
34892        extended_dynamic_state3_depth_clip_negative_one_to_one: bool,
34893    ) -> Self {
34894        self.extended_dynamic_state3_depth_clip_negative_one_to_one =
34895            extended_dynamic_state3_depth_clip_negative_one_to_one.into();
34896        self
34897    }
34898    #[inline]
34899    pub fn extended_dynamic_state3_viewport_w_scaling_enable(
34900        mut self,
34901        extended_dynamic_state3_viewport_w_scaling_enable: bool,
34902    ) -> Self {
34903        self.extended_dynamic_state3_viewport_w_scaling_enable =
34904            extended_dynamic_state3_viewport_w_scaling_enable.into();
34905        self
34906    }
34907    #[inline]
34908    pub fn extended_dynamic_state3_viewport_swizzle(
34909        mut self,
34910        extended_dynamic_state3_viewport_swizzle: bool,
34911    ) -> Self {
34912        self.extended_dynamic_state3_viewport_swizzle =
34913            extended_dynamic_state3_viewport_swizzle.into();
34914        self
34915    }
34916    #[inline]
34917    pub fn extended_dynamic_state3_coverage_to_color_enable(
34918        mut self,
34919        extended_dynamic_state3_coverage_to_color_enable: bool,
34920    ) -> Self {
34921        self.extended_dynamic_state3_coverage_to_color_enable =
34922            extended_dynamic_state3_coverage_to_color_enable.into();
34923        self
34924    }
34925    #[inline]
34926    pub fn extended_dynamic_state3_coverage_to_color_location(
34927        mut self,
34928        extended_dynamic_state3_coverage_to_color_location: bool,
34929    ) -> Self {
34930        self.extended_dynamic_state3_coverage_to_color_location =
34931            extended_dynamic_state3_coverage_to_color_location.into();
34932        self
34933    }
34934    #[inline]
34935    pub fn extended_dynamic_state3_coverage_modulation_mode(
34936        mut self,
34937        extended_dynamic_state3_coverage_modulation_mode: bool,
34938    ) -> Self {
34939        self.extended_dynamic_state3_coverage_modulation_mode =
34940            extended_dynamic_state3_coverage_modulation_mode.into();
34941        self
34942    }
34943    #[inline]
34944    pub fn extended_dynamic_state3_coverage_modulation_table_enable(
34945        mut self,
34946        extended_dynamic_state3_coverage_modulation_table_enable: bool,
34947    ) -> Self {
34948        self.extended_dynamic_state3_coverage_modulation_table_enable =
34949            extended_dynamic_state3_coverage_modulation_table_enable.into();
34950        self
34951    }
34952    #[inline]
34953    pub fn extended_dynamic_state3_coverage_modulation_table(
34954        mut self,
34955        extended_dynamic_state3_coverage_modulation_table: bool,
34956    ) -> Self {
34957        self.extended_dynamic_state3_coverage_modulation_table =
34958            extended_dynamic_state3_coverage_modulation_table.into();
34959        self
34960    }
34961    #[inline]
34962    pub fn extended_dynamic_state3_coverage_reduction_mode(
34963        mut self,
34964        extended_dynamic_state3_coverage_reduction_mode: bool,
34965    ) -> Self {
34966        self.extended_dynamic_state3_coverage_reduction_mode =
34967            extended_dynamic_state3_coverage_reduction_mode.into();
34968        self
34969    }
34970    #[inline]
34971    pub fn extended_dynamic_state3_representative_fragment_test_enable(
34972        mut self,
34973        extended_dynamic_state3_representative_fragment_test_enable: bool,
34974    ) -> Self {
34975        self.extended_dynamic_state3_representative_fragment_test_enable =
34976            extended_dynamic_state3_representative_fragment_test_enable.into();
34977        self
34978    }
34979    #[inline]
34980    pub fn extended_dynamic_state3_shading_rate_image_enable(
34981        mut self,
34982        extended_dynamic_state3_shading_rate_image_enable: bool,
34983    ) -> Self {
34984        self.extended_dynamic_state3_shading_rate_image_enable =
34985            extended_dynamic_state3_shading_rate_image_enable.into();
34986        self
34987    }
34988}
34989#[repr(C)]
34990#[cfg_attr(feature = "debug", derive(Debug))]
34991#[derive(Copy, Clone)]
34992#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedDynamicState3PropertiesEXT.html>"]
34993#[must_use]
34994pub struct PhysicalDeviceExtendedDynamicState3PropertiesEXT<'a> {
34995    pub s_type: StructureType,
34996    pub p_next: *mut c_void,
34997    pub dynamic_primitive_topology_unrestricted: Bool32,
34998    pub _marker: PhantomData<&'a ()>,
34999}
35000unsafe impl Send for PhysicalDeviceExtendedDynamicState3PropertiesEXT<'_> {}
35001unsafe impl Sync for PhysicalDeviceExtendedDynamicState3PropertiesEXT<'_> {}
35002impl ::core::default::Default for PhysicalDeviceExtendedDynamicState3PropertiesEXT<'_> {
35003    #[inline]
35004    fn default() -> Self {
35005        Self {
35006            s_type: Self::STRUCTURE_TYPE,
35007            p_next: ::core::ptr::null_mut(),
35008            dynamic_primitive_topology_unrestricted: Bool32::default(),
35009            _marker: PhantomData,
35010        }
35011    }
35012}
35013unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedDynamicState3PropertiesEXT<'a> {
35014    const STRUCTURE_TYPE: StructureType =
35015        StructureType::PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_3_PROPERTIES_EXT;
35016}
35017unsafe impl ExtendsPhysicalDeviceProperties2
35018    for PhysicalDeviceExtendedDynamicState3PropertiesEXT<'_>
35019{
35020}
35021impl<'a> PhysicalDeviceExtendedDynamicState3PropertiesEXT<'a> {
35022    #[inline]
35023    pub fn dynamic_primitive_topology_unrestricted(
35024        mut self,
35025        dynamic_primitive_topology_unrestricted: bool,
35026    ) -> Self {
35027        self.dynamic_primitive_topology_unrestricted =
35028            dynamic_primitive_topology_unrestricted.into();
35029        self
35030    }
35031}
35032#[repr(C)]
35033#[cfg_attr(feature = "debug", derive(Debug))]
35034#[derive(Copy, Clone, Default)]
35035#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkColorBlendEquationEXT.html>"]
35036#[must_use]
35037pub struct ColorBlendEquationEXT {
35038    pub src_color_blend_factor: BlendFactor,
35039    pub dst_color_blend_factor: BlendFactor,
35040    pub color_blend_op: BlendOp,
35041    pub src_alpha_blend_factor: BlendFactor,
35042    pub dst_alpha_blend_factor: BlendFactor,
35043    pub alpha_blend_op: BlendOp,
35044}
35045impl ColorBlendEquationEXT {
35046    #[inline]
35047    pub fn src_color_blend_factor(mut self, src_color_blend_factor: BlendFactor) -> Self {
35048        self.src_color_blend_factor = src_color_blend_factor;
35049        self
35050    }
35051    #[inline]
35052    pub fn dst_color_blend_factor(mut self, dst_color_blend_factor: BlendFactor) -> Self {
35053        self.dst_color_blend_factor = dst_color_blend_factor;
35054        self
35055    }
35056    #[inline]
35057    pub fn color_blend_op(mut self, color_blend_op: BlendOp) -> Self {
35058        self.color_blend_op = color_blend_op;
35059        self
35060    }
35061    #[inline]
35062    pub fn src_alpha_blend_factor(mut self, src_alpha_blend_factor: BlendFactor) -> Self {
35063        self.src_alpha_blend_factor = src_alpha_blend_factor;
35064        self
35065    }
35066    #[inline]
35067    pub fn dst_alpha_blend_factor(mut self, dst_alpha_blend_factor: BlendFactor) -> Self {
35068        self.dst_alpha_blend_factor = dst_alpha_blend_factor;
35069        self
35070    }
35071    #[inline]
35072    pub fn alpha_blend_op(mut self, alpha_blend_op: BlendOp) -> Self {
35073        self.alpha_blend_op = alpha_blend_op;
35074        self
35075    }
35076}
35077#[repr(C)]
35078#[cfg_attr(feature = "debug", derive(Debug))]
35079#[derive(Copy, Clone, Default)]
35080#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkColorBlendAdvancedEXT.html>"]
35081#[must_use]
35082pub struct ColorBlendAdvancedEXT {
35083    pub advanced_blend_op: BlendOp,
35084    pub src_premultiplied: Bool32,
35085    pub dst_premultiplied: Bool32,
35086    pub blend_overlap: BlendOverlapEXT,
35087    pub clamp_results: Bool32,
35088}
35089impl ColorBlendAdvancedEXT {
35090    #[inline]
35091    pub fn advanced_blend_op(mut self, advanced_blend_op: BlendOp) -> Self {
35092        self.advanced_blend_op = advanced_blend_op;
35093        self
35094    }
35095    #[inline]
35096    pub fn src_premultiplied(mut self, src_premultiplied: bool) -> Self {
35097        self.src_premultiplied = src_premultiplied.into();
35098        self
35099    }
35100    #[inline]
35101    pub fn dst_premultiplied(mut self, dst_premultiplied: bool) -> Self {
35102        self.dst_premultiplied = dst_premultiplied.into();
35103        self
35104    }
35105    #[inline]
35106    pub fn blend_overlap(mut self, blend_overlap: BlendOverlapEXT) -> Self {
35107        self.blend_overlap = blend_overlap;
35108        self
35109    }
35110    #[inline]
35111    pub fn clamp_results(mut self, clamp_results: bool) -> Self {
35112        self.clamp_results = clamp_results.into();
35113        self
35114    }
35115}
35116#[repr(C)]
35117#[cfg_attr(feature = "debug", derive(Debug))]
35118#[derive(Copy, Clone)]
35119#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassTransformBeginInfoQCOM.html>"]
35120#[must_use]
35121pub struct RenderPassTransformBeginInfoQCOM<'a> {
35122    pub s_type: StructureType,
35123    pub p_next: *mut c_void,
35124    pub transform: SurfaceTransformFlagsKHR,
35125    pub _marker: PhantomData<&'a ()>,
35126}
35127unsafe impl Send for RenderPassTransformBeginInfoQCOM<'_> {}
35128unsafe impl Sync for RenderPassTransformBeginInfoQCOM<'_> {}
35129impl ::core::default::Default for RenderPassTransformBeginInfoQCOM<'_> {
35130    #[inline]
35131    fn default() -> Self {
35132        Self {
35133            s_type: Self::STRUCTURE_TYPE,
35134            p_next: ::core::ptr::null_mut(),
35135            transform: SurfaceTransformFlagsKHR::default(),
35136            _marker: PhantomData,
35137        }
35138    }
35139}
35140unsafe impl<'a> TaggedStructure for RenderPassTransformBeginInfoQCOM<'a> {
35141    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM;
35142}
35143unsafe impl ExtendsRenderPassBeginInfo for RenderPassTransformBeginInfoQCOM<'_> {}
35144impl<'a> RenderPassTransformBeginInfoQCOM<'a> {
35145    #[inline]
35146    pub fn transform(mut self, transform: SurfaceTransformFlagsKHR) -> Self {
35147        self.transform = transform;
35148        self
35149    }
35150}
35151#[repr(C)]
35152#[cfg_attr(feature = "debug", derive(Debug))]
35153#[derive(Copy, Clone)]
35154#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyCommandTransformInfoQCOM.html>"]
35155#[must_use]
35156pub struct CopyCommandTransformInfoQCOM<'a> {
35157    pub s_type: StructureType,
35158    pub p_next: *const c_void,
35159    pub transform: SurfaceTransformFlagsKHR,
35160    pub _marker: PhantomData<&'a ()>,
35161}
35162unsafe impl Send for CopyCommandTransformInfoQCOM<'_> {}
35163unsafe impl Sync for CopyCommandTransformInfoQCOM<'_> {}
35164impl ::core::default::Default for CopyCommandTransformInfoQCOM<'_> {
35165    #[inline]
35166    fn default() -> Self {
35167        Self {
35168            s_type: Self::STRUCTURE_TYPE,
35169            p_next: ::core::ptr::null(),
35170            transform: SurfaceTransformFlagsKHR::default(),
35171            _marker: PhantomData,
35172        }
35173    }
35174}
35175unsafe impl<'a> TaggedStructure for CopyCommandTransformInfoQCOM<'a> {
35176    const STRUCTURE_TYPE: StructureType = StructureType::COPY_COMMAND_TRANSFORM_INFO_QCOM;
35177}
35178unsafe impl ExtendsBufferImageCopy2 for CopyCommandTransformInfoQCOM<'_> {}
35179unsafe impl ExtendsImageBlit2 for CopyCommandTransformInfoQCOM<'_> {}
35180impl<'a> CopyCommandTransformInfoQCOM<'a> {
35181    #[inline]
35182    pub fn transform(mut self, transform: SurfaceTransformFlagsKHR) -> Self {
35183        self.transform = transform;
35184        self
35185    }
35186}
35187#[repr(C)]
35188#[cfg_attr(feature = "debug", derive(Debug))]
35189#[derive(Copy, Clone)]
35190#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferInheritanceRenderPassTransformInfoQCOM.html>"]
35191#[must_use]
35192pub struct CommandBufferInheritanceRenderPassTransformInfoQCOM<'a> {
35193    pub s_type: StructureType,
35194    pub p_next: *mut c_void,
35195    pub transform: SurfaceTransformFlagsKHR,
35196    pub render_area: Rect2D,
35197    pub _marker: PhantomData<&'a ()>,
35198}
35199unsafe impl Send for CommandBufferInheritanceRenderPassTransformInfoQCOM<'_> {}
35200unsafe impl Sync for CommandBufferInheritanceRenderPassTransformInfoQCOM<'_> {}
35201impl ::core::default::Default for CommandBufferInheritanceRenderPassTransformInfoQCOM<'_> {
35202    #[inline]
35203    fn default() -> Self {
35204        Self {
35205            s_type: Self::STRUCTURE_TYPE,
35206            p_next: ::core::ptr::null_mut(),
35207            transform: SurfaceTransformFlagsKHR::default(),
35208            render_area: Rect2D::default(),
35209            _marker: PhantomData,
35210        }
35211    }
35212}
35213unsafe impl<'a> TaggedStructure for CommandBufferInheritanceRenderPassTransformInfoQCOM<'a> {
35214    const STRUCTURE_TYPE: StructureType =
35215        StructureType::COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM;
35216}
35217unsafe impl ExtendsCommandBufferInheritanceInfo
35218    for CommandBufferInheritanceRenderPassTransformInfoQCOM<'_>
35219{
35220}
35221impl<'a> CommandBufferInheritanceRenderPassTransformInfoQCOM<'a> {
35222    #[inline]
35223    pub fn transform(mut self, transform: SurfaceTransformFlagsKHR) -> Self {
35224        self.transform = transform;
35225        self
35226    }
35227    #[inline]
35228    pub fn render_area(mut self, render_area: Rect2D) -> Self {
35229        self.render_area = render_area;
35230        self
35231    }
35232}
35233#[repr(C)]
35234#[cfg_attr(feature = "debug", derive(Debug))]
35235#[derive(Copy, Clone)]
35236#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDiagnosticsConfigFeaturesNV.html>"]
35237#[must_use]
35238pub struct PhysicalDeviceDiagnosticsConfigFeaturesNV<'a> {
35239    pub s_type: StructureType,
35240    pub p_next: *mut c_void,
35241    pub diagnostics_config: Bool32,
35242    pub _marker: PhantomData<&'a ()>,
35243}
35244unsafe impl Send for PhysicalDeviceDiagnosticsConfigFeaturesNV<'_> {}
35245unsafe impl Sync for PhysicalDeviceDiagnosticsConfigFeaturesNV<'_> {}
35246impl ::core::default::Default for PhysicalDeviceDiagnosticsConfigFeaturesNV<'_> {
35247    #[inline]
35248    fn default() -> Self {
35249        Self {
35250            s_type: Self::STRUCTURE_TYPE,
35251            p_next: ::core::ptr::null_mut(),
35252            diagnostics_config: Bool32::default(),
35253            _marker: PhantomData,
35254        }
35255    }
35256}
35257unsafe impl<'a> TaggedStructure for PhysicalDeviceDiagnosticsConfigFeaturesNV<'a> {
35258    const STRUCTURE_TYPE: StructureType =
35259        StructureType::PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV;
35260}
35261unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDiagnosticsConfigFeaturesNV<'_> {}
35262unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDiagnosticsConfigFeaturesNV<'_> {}
35263impl<'a> PhysicalDeviceDiagnosticsConfigFeaturesNV<'a> {
35264    #[inline]
35265    pub fn diagnostics_config(mut self, diagnostics_config: bool) -> Self {
35266        self.diagnostics_config = diagnostics_config.into();
35267        self
35268    }
35269}
35270#[repr(C)]
35271#[cfg_attr(feature = "debug", derive(Debug))]
35272#[derive(Copy, Clone)]
35273#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceDiagnosticsConfigCreateInfoNV.html>"]
35274#[must_use]
35275pub struct DeviceDiagnosticsConfigCreateInfoNV<'a> {
35276    pub s_type: StructureType,
35277    pub p_next: *const c_void,
35278    pub flags: DeviceDiagnosticsConfigFlagsNV,
35279    pub _marker: PhantomData<&'a ()>,
35280}
35281unsafe impl Send for DeviceDiagnosticsConfigCreateInfoNV<'_> {}
35282unsafe impl Sync for DeviceDiagnosticsConfigCreateInfoNV<'_> {}
35283impl ::core::default::Default for DeviceDiagnosticsConfigCreateInfoNV<'_> {
35284    #[inline]
35285    fn default() -> Self {
35286        Self {
35287            s_type: Self::STRUCTURE_TYPE,
35288            p_next: ::core::ptr::null(),
35289            flags: DeviceDiagnosticsConfigFlagsNV::default(),
35290            _marker: PhantomData,
35291        }
35292    }
35293}
35294unsafe impl<'a> TaggedStructure for DeviceDiagnosticsConfigCreateInfoNV<'a> {
35295    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV;
35296}
35297unsafe impl ExtendsDeviceCreateInfo for DeviceDiagnosticsConfigCreateInfoNV<'_> {}
35298impl<'a> DeviceDiagnosticsConfigCreateInfoNV<'a> {
35299    #[inline]
35300    pub fn flags(mut self, flags: DeviceDiagnosticsConfigFlagsNV) -> Self {
35301        self.flags = flags;
35302        self
35303    }
35304}
35305#[repr(C)]
35306#[cfg_attr(feature = "debug", derive(Debug))]
35307#[derive(Copy, Clone)]
35308#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures.html>"]
35309#[must_use]
35310pub struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'a> {
35311    pub s_type: StructureType,
35312    pub p_next: *mut c_void,
35313    pub shader_zero_initialize_workgroup_memory: Bool32,
35314    pub _marker: PhantomData<&'a ()>,
35315}
35316unsafe impl Send for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'_> {}
35317unsafe impl Sync for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'_> {}
35318impl ::core::default::Default for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'_> {
35319    #[inline]
35320    fn default() -> Self {
35321        Self {
35322            s_type: Self::STRUCTURE_TYPE,
35323            p_next: ::core::ptr::null_mut(),
35324            shader_zero_initialize_workgroup_memory: Bool32::default(),
35325            _marker: PhantomData,
35326        }
35327    }
35328}
35329unsafe impl<'a> TaggedStructure for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'a> {
35330    const STRUCTURE_TYPE: StructureType =
35331        StructureType::PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES;
35332}
35333unsafe impl ExtendsPhysicalDeviceFeatures2
35334    for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'_>
35335{
35336}
35337unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'_> {}
35338impl<'a> PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures<'a> {
35339    #[inline]
35340    pub fn shader_zero_initialize_workgroup_memory(
35341        mut self,
35342        shader_zero_initialize_workgroup_memory: bool,
35343    ) -> Self {
35344        self.shader_zero_initialize_workgroup_memory =
35345            shader_zero_initialize_workgroup_memory.into();
35346        self
35347    }
35348}
35349#[repr(C)]
35350#[cfg_attr(feature = "debug", derive(Debug))]
35351#[derive(Copy, Clone)]
35352#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.html>"]
35353#[must_use]
35354pub struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'a> {
35355    pub s_type: StructureType,
35356    pub p_next: *mut c_void,
35357    pub shader_subgroup_uniform_control_flow: Bool32,
35358    pub _marker: PhantomData<&'a ()>,
35359}
35360unsafe impl Send for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'_> {}
35361unsafe impl Sync for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'_> {}
35362impl ::core::default::Default for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'_> {
35363    #[inline]
35364    fn default() -> Self {
35365        Self {
35366            s_type: Self::STRUCTURE_TYPE,
35367            p_next: ::core::ptr::null_mut(),
35368            shader_subgroup_uniform_control_flow: Bool32::default(),
35369            _marker: PhantomData,
35370        }
35371    }
35372}
35373unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'a> {
35374    const STRUCTURE_TYPE: StructureType =
35375        StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR;
35376}
35377unsafe impl ExtendsPhysicalDeviceFeatures2
35378    for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'_>
35379{
35380}
35381unsafe impl ExtendsDeviceCreateInfo
35382    for PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'_>
35383{
35384}
35385impl<'a> PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR<'a> {
35386    #[inline]
35387    pub fn shader_subgroup_uniform_control_flow(
35388        mut self,
35389        shader_subgroup_uniform_control_flow: bool,
35390    ) -> Self {
35391        self.shader_subgroup_uniform_control_flow = shader_subgroup_uniform_control_flow.into();
35392        self
35393    }
35394}
35395#[repr(C)]
35396#[cfg_attr(feature = "debug", derive(Debug))]
35397#[derive(Copy, Clone)]
35398#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRobustness2FeaturesEXT.html>"]
35399#[must_use]
35400pub struct PhysicalDeviceRobustness2FeaturesEXT<'a> {
35401    pub s_type: StructureType,
35402    pub p_next: *mut c_void,
35403    pub robust_buffer_access2: Bool32,
35404    pub robust_image_access2: Bool32,
35405    pub null_descriptor: Bool32,
35406    pub _marker: PhantomData<&'a ()>,
35407}
35408unsafe impl Send for PhysicalDeviceRobustness2FeaturesEXT<'_> {}
35409unsafe impl Sync for PhysicalDeviceRobustness2FeaturesEXT<'_> {}
35410impl ::core::default::Default for PhysicalDeviceRobustness2FeaturesEXT<'_> {
35411    #[inline]
35412    fn default() -> Self {
35413        Self {
35414            s_type: Self::STRUCTURE_TYPE,
35415            p_next: ::core::ptr::null_mut(),
35416            robust_buffer_access2: Bool32::default(),
35417            robust_image_access2: Bool32::default(),
35418            null_descriptor: Bool32::default(),
35419            _marker: PhantomData,
35420        }
35421    }
35422}
35423unsafe impl<'a> TaggedStructure for PhysicalDeviceRobustness2FeaturesEXT<'a> {
35424    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT;
35425}
35426unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRobustness2FeaturesEXT<'_> {}
35427unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRobustness2FeaturesEXT<'_> {}
35428impl<'a> PhysicalDeviceRobustness2FeaturesEXT<'a> {
35429    #[inline]
35430    pub fn robust_buffer_access2(mut self, robust_buffer_access2: bool) -> Self {
35431        self.robust_buffer_access2 = robust_buffer_access2.into();
35432        self
35433    }
35434    #[inline]
35435    pub fn robust_image_access2(mut self, robust_image_access2: bool) -> Self {
35436        self.robust_image_access2 = robust_image_access2.into();
35437        self
35438    }
35439    #[inline]
35440    pub fn null_descriptor(mut self, null_descriptor: bool) -> Self {
35441        self.null_descriptor = null_descriptor.into();
35442        self
35443    }
35444}
35445#[repr(C)]
35446#[cfg_attr(feature = "debug", derive(Debug))]
35447#[derive(Copy, Clone)]
35448#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRobustness2PropertiesEXT.html>"]
35449#[must_use]
35450pub struct PhysicalDeviceRobustness2PropertiesEXT<'a> {
35451    pub s_type: StructureType,
35452    pub p_next: *mut c_void,
35453    pub robust_storage_buffer_access_size_alignment: DeviceSize,
35454    pub robust_uniform_buffer_access_size_alignment: DeviceSize,
35455    pub _marker: PhantomData<&'a ()>,
35456}
35457unsafe impl Send for PhysicalDeviceRobustness2PropertiesEXT<'_> {}
35458unsafe impl Sync for PhysicalDeviceRobustness2PropertiesEXT<'_> {}
35459impl ::core::default::Default for PhysicalDeviceRobustness2PropertiesEXT<'_> {
35460    #[inline]
35461    fn default() -> Self {
35462        Self {
35463            s_type: Self::STRUCTURE_TYPE,
35464            p_next: ::core::ptr::null_mut(),
35465            robust_storage_buffer_access_size_alignment: DeviceSize::default(),
35466            robust_uniform_buffer_access_size_alignment: DeviceSize::default(),
35467            _marker: PhantomData,
35468        }
35469    }
35470}
35471unsafe impl<'a> TaggedStructure for PhysicalDeviceRobustness2PropertiesEXT<'a> {
35472    const STRUCTURE_TYPE: StructureType =
35473        StructureType::PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT;
35474}
35475unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceRobustness2PropertiesEXT<'_> {}
35476impl<'a> PhysicalDeviceRobustness2PropertiesEXT<'a> {
35477    #[inline]
35478    pub fn robust_storage_buffer_access_size_alignment(
35479        mut self,
35480        robust_storage_buffer_access_size_alignment: DeviceSize,
35481    ) -> Self {
35482        self.robust_storage_buffer_access_size_alignment =
35483            robust_storage_buffer_access_size_alignment;
35484        self
35485    }
35486    #[inline]
35487    pub fn robust_uniform_buffer_access_size_alignment(
35488        mut self,
35489        robust_uniform_buffer_access_size_alignment: DeviceSize,
35490    ) -> Self {
35491        self.robust_uniform_buffer_access_size_alignment =
35492            robust_uniform_buffer_access_size_alignment;
35493        self
35494    }
35495}
35496#[repr(C)]
35497#[cfg_attr(feature = "debug", derive(Debug))]
35498#[derive(Copy, Clone)]
35499#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageRobustnessFeatures.html>"]
35500#[must_use]
35501pub struct PhysicalDeviceImageRobustnessFeatures<'a> {
35502    pub s_type: StructureType,
35503    pub p_next: *mut c_void,
35504    pub robust_image_access: Bool32,
35505    pub _marker: PhantomData<&'a ()>,
35506}
35507unsafe impl Send for PhysicalDeviceImageRobustnessFeatures<'_> {}
35508unsafe impl Sync for PhysicalDeviceImageRobustnessFeatures<'_> {}
35509impl ::core::default::Default for PhysicalDeviceImageRobustnessFeatures<'_> {
35510    #[inline]
35511    fn default() -> Self {
35512        Self {
35513            s_type: Self::STRUCTURE_TYPE,
35514            p_next: ::core::ptr::null_mut(),
35515            robust_image_access: Bool32::default(),
35516            _marker: PhantomData,
35517        }
35518    }
35519}
35520unsafe impl<'a> TaggedStructure for PhysicalDeviceImageRobustnessFeatures<'a> {
35521    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES;
35522}
35523unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImageRobustnessFeatures<'_> {}
35524unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageRobustnessFeatures<'_> {}
35525impl<'a> PhysicalDeviceImageRobustnessFeatures<'a> {
35526    #[inline]
35527    pub fn robust_image_access(mut self, robust_image_access: bool) -> Self {
35528        self.robust_image_access = robust_image_access.into();
35529        self
35530    }
35531}
35532#[repr(C)]
35533#[cfg_attr(feature = "debug", derive(Debug))]
35534#[derive(Copy, Clone)]
35535#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.html>"]
35536#[must_use]
35537pub struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'a> {
35538    pub s_type: StructureType,
35539    pub p_next: *mut c_void,
35540    pub workgroup_memory_explicit_layout: Bool32,
35541    pub workgroup_memory_explicit_layout_scalar_block_layout: Bool32,
35542    pub workgroup_memory_explicit_layout8_bit_access: Bool32,
35543    pub workgroup_memory_explicit_layout16_bit_access: Bool32,
35544    pub _marker: PhantomData<&'a ()>,
35545}
35546unsafe impl Send for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'_> {}
35547unsafe impl Sync for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'_> {}
35548impl ::core::default::Default for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'_> {
35549    #[inline]
35550    fn default() -> Self {
35551        Self {
35552            s_type: Self::STRUCTURE_TYPE,
35553            p_next: ::core::ptr::null_mut(),
35554            workgroup_memory_explicit_layout: Bool32::default(),
35555            workgroup_memory_explicit_layout_scalar_block_layout: Bool32::default(),
35556            workgroup_memory_explicit_layout8_bit_access: Bool32::default(),
35557            workgroup_memory_explicit_layout16_bit_access: Bool32::default(),
35558            _marker: PhantomData,
35559        }
35560    }
35561}
35562unsafe impl<'a> TaggedStructure for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'a> {
35563    const STRUCTURE_TYPE: StructureType =
35564        StructureType::PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR;
35565}
35566unsafe impl ExtendsPhysicalDeviceFeatures2
35567    for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'_>
35568{
35569}
35570unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'_> {}
35571impl<'a> PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR<'a> {
35572    #[inline]
35573    pub fn workgroup_memory_explicit_layout(
35574        mut self,
35575        workgroup_memory_explicit_layout: bool,
35576    ) -> Self {
35577        self.workgroup_memory_explicit_layout = workgroup_memory_explicit_layout.into();
35578        self
35579    }
35580    #[inline]
35581    pub fn workgroup_memory_explicit_layout_scalar_block_layout(
35582        mut self,
35583        workgroup_memory_explicit_layout_scalar_block_layout: bool,
35584    ) -> Self {
35585        self.workgroup_memory_explicit_layout_scalar_block_layout =
35586            workgroup_memory_explicit_layout_scalar_block_layout.into();
35587        self
35588    }
35589    #[inline]
35590    pub fn workgroup_memory_explicit_layout8_bit_access(
35591        mut self,
35592        workgroup_memory_explicit_layout8_bit_access: bool,
35593    ) -> Self {
35594        self.workgroup_memory_explicit_layout8_bit_access =
35595            workgroup_memory_explicit_layout8_bit_access.into();
35596        self
35597    }
35598    #[inline]
35599    pub fn workgroup_memory_explicit_layout16_bit_access(
35600        mut self,
35601        workgroup_memory_explicit_layout16_bit_access: bool,
35602    ) -> Self {
35603        self.workgroup_memory_explicit_layout16_bit_access =
35604            workgroup_memory_explicit_layout16_bit_access.into();
35605        self
35606    }
35607}
35608#[repr(C)]
35609#[cfg_attr(feature = "debug", derive(Debug))]
35610#[derive(Copy, Clone)]
35611#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePortabilitySubsetFeaturesKHR.html>"]
35612#[must_use]
35613pub struct PhysicalDevicePortabilitySubsetFeaturesKHR<'a> {
35614    pub s_type: StructureType,
35615    pub p_next: *mut c_void,
35616    pub constant_alpha_color_blend_factors: Bool32,
35617    pub events: Bool32,
35618    pub image_view_format_reinterpretation: Bool32,
35619    pub image_view_format_swizzle: Bool32,
35620    pub image_view2_d_on3_d_image: Bool32,
35621    pub multisample_array_image: Bool32,
35622    pub mutable_comparison_samplers: Bool32,
35623    pub point_polygons: Bool32,
35624    pub sampler_mip_lod_bias: Bool32,
35625    pub separate_stencil_mask_ref: Bool32,
35626    pub shader_sample_rate_interpolation_functions: Bool32,
35627    pub tessellation_isolines: Bool32,
35628    pub tessellation_point_mode: Bool32,
35629    pub triangle_fans: Bool32,
35630    pub vertex_attribute_access_beyond_stride: Bool32,
35631    pub _marker: PhantomData<&'a ()>,
35632}
35633unsafe impl Send for PhysicalDevicePortabilitySubsetFeaturesKHR<'_> {}
35634unsafe impl Sync for PhysicalDevicePortabilitySubsetFeaturesKHR<'_> {}
35635impl ::core::default::Default for PhysicalDevicePortabilitySubsetFeaturesKHR<'_> {
35636    #[inline]
35637    fn default() -> Self {
35638        Self {
35639            s_type: Self::STRUCTURE_TYPE,
35640            p_next: ::core::ptr::null_mut(),
35641            constant_alpha_color_blend_factors: Bool32::default(),
35642            events: Bool32::default(),
35643            image_view_format_reinterpretation: Bool32::default(),
35644            image_view_format_swizzle: Bool32::default(),
35645            image_view2_d_on3_d_image: Bool32::default(),
35646            multisample_array_image: Bool32::default(),
35647            mutable_comparison_samplers: Bool32::default(),
35648            point_polygons: Bool32::default(),
35649            sampler_mip_lod_bias: Bool32::default(),
35650            separate_stencil_mask_ref: Bool32::default(),
35651            shader_sample_rate_interpolation_functions: Bool32::default(),
35652            tessellation_isolines: Bool32::default(),
35653            tessellation_point_mode: Bool32::default(),
35654            triangle_fans: Bool32::default(),
35655            vertex_attribute_access_beyond_stride: Bool32::default(),
35656            _marker: PhantomData,
35657        }
35658    }
35659}
35660unsafe impl<'a> TaggedStructure for PhysicalDevicePortabilitySubsetFeaturesKHR<'a> {
35661    const STRUCTURE_TYPE: StructureType =
35662        StructureType::PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR;
35663}
35664unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePortabilitySubsetFeaturesKHR<'_> {}
35665unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePortabilitySubsetFeaturesKHR<'_> {}
35666impl<'a> PhysicalDevicePortabilitySubsetFeaturesKHR<'a> {
35667    #[inline]
35668    pub fn constant_alpha_color_blend_factors(
35669        mut self,
35670        constant_alpha_color_blend_factors: bool,
35671    ) -> Self {
35672        self.constant_alpha_color_blend_factors = constant_alpha_color_blend_factors.into();
35673        self
35674    }
35675    #[inline]
35676    pub fn events(mut self, events: bool) -> Self {
35677        self.events = events.into();
35678        self
35679    }
35680    #[inline]
35681    pub fn image_view_format_reinterpretation(
35682        mut self,
35683        image_view_format_reinterpretation: bool,
35684    ) -> Self {
35685        self.image_view_format_reinterpretation = image_view_format_reinterpretation.into();
35686        self
35687    }
35688    #[inline]
35689    pub fn image_view_format_swizzle(mut self, image_view_format_swizzle: bool) -> Self {
35690        self.image_view_format_swizzle = image_view_format_swizzle.into();
35691        self
35692    }
35693    #[inline]
35694    pub fn image_view2_d_on3_d_image(mut self, image_view2_d_on3_d_image: bool) -> Self {
35695        self.image_view2_d_on3_d_image = image_view2_d_on3_d_image.into();
35696        self
35697    }
35698    #[inline]
35699    pub fn multisample_array_image(mut self, multisample_array_image: bool) -> Self {
35700        self.multisample_array_image = multisample_array_image.into();
35701        self
35702    }
35703    #[inline]
35704    pub fn mutable_comparison_samplers(mut self, mutable_comparison_samplers: bool) -> Self {
35705        self.mutable_comparison_samplers = mutable_comparison_samplers.into();
35706        self
35707    }
35708    #[inline]
35709    pub fn point_polygons(mut self, point_polygons: bool) -> Self {
35710        self.point_polygons = point_polygons.into();
35711        self
35712    }
35713    #[inline]
35714    pub fn sampler_mip_lod_bias(mut self, sampler_mip_lod_bias: bool) -> Self {
35715        self.sampler_mip_lod_bias = sampler_mip_lod_bias.into();
35716        self
35717    }
35718    #[inline]
35719    pub fn separate_stencil_mask_ref(mut self, separate_stencil_mask_ref: bool) -> Self {
35720        self.separate_stencil_mask_ref = separate_stencil_mask_ref.into();
35721        self
35722    }
35723    #[inline]
35724    pub fn shader_sample_rate_interpolation_functions(
35725        mut self,
35726        shader_sample_rate_interpolation_functions: bool,
35727    ) -> Self {
35728        self.shader_sample_rate_interpolation_functions =
35729            shader_sample_rate_interpolation_functions.into();
35730        self
35731    }
35732    #[inline]
35733    pub fn tessellation_isolines(mut self, tessellation_isolines: bool) -> Self {
35734        self.tessellation_isolines = tessellation_isolines.into();
35735        self
35736    }
35737    #[inline]
35738    pub fn tessellation_point_mode(mut self, tessellation_point_mode: bool) -> Self {
35739        self.tessellation_point_mode = tessellation_point_mode.into();
35740        self
35741    }
35742    #[inline]
35743    pub fn triangle_fans(mut self, triangle_fans: bool) -> Self {
35744        self.triangle_fans = triangle_fans.into();
35745        self
35746    }
35747    #[inline]
35748    pub fn vertex_attribute_access_beyond_stride(
35749        mut self,
35750        vertex_attribute_access_beyond_stride: bool,
35751    ) -> Self {
35752        self.vertex_attribute_access_beyond_stride = vertex_attribute_access_beyond_stride.into();
35753        self
35754    }
35755}
35756#[repr(C)]
35757#[cfg_attr(feature = "debug", derive(Debug))]
35758#[derive(Copy, Clone)]
35759#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePortabilitySubsetPropertiesKHR.html>"]
35760#[must_use]
35761pub struct PhysicalDevicePortabilitySubsetPropertiesKHR<'a> {
35762    pub s_type: StructureType,
35763    pub p_next: *mut c_void,
35764    pub min_vertex_input_binding_stride_alignment: u32,
35765    pub _marker: PhantomData<&'a ()>,
35766}
35767unsafe impl Send for PhysicalDevicePortabilitySubsetPropertiesKHR<'_> {}
35768unsafe impl Sync for PhysicalDevicePortabilitySubsetPropertiesKHR<'_> {}
35769impl ::core::default::Default for PhysicalDevicePortabilitySubsetPropertiesKHR<'_> {
35770    #[inline]
35771    fn default() -> Self {
35772        Self {
35773            s_type: Self::STRUCTURE_TYPE,
35774            p_next: ::core::ptr::null_mut(),
35775            min_vertex_input_binding_stride_alignment: u32::default(),
35776            _marker: PhantomData,
35777        }
35778    }
35779}
35780unsafe impl<'a> TaggedStructure for PhysicalDevicePortabilitySubsetPropertiesKHR<'a> {
35781    const STRUCTURE_TYPE: StructureType =
35782        StructureType::PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR;
35783}
35784unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePortabilitySubsetPropertiesKHR<'_> {}
35785impl<'a> PhysicalDevicePortabilitySubsetPropertiesKHR<'a> {
35786    #[inline]
35787    pub fn min_vertex_input_binding_stride_alignment(
35788        mut self,
35789        min_vertex_input_binding_stride_alignment: u32,
35790    ) -> Self {
35791        self.min_vertex_input_binding_stride_alignment = min_vertex_input_binding_stride_alignment;
35792        self
35793    }
35794}
35795#[repr(C)]
35796#[cfg_attr(feature = "debug", derive(Debug))]
35797#[derive(Copy, Clone)]
35798#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevice4444FormatsFeaturesEXT.html>"]
35799#[must_use]
35800pub struct PhysicalDevice4444FormatsFeaturesEXT<'a> {
35801    pub s_type: StructureType,
35802    pub p_next: *mut c_void,
35803    pub format_a4r4g4b4: Bool32,
35804    pub format_a4b4g4r4: Bool32,
35805    pub _marker: PhantomData<&'a ()>,
35806}
35807unsafe impl Send for PhysicalDevice4444FormatsFeaturesEXT<'_> {}
35808unsafe impl Sync for PhysicalDevice4444FormatsFeaturesEXT<'_> {}
35809impl ::core::default::Default for PhysicalDevice4444FormatsFeaturesEXT<'_> {
35810    #[inline]
35811    fn default() -> Self {
35812        Self {
35813            s_type: Self::STRUCTURE_TYPE,
35814            p_next: ::core::ptr::null_mut(),
35815            format_a4r4g4b4: Bool32::default(),
35816            format_a4b4g4r4: Bool32::default(),
35817            _marker: PhantomData,
35818        }
35819    }
35820}
35821unsafe impl<'a> TaggedStructure for PhysicalDevice4444FormatsFeaturesEXT<'a> {
35822    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT;
35823}
35824unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevice4444FormatsFeaturesEXT<'_> {}
35825unsafe impl ExtendsDeviceCreateInfo for PhysicalDevice4444FormatsFeaturesEXT<'_> {}
35826impl<'a> PhysicalDevice4444FormatsFeaturesEXT<'a> {
35827    #[inline]
35828    pub fn format_a4r4g4b4(mut self, format_a4r4g4b4: bool) -> Self {
35829        self.format_a4r4g4b4 = format_a4r4g4b4.into();
35830        self
35831    }
35832    #[inline]
35833    pub fn format_a4b4g4r4(mut self, format_a4b4g4r4: bool) -> Self {
35834        self.format_a4b4g4r4 = format_a4b4g4r4.into();
35835        self
35836    }
35837}
35838#[repr(C)]
35839#[cfg_attr(feature = "debug", derive(Debug))]
35840#[derive(Copy, Clone)]
35841#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubpassShadingFeaturesHUAWEI.html>"]
35842#[must_use]
35843pub struct PhysicalDeviceSubpassShadingFeaturesHUAWEI<'a> {
35844    pub s_type: StructureType,
35845    pub p_next: *mut c_void,
35846    pub subpass_shading: Bool32,
35847    pub _marker: PhantomData<&'a ()>,
35848}
35849unsafe impl Send for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'_> {}
35850unsafe impl Sync for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'_> {}
35851impl ::core::default::Default for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'_> {
35852    #[inline]
35853    fn default() -> Self {
35854        Self {
35855            s_type: Self::STRUCTURE_TYPE,
35856            p_next: ::core::ptr::null_mut(),
35857            subpass_shading: Bool32::default(),
35858            _marker: PhantomData,
35859        }
35860    }
35861}
35862unsafe impl<'a> TaggedStructure for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'a> {
35863    const STRUCTURE_TYPE: StructureType =
35864        StructureType::PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI;
35865}
35866unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'_> {}
35867unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSubpassShadingFeaturesHUAWEI<'_> {}
35868impl<'a> PhysicalDeviceSubpassShadingFeaturesHUAWEI<'a> {
35869    #[inline]
35870    pub fn subpass_shading(mut self, subpass_shading: bool) -> Self {
35871        self.subpass_shading = subpass_shading.into();
35872        self
35873    }
35874}
35875#[repr(C)]
35876#[cfg_attr(feature = "debug", derive(Debug))]
35877#[derive(Copy, Clone)]
35878#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceClusterCullingShaderFeaturesHUAWEI.html>"]
35879#[must_use]
35880pub struct PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'a> {
35881    pub s_type: StructureType,
35882    pub p_next: *mut c_void,
35883    pub clusterculling_shader: Bool32,
35884    pub multiview_cluster_culling_shader: Bool32,
35885    pub _marker: PhantomData<&'a ()>,
35886}
35887unsafe impl Send for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'_> {}
35888unsafe impl Sync for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'_> {}
35889impl ::core::default::Default for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'_> {
35890    #[inline]
35891    fn default() -> Self {
35892        Self {
35893            s_type: Self::STRUCTURE_TYPE,
35894            p_next: ::core::ptr::null_mut(),
35895            clusterculling_shader: Bool32::default(),
35896            multiview_cluster_culling_shader: Bool32::default(),
35897            _marker: PhantomData,
35898        }
35899    }
35900}
35901unsafe impl<'a> TaggedStructure for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'a> {
35902    const STRUCTURE_TYPE: StructureType =
35903        StructureType::PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_FEATURES_HUAWEI;
35904}
35905unsafe impl ExtendsPhysicalDeviceFeatures2
35906    for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'_>
35907{
35908}
35909unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'_> {}
35910pub unsafe trait ExtendsPhysicalDeviceClusterCullingShaderFeaturesHUAWEI {}
35911impl<'a> PhysicalDeviceClusterCullingShaderFeaturesHUAWEI<'a> {
35912    #[inline]
35913    pub fn clusterculling_shader(mut self, clusterculling_shader: bool) -> Self {
35914        self.clusterculling_shader = clusterculling_shader.into();
35915        self
35916    }
35917    #[inline]
35918    pub fn multiview_cluster_culling_shader(
35919        mut self,
35920        multiview_cluster_culling_shader: bool,
35921    ) -> Self {
35922        self.multiview_cluster_culling_shader = multiview_cluster_culling_shader.into();
35923        self
35924    }
35925    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
35926    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
35927    #[doc = r" valid extension structs can be pushed into the chain."]
35928    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
35929    #[doc = r" chain will look like `A -> D -> B -> C`."]
35930    pub fn push_next<T: ExtendsPhysicalDeviceClusterCullingShaderFeaturesHUAWEI + ?Sized>(
35931        mut self,
35932        next: &'a mut T,
35933    ) -> Self {
35934        unsafe {
35935            let next_ptr = <*mut T>::cast(next);
35936            let last_next = ptr_chain_iter(next).last().unwrap();
35937            (*last_next).p_next = self.p_next as _;
35938            self.p_next = next_ptr;
35939        }
35940        self
35941    }
35942}
35943#[repr(C)]
35944#[cfg_attr(feature = "debug", derive(Debug))]
35945#[derive(Copy, Clone)]
35946#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI.html>"]
35947#[must_use]
35948pub struct PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'a> {
35949    pub s_type: StructureType,
35950    pub p_next: *mut c_void,
35951    pub cluster_shading_rate: Bool32,
35952    pub _marker: PhantomData<&'a ()>,
35953}
35954unsafe impl Send for PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'_> {}
35955unsafe impl Sync for PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'_> {}
35956impl ::core::default::Default for PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'_> {
35957    #[inline]
35958    fn default() -> Self {
35959        Self {
35960            s_type: Self::STRUCTURE_TYPE,
35961            p_next: ::core::ptr::null_mut(),
35962            cluster_shading_rate: Bool32::default(),
35963            _marker: PhantomData,
35964        }
35965    }
35966}
35967unsafe impl<'a> TaggedStructure for PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'a> {
35968    const STRUCTURE_TYPE: StructureType =
35969        StructureType::PHYSICAL_DEVICE_CLUSTER_CULLING_SHADER_VRS_FEATURES_HUAWEI;
35970}
35971unsafe impl ExtendsPhysicalDeviceClusterCullingShaderFeaturesHUAWEI
35972    for PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'_>
35973{
35974}
35975impl<'a> PhysicalDeviceClusterCullingShaderVrsFeaturesHUAWEI<'a> {
35976    #[inline]
35977    pub fn cluster_shading_rate(mut self, cluster_shading_rate: bool) -> Self {
35978        self.cluster_shading_rate = cluster_shading_rate.into();
35979        self
35980    }
35981}
35982#[repr(C)]
35983#[cfg_attr(feature = "debug", derive(Debug))]
35984#[derive(Copy, Clone)]
35985#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCopy2.html>"]
35986#[must_use]
35987pub struct BufferCopy2<'a> {
35988    pub s_type: StructureType,
35989    pub p_next: *const c_void,
35990    pub src_offset: DeviceSize,
35991    pub dst_offset: DeviceSize,
35992    pub size: DeviceSize,
35993    pub _marker: PhantomData<&'a ()>,
35994}
35995unsafe impl Send for BufferCopy2<'_> {}
35996unsafe impl Sync for BufferCopy2<'_> {}
35997impl ::core::default::Default for BufferCopy2<'_> {
35998    #[inline]
35999    fn default() -> Self {
36000        Self {
36001            s_type: Self::STRUCTURE_TYPE,
36002            p_next: ::core::ptr::null(),
36003            src_offset: DeviceSize::default(),
36004            dst_offset: DeviceSize::default(),
36005            size: DeviceSize::default(),
36006            _marker: PhantomData,
36007        }
36008    }
36009}
36010unsafe impl<'a> TaggedStructure for BufferCopy2<'a> {
36011    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_COPY_2;
36012}
36013impl<'a> BufferCopy2<'a> {
36014    #[inline]
36015    pub fn src_offset(mut self, src_offset: DeviceSize) -> Self {
36016        self.src_offset = src_offset;
36017        self
36018    }
36019    #[inline]
36020    pub fn dst_offset(mut self, dst_offset: DeviceSize) -> Self {
36021        self.dst_offset = dst_offset;
36022        self
36023    }
36024    #[inline]
36025    pub fn size(mut self, size: DeviceSize) -> Self {
36026        self.size = size;
36027        self
36028    }
36029}
36030#[repr(C)]
36031#[cfg_attr(feature = "debug", derive(Debug))]
36032#[derive(Copy, Clone)]
36033#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCopy2.html>"]
36034#[must_use]
36035pub struct ImageCopy2<'a> {
36036    pub s_type: StructureType,
36037    pub p_next: *const c_void,
36038    pub src_subresource: ImageSubresourceLayers,
36039    pub src_offset: Offset3D,
36040    pub dst_subresource: ImageSubresourceLayers,
36041    pub dst_offset: Offset3D,
36042    pub extent: Extent3D,
36043    pub _marker: PhantomData<&'a ()>,
36044}
36045unsafe impl Send for ImageCopy2<'_> {}
36046unsafe impl Sync for ImageCopy2<'_> {}
36047impl ::core::default::Default for ImageCopy2<'_> {
36048    #[inline]
36049    fn default() -> Self {
36050        Self {
36051            s_type: Self::STRUCTURE_TYPE,
36052            p_next: ::core::ptr::null(),
36053            src_subresource: ImageSubresourceLayers::default(),
36054            src_offset: Offset3D::default(),
36055            dst_subresource: ImageSubresourceLayers::default(),
36056            dst_offset: Offset3D::default(),
36057            extent: Extent3D::default(),
36058            _marker: PhantomData,
36059        }
36060    }
36061}
36062unsafe impl<'a> TaggedStructure for ImageCopy2<'a> {
36063    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_COPY_2;
36064}
36065impl<'a> ImageCopy2<'a> {
36066    #[inline]
36067    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
36068        self.src_subresource = src_subresource;
36069        self
36070    }
36071    #[inline]
36072    pub fn src_offset(mut self, src_offset: Offset3D) -> Self {
36073        self.src_offset = src_offset;
36074        self
36075    }
36076    #[inline]
36077    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
36078        self.dst_subresource = dst_subresource;
36079        self
36080    }
36081    #[inline]
36082    pub fn dst_offset(mut self, dst_offset: Offset3D) -> Self {
36083        self.dst_offset = dst_offset;
36084        self
36085    }
36086    #[inline]
36087    pub fn extent(mut self, extent: Extent3D) -> Self {
36088        self.extent = extent;
36089        self
36090    }
36091}
36092#[repr(C)]
36093#[cfg_attr(feature = "debug", derive(Debug))]
36094#[derive(Copy, Clone)]
36095#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageBlit2.html>"]
36096#[must_use]
36097pub struct ImageBlit2<'a> {
36098    pub s_type: StructureType,
36099    pub p_next: *const c_void,
36100    pub src_subresource: ImageSubresourceLayers,
36101    pub src_offsets: [Offset3D; 2],
36102    pub dst_subresource: ImageSubresourceLayers,
36103    pub dst_offsets: [Offset3D; 2],
36104    pub _marker: PhantomData<&'a ()>,
36105}
36106unsafe impl Send for ImageBlit2<'_> {}
36107unsafe impl Sync for ImageBlit2<'_> {}
36108impl ::core::default::Default for ImageBlit2<'_> {
36109    #[inline]
36110    fn default() -> Self {
36111        Self {
36112            s_type: Self::STRUCTURE_TYPE,
36113            p_next: ::core::ptr::null(),
36114            src_subresource: ImageSubresourceLayers::default(),
36115            src_offsets: unsafe { ::core::mem::zeroed() },
36116            dst_subresource: ImageSubresourceLayers::default(),
36117            dst_offsets: unsafe { ::core::mem::zeroed() },
36118            _marker: PhantomData,
36119        }
36120    }
36121}
36122unsafe impl<'a> TaggedStructure for ImageBlit2<'a> {
36123    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_BLIT_2;
36124}
36125pub unsafe trait ExtendsImageBlit2 {}
36126impl<'a> ImageBlit2<'a> {
36127    #[inline]
36128    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
36129        self.src_subresource = src_subresource;
36130        self
36131    }
36132    #[inline]
36133    pub fn src_offsets(mut self, src_offsets: [Offset3D; 2]) -> Self {
36134        self.src_offsets = src_offsets;
36135        self
36136    }
36137    #[inline]
36138    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
36139        self.dst_subresource = dst_subresource;
36140        self
36141    }
36142    #[inline]
36143    pub fn dst_offsets(mut self, dst_offsets: [Offset3D; 2]) -> Self {
36144        self.dst_offsets = dst_offsets;
36145        self
36146    }
36147    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
36148    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
36149    #[doc = r" valid extension structs can be pushed into the chain."]
36150    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
36151    #[doc = r" chain will look like `A -> D -> B -> C`."]
36152    pub fn push_next<T: ExtendsImageBlit2 + ?Sized>(mut self, next: &'a mut T) -> Self {
36153        unsafe {
36154            let next_ptr = <*const T>::cast(next);
36155            let last_next = ptr_chain_iter(next).last().unwrap();
36156            (*last_next).p_next = self.p_next as _;
36157            self.p_next = next_ptr;
36158        }
36159        self
36160    }
36161}
36162#[repr(C)]
36163#[cfg_attr(feature = "debug", derive(Debug))]
36164#[derive(Copy, Clone)]
36165#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferImageCopy2.html>"]
36166#[must_use]
36167pub struct BufferImageCopy2<'a> {
36168    pub s_type: StructureType,
36169    pub p_next: *const c_void,
36170    pub buffer_offset: DeviceSize,
36171    pub buffer_row_length: u32,
36172    pub buffer_image_height: u32,
36173    pub image_subresource: ImageSubresourceLayers,
36174    pub image_offset: Offset3D,
36175    pub image_extent: Extent3D,
36176    pub _marker: PhantomData<&'a ()>,
36177}
36178unsafe impl Send for BufferImageCopy2<'_> {}
36179unsafe impl Sync for BufferImageCopy2<'_> {}
36180impl ::core::default::Default for BufferImageCopy2<'_> {
36181    #[inline]
36182    fn default() -> Self {
36183        Self {
36184            s_type: Self::STRUCTURE_TYPE,
36185            p_next: ::core::ptr::null(),
36186            buffer_offset: DeviceSize::default(),
36187            buffer_row_length: u32::default(),
36188            buffer_image_height: u32::default(),
36189            image_subresource: ImageSubresourceLayers::default(),
36190            image_offset: Offset3D::default(),
36191            image_extent: Extent3D::default(),
36192            _marker: PhantomData,
36193        }
36194    }
36195}
36196unsafe impl<'a> TaggedStructure for BufferImageCopy2<'a> {
36197    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_IMAGE_COPY_2;
36198}
36199pub unsafe trait ExtendsBufferImageCopy2 {}
36200impl<'a> BufferImageCopy2<'a> {
36201    #[inline]
36202    pub fn buffer_offset(mut self, buffer_offset: DeviceSize) -> Self {
36203        self.buffer_offset = buffer_offset;
36204        self
36205    }
36206    #[inline]
36207    pub fn buffer_row_length(mut self, buffer_row_length: u32) -> Self {
36208        self.buffer_row_length = buffer_row_length;
36209        self
36210    }
36211    #[inline]
36212    pub fn buffer_image_height(mut self, buffer_image_height: u32) -> Self {
36213        self.buffer_image_height = buffer_image_height;
36214        self
36215    }
36216    #[inline]
36217    pub fn image_subresource(mut self, image_subresource: ImageSubresourceLayers) -> Self {
36218        self.image_subresource = image_subresource;
36219        self
36220    }
36221    #[inline]
36222    pub fn image_offset(mut self, image_offset: Offset3D) -> Self {
36223        self.image_offset = image_offset;
36224        self
36225    }
36226    #[inline]
36227    pub fn image_extent(mut self, image_extent: Extent3D) -> Self {
36228        self.image_extent = image_extent;
36229        self
36230    }
36231    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
36232    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
36233    #[doc = r" valid extension structs can be pushed into the chain."]
36234    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
36235    #[doc = r" chain will look like `A -> D -> B -> C`."]
36236    pub fn push_next<T: ExtendsBufferImageCopy2 + ?Sized>(mut self, next: &'a mut T) -> Self {
36237        unsafe {
36238            let next_ptr = <*const T>::cast(next);
36239            let last_next = ptr_chain_iter(next).last().unwrap();
36240            (*last_next).p_next = self.p_next as _;
36241            self.p_next = next_ptr;
36242        }
36243        self
36244    }
36245}
36246#[repr(C)]
36247#[cfg_attr(feature = "debug", derive(Debug))]
36248#[derive(Copy, Clone)]
36249#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageResolve2.html>"]
36250#[must_use]
36251pub struct ImageResolve2<'a> {
36252    pub s_type: StructureType,
36253    pub p_next: *const c_void,
36254    pub src_subresource: ImageSubresourceLayers,
36255    pub src_offset: Offset3D,
36256    pub dst_subresource: ImageSubresourceLayers,
36257    pub dst_offset: Offset3D,
36258    pub extent: Extent3D,
36259    pub _marker: PhantomData<&'a ()>,
36260}
36261unsafe impl Send for ImageResolve2<'_> {}
36262unsafe impl Sync for ImageResolve2<'_> {}
36263impl ::core::default::Default for ImageResolve2<'_> {
36264    #[inline]
36265    fn default() -> Self {
36266        Self {
36267            s_type: Self::STRUCTURE_TYPE,
36268            p_next: ::core::ptr::null(),
36269            src_subresource: ImageSubresourceLayers::default(),
36270            src_offset: Offset3D::default(),
36271            dst_subresource: ImageSubresourceLayers::default(),
36272            dst_offset: Offset3D::default(),
36273            extent: Extent3D::default(),
36274            _marker: PhantomData,
36275        }
36276    }
36277}
36278unsafe impl<'a> TaggedStructure for ImageResolve2<'a> {
36279    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_RESOLVE_2;
36280}
36281impl<'a> ImageResolve2<'a> {
36282    #[inline]
36283    pub fn src_subresource(mut self, src_subresource: ImageSubresourceLayers) -> Self {
36284        self.src_subresource = src_subresource;
36285        self
36286    }
36287    #[inline]
36288    pub fn src_offset(mut self, src_offset: Offset3D) -> Self {
36289        self.src_offset = src_offset;
36290        self
36291    }
36292    #[inline]
36293    pub fn dst_subresource(mut self, dst_subresource: ImageSubresourceLayers) -> Self {
36294        self.dst_subresource = dst_subresource;
36295        self
36296    }
36297    #[inline]
36298    pub fn dst_offset(mut self, dst_offset: Offset3D) -> Self {
36299        self.dst_offset = dst_offset;
36300        self
36301    }
36302    #[inline]
36303    pub fn extent(mut self, extent: Extent3D) -> Self {
36304        self.extent = extent;
36305        self
36306    }
36307}
36308#[repr(C)]
36309#[cfg_attr(feature = "debug", derive(Debug))]
36310#[derive(Copy, Clone)]
36311#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyBufferInfo2.html>"]
36312#[must_use]
36313pub struct CopyBufferInfo2<'a> {
36314    pub s_type: StructureType,
36315    pub p_next: *const c_void,
36316    pub src_buffer: Buffer,
36317    pub dst_buffer: Buffer,
36318    pub region_count: u32,
36319    pub p_regions: *const BufferCopy2<'a>,
36320    pub _marker: PhantomData<&'a ()>,
36321}
36322unsafe impl Send for CopyBufferInfo2<'_> {}
36323unsafe impl Sync for CopyBufferInfo2<'_> {}
36324impl ::core::default::Default for CopyBufferInfo2<'_> {
36325    #[inline]
36326    fn default() -> Self {
36327        Self {
36328            s_type: Self::STRUCTURE_TYPE,
36329            p_next: ::core::ptr::null(),
36330            src_buffer: Buffer::default(),
36331            dst_buffer: Buffer::default(),
36332            region_count: u32::default(),
36333            p_regions: ::core::ptr::null(),
36334            _marker: PhantomData,
36335        }
36336    }
36337}
36338unsafe impl<'a> TaggedStructure for CopyBufferInfo2<'a> {
36339    const STRUCTURE_TYPE: StructureType = StructureType::COPY_BUFFER_INFO_2;
36340}
36341impl<'a> CopyBufferInfo2<'a> {
36342    #[inline]
36343    pub fn src_buffer(mut self, src_buffer: Buffer) -> Self {
36344        self.src_buffer = src_buffer;
36345        self
36346    }
36347    #[inline]
36348    pub fn dst_buffer(mut self, dst_buffer: Buffer) -> Self {
36349        self.dst_buffer = dst_buffer;
36350        self
36351    }
36352    #[inline]
36353    pub fn regions(mut self, regions: &'a [BufferCopy2<'a>]) -> Self {
36354        self.region_count = regions.len() as _;
36355        self.p_regions = regions.as_ptr();
36356        self
36357    }
36358}
36359#[repr(C)]
36360#[cfg_attr(feature = "debug", derive(Debug))]
36361#[derive(Copy, Clone)]
36362#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyImageInfo2.html>"]
36363#[must_use]
36364pub struct CopyImageInfo2<'a> {
36365    pub s_type: StructureType,
36366    pub p_next: *const c_void,
36367    pub src_image: Image,
36368    pub src_image_layout: ImageLayout,
36369    pub dst_image: Image,
36370    pub dst_image_layout: ImageLayout,
36371    pub region_count: u32,
36372    pub p_regions: *const ImageCopy2<'a>,
36373    pub _marker: PhantomData<&'a ()>,
36374}
36375unsafe impl Send for CopyImageInfo2<'_> {}
36376unsafe impl Sync for CopyImageInfo2<'_> {}
36377impl ::core::default::Default for CopyImageInfo2<'_> {
36378    #[inline]
36379    fn default() -> Self {
36380        Self {
36381            s_type: Self::STRUCTURE_TYPE,
36382            p_next: ::core::ptr::null(),
36383            src_image: Image::default(),
36384            src_image_layout: ImageLayout::default(),
36385            dst_image: Image::default(),
36386            dst_image_layout: ImageLayout::default(),
36387            region_count: u32::default(),
36388            p_regions: ::core::ptr::null(),
36389            _marker: PhantomData,
36390        }
36391    }
36392}
36393unsafe impl<'a> TaggedStructure for CopyImageInfo2<'a> {
36394    const STRUCTURE_TYPE: StructureType = StructureType::COPY_IMAGE_INFO_2;
36395}
36396impl<'a> CopyImageInfo2<'a> {
36397    #[inline]
36398    pub fn src_image(mut self, src_image: Image) -> Self {
36399        self.src_image = src_image;
36400        self
36401    }
36402    #[inline]
36403    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
36404        self.src_image_layout = src_image_layout;
36405        self
36406    }
36407    #[inline]
36408    pub fn dst_image(mut self, dst_image: Image) -> Self {
36409        self.dst_image = dst_image;
36410        self
36411    }
36412    #[inline]
36413    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
36414        self.dst_image_layout = dst_image_layout;
36415        self
36416    }
36417    #[inline]
36418    pub fn regions(mut self, regions: &'a [ImageCopy2<'a>]) -> Self {
36419        self.region_count = regions.len() as _;
36420        self.p_regions = regions.as_ptr();
36421        self
36422    }
36423}
36424#[repr(C)]
36425#[cfg_attr(feature = "debug", derive(Debug))]
36426#[derive(Copy, Clone)]
36427#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBlitImageInfo2.html>"]
36428#[must_use]
36429pub struct BlitImageInfo2<'a> {
36430    pub s_type: StructureType,
36431    pub p_next: *const c_void,
36432    pub src_image: Image,
36433    pub src_image_layout: ImageLayout,
36434    pub dst_image: Image,
36435    pub dst_image_layout: ImageLayout,
36436    pub region_count: u32,
36437    pub p_regions: *const ImageBlit2<'a>,
36438    pub filter: Filter,
36439    pub _marker: PhantomData<&'a ()>,
36440}
36441unsafe impl Send for BlitImageInfo2<'_> {}
36442unsafe impl Sync for BlitImageInfo2<'_> {}
36443impl ::core::default::Default for BlitImageInfo2<'_> {
36444    #[inline]
36445    fn default() -> Self {
36446        Self {
36447            s_type: Self::STRUCTURE_TYPE,
36448            p_next: ::core::ptr::null(),
36449            src_image: Image::default(),
36450            src_image_layout: ImageLayout::default(),
36451            dst_image: Image::default(),
36452            dst_image_layout: ImageLayout::default(),
36453            region_count: u32::default(),
36454            p_regions: ::core::ptr::null(),
36455            filter: Filter::default(),
36456            _marker: PhantomData,
36457        }
36458    }
36459}
36460unsafe impl<'a> TaggedStructure for BlitImageInfo2<'a> {
36461    const STRUCTURE_TYPE: StructureType = StructureType::BLIT_IMAGE_INFO_2;
36462}
36463pub unsafe trait ExtendsBlitImageInfo2 {}
36464impl<'a> BlitImageInfo2<'a> {
36465    #[inline]
36466    pub fn src_image(mut self, src_image: Image) -> Self {
36467        self.src_image = src_image;
36468        self
36469    }
36470    #[inline]
36471    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
36472        self.src_image_layout = src_image_layout;
36473        self
36474    }
36475    #[inline]
36476    pub fn dst_image(mut self, dst_image: Image) -> Self {
36477        self.dst_image = dst_image;
36478        self
36479    }
36480    #[inline]
36481    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
36482        self.dst_image_layout = dst_image_layout;
36483        self
36484    }
36485    #[inline]
36486    pub fn regions(mut self, regions: &'a [ImageBlit2<'a>]) -> Self {
36487        self.region_count = regions.len() as _;
36488        self.p_regions = regions.as_ptr();
36489        self
36490    }
36491    #[inline]
36492    pub fn filter(mut self, filter: Filter) -> Self {
36493        self.filter = filter;
36494        self
36495    }
36496    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
36497    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
36498    #[doc = r" valid extension structs can be pushed into the chain."]
36499    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
36500    #[doc = r" chain will look like `A -> D -> B -> C`."]
36501    pub fn push_next<T: ExtendsBlitImageInfo2 + ?Sized>(mut self, next: &'a mut T) -> Self {
36502        unsafe {
36503            let next_ptr = <*const T>::cast(next);
36504            let last_next = ptr_chain_iter(next).last().unwrap();
36505            (*last_next).p_next = self.p_next as _;
36506            self.p_next = next_ptr;
36507        }
36508        self
36509    }
36510}
36511#[repr(C)]
36512#[cfg_attr(feature = "debug", derive(Debug))]
36513#[derive(Copy, Clone)]
36514#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyBufferToImageInfo2.html>"]
36515#[must_use]
36516pub struct CopyBufferToImageInfo2<'a> {
36517    pub s_type: StructureType,
36518    pub p_next: *const c_void,
36519    pub src_buffer: Buffer,
36520    pub dst_image: Image,
36521    pub dst_image_layout: ImageLayout,
36522    pub region_count: u32,
36523    pub p_regions: *const BufferImageCopy2<'a>,
36524    pub _marker: PhantomData<&'a ()>,
36525}
36526unsafe impl Send for CopyBufferToImageInfo2<'_> {}
36527unsafe impl Sync for CopyBufferToImageInfo2<'_> {}
36528impl ::core::default::Default for CopyBufferToImageInfo2<'_> {
36529    #[inline]
36530    fn default() -> Self {
36531        Self {
36532            s_type: Self::STRUCTURE_TYPE,
36533            p_next: ::core::ptr::null(),
36534            src_buffer: Buffer::default(),
36535            dst_image: Image::default(),
36536            dst_image_layout: ImageLayout::default(),
36537            region_count: u32::default(),
36538            p_regions: ::core::ptr::null(),
36539            _marker: PhantomData,
36540        }
36541    }
36542}
36543unsafe impl<'a> TaggedStructure for CopyBufferToImageInfo2<'a> {
36544    const STRUCTURE_TYPE: StructureType = StructureType::COPY_BUFFER_TO_IMAGE_INFO_2;
36545}
36546impl<'a> CopyBufferToImageInfo2<'a> {
36547    #[inline]
36548    pub fn src_buffer(mut self, src_buffer: Buffer) -> Self {
36549        self.src_buffer = src_buffer;
36550        self
36551    }
36552    #[inline]
36553    pub fn dst_image(mut self, dst_image: Image) -> Self {
36554        self.dst_image = dst_image;
36555        self
36556    }
36557    #[inline]
36558    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
36559        self.dst_image_layout = dst_image_layout;
36560        self
36561    }
36562    #[inline]
36563    pub fn regions(mut self, regions: &'a [BufferImageCopy2<'a>]) -> Self {
36564        self.region_count = regions.len() as _;
36565        self.p_regions = regions.as_ptr();
36566        self
36567    }
36568}
36569#[repr(C)]
36570#[cfg_attr(feature = "debug", derive(Debug))]
36571#[derive(Copy, Clone)]
36572#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyImageToBufferInfo2.html>"]
36573#[must_use]
36574pub struct CopyImageToBufferInfo2<'a> {
36575    pub s_type: StructureType,
36576    pub p_next: *const c_void,
36577    pub src_image: Image,
36578    pub src_image_layout: ImageLayout,
36579    pub dst_buffer: Buffer,
36580    pub region_count: u32,
36581    pub p_regions: *const BufferImageCopy2<'a>,
36582    pub _marker: PhantomData<&'a ()>,
36583}
36584unsafe impl Send for CopyImageToBufferInfo2<'_> {}
36585unsafe impl Sync for CopyImageToBufferInfo2<'_> {}
36586impl ::core::default::Default for CopyImageToBufferInfo2<'_> {
36587    #[inline]
36588    fn default() -> Self {
36589        Self {
36590            s_type: Self::STRUCTURE_TYPE,
36591            p_next: ::core::ptr::null(),
36592            src_image: Image::default(),
36593            src_image_layout: ImageLayout::default(),
36594            dst_buffer: Buffer::default(),
36595            region_count: u32::default(),
36596            p_regions: ::core::ptr::null(),
36597            _marker: PhantomData,
36598        }
36599    }
36600}
36601unsafe impl<'a> TaggedStructure for CopyImageToBufferInfo2<'a> {
36602    const STRUCTURE_TYPE: StructureType = StructureType::COPY_IMAGE_TO_BUFFER_INFO_2;
36603}
36604impl<'a> CopyImageToBufferInfo2<'a> {
36605    #[inline]
36606    pub fn src_image(mut self, src_image: Image) -> Self {
36607        self.src_image = src_image;
36608        self
36609    }
36610    #[inline]
36611    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
36612        self.src_image_layout = src_image_layout;
36613        self
36614    }
36615    #[inline]
36616    pub fn dst_buffer(mut self, dst_buffer: Buffer) -> Self {
36617        self.dst_buffer = dst_buffer;
36618        self
36619    }
36620    #[inline]
36621    pub fn regions(mut self, regions: &'a [BufferImageCopy2<'a>]) -> Self {
36622        self.region_count = regions.len() as _;
36623        self.p_regions = regions.as_ptr();
36624        self
36625    }
36626}
36627#[repr(C)]
36628#[cfg_attr(feature = "debug", derive(Debug))]
36629#[derive(Copy, Clone)]
36630#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkResolveImageInfo2.html>"]
36631#[must_use]
36632pub struct ResolveImageInfo2<'a> {
36633    pub s_type: StructureType,
36634    pub p_next: *const c_void,
36635    pub src_image: Image,
36636    pub src_image_layout: ImageLayout,
36637    pub dst_image: Image,
36638    pub dst_image_layout: ImageLayout,
36639    pub region_count: u32,
36640    pub p_regions: *const ImageResolve2<'a>,
36641    pub _marker: PhantomData<&'a ()>,
36642}
36643unsafe impl Send for ResolveImageInfo2<'_> {}
36644unsafe impl Sync for ResolveImageInfo2<'_> {}
36645impl ::core::default::Default for ResolveImageInfo2<'_> {
36646    #[inline]
36647    fn default() -> Self {
36648        Self {
36649            s_type: Self::STRUCTURE_TYPE,
36650            p_next: ::core::ptr::null(),
36651            src_image: Image::default(),
36652            src_image_layout: ImageLayout::default(),
36653            dst_image: Image::default(),
36654            dst_image_layout: ImageLayout::default(),
36655            region_count: u32::default(),
36656            p_regions: ::core::ptr::null(),
36657            _marker: PhantomData,
36658        }
36659    }
36660}
36661unsafe impl<'a> TaggedStructure for ResolveImageInfo2<'a> {
36662    const STRUCTURE_TYPE: StructureType = StructureType::RESOLVE_IMAGE_INFO_2;
36663}
36664impl<'a> ResolveImageInfo2<'a> {
36665    #[inline]
36666    pub fn src_image(mut self, src_image: Image) -> Self {
36667        self.src_image = src_image;
36668        self
36669    }
36670    #[inline]
36671    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
36672        self.src_image_layout = src_image_layout;
36673        self
36674    }
36675    #[inline]
36676    pub fn dst_image(mut self, dst_image: Image) -> Self {
36677        self.dst_image = dst_image;
36678        self
36679    }
36680    #[inline]
36681    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
36682        self.dst_image_layout = dst_image_layout;
36683        self
36684    }
36685    #[inline]
36686    pub fn regions(mut self, regions: &'a [ImageResolve2<'a>]) -> Self {
36687        self.region_count = regions.len() as _;
36688        self.p_regions = regions.as_ptr();
36689        self
36690    }
36691}
36692#[repr(C)]
36693#[cfg_attr(feature = "debug", derive(Debug))]
36694#[derive(Copy, Clone)]
36695#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.html>"]
36696#[must_use]
36697pub struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'a> {
36698    pub s_type: StructureType,
36699    pub p_next: *mut c_void,
36700    pub shader_image_int64_atomics: Bool32,
36701    pub sparse_image_int64_atomics: Bool32,
36702    pub _marker: PhantomData<&'a ()>,
36703}
36704unsafe impl Send for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'_> {}
36705unsafe impl Sync for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'_> {}
36706impl ::core::default::Default for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'_> {
36707    #[inline]
36708    fn default() -> Self {
36709        Self {
36710            s_type: Self::STRUCTURE_TYPE,
36711            p_next: ::core::ptr::null_mut(),
36712            shader_image_int64_atomics: Bool32::default(),
36713            sparse_image_int64_atomics: Bool32::default(),
36714            _marker: PhantomData,
36715        }
36716    }
36717}
36718unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'a> {
36719    const STRUCTURE_TYPE: StructureType =
36720        StructureType::PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT;
36721}
36722unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'_> {}
36723unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'_> {}
36724impl<'a> PhysicalDeviceShaderImageAtomicInt64FeaturesEXT<'a> {
36725    #[inline]
36726    pub fn shader_image_int64_atomics(mut self, shader_image_int64_atomics: bool) -> Self {
36727        self.shader_image_int64_atomics = shader_image_int64_atomics.into();
36728        self
36729    }
36730    #[inline]
36731    pub fn sparse_image_int64_atomics(mut self, sparse_image_int64_atomics: bool) -> Self {
36732        self.sparse_image_int64_atomics = sparse_image_int64_atomics.into();
36733        self
36734    }
36735}
36736#[repr(C)]
36737#[cfg_attr(feature = "debug", derive(Debug))]
36738#[derive(Copy, Clone)]
36739#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFragmentShadingRateAttachmentInfoKHR.html>"]
36740#[must_use]
36741pub struct FragmentShadingRateAttachmentInfoKHR<'a> {
36742    pub s_type: StructureType,
36743    pub p_next: *const c_void,
36744    pub p_fragment_shading_rate_attachment: *const AttachmentReference2<'a>,
36745    pub shading_rate_attachment_texel_size: Extent2D,
36746    pub _marker: PhantomData<&'a ()>,
36747}
36748unsafe impl Send for FragmentShadingRateAttachmentInfoKHR<'_> {}
36749unsafe impl Sync for FragmentShadingRateAttachmentInfoKHR<'_> {}
36750impl ::core::default::Default for FragmentShadingRateAttachmentInfoKHR<'_> {
36751    #[inline]
36752    fn default() -> Self {
36753        Self {
36754            s_type: Self::STRUCTURE_TYPE,
36755            p_next: ::core::ptr::null(),
36756            p_fragment_shading_rate_attachment: ::core::ptr::null(),
36757            shading_rate_attachment_texel_size: Extent2D::default(),
36758            _marker: PhantomData,
36759        }
36760    }
36761}
36762unsafe impl<'a> TaggedStructure for FragmentShadingRateAttachmentInfoKHR<'a> {
36763    const STRUCTURE_TYPE: StructureType = StructureType::FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR;
36764}
36765unsafe impl ExtendsSubpassDescription2 for FragmentShadingRateAttachmentInfoKHR<'_> {}
36766impl<'a> FragmentShadingRateAttachmentInfoKHR<'a> {
36767    #[inline]
36768    pub fn fragment_shading_rate_attachment(
36769        mut self,
36770        fragment_shading_rate_attachment: &'a AttachmentReference2<'a>,
36771    ) -> Self {
36772        self.p_fragment_shading_rate_attachment = fragment_shading_rate_attachment;
36773        self
36774    }
36775    #[inline]
36776    pub fn shading_rate_attachment_texel_size(
36777        mut self,
36778        shading_rate_attachment_texel_size: Extent2D,
36779    ) -> Self {
36780        self.shading_rate_attachment_texel_size = shading_rate_attachment_texel_size;
36781        self
36782    }
36783}
36784#[repr(C)]
36785#[cfg_attr(feature = "debug", derive(Debug))]
36786#[derive(Copy, Clone)]
36787#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineFragmentShadingRateStateCreateInfoKHR.html>"]
36788#[must_use]
36789pub struct PipelineFragmentShadingRateStateCreateInfoKHR<'a> {
36790    pub s_type: StructureType,
36791    pub p_next: *const c_void,
36792    pub fragment_size: Extent2D,
36793    pub combiner_ops: [FragmentShadingRateCombinerOpKHR; 2],
36794    pub _marker: PhantomData<&'a ()>,
36795}
36796unsafe impl Send for PipelineFragmentShadingRateStateCreateInfoKHR<'_> {}
36797unsafe impl Sync for PipelineFragmentShadingRateStateCreateInfoKHR<'_> {}
36798impl ::core::default::Default for PipelineFragmentShadingRateStateCreateInfoKHR<'_> {
36799    #[inline]
36800    fn default() -> Self {
36801        Self {
36802            s_type: Self::STRUCTURE_TYPE,
36803            p_next: ::core::ptr::null(),
36804            fragment_size: Extent2D::default(),
36805            combiner_ops: unsafe { ::core::mem::zeroed() },
36806            _marker: PhantomData,
36807        }
36808    }
36809}
36810unsafe impl<'a> TaggedStructure for PipelineFragmentShadingRateStateCreateInfoKHR<'a> {
36811    const STRUCTURE_TYPE: StructureType =
36812        StructureType::PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR;
36813}
36814unsafe impl ExtendsGraphicsPipelineCreateInfo
36815    for PipelineFragmentShadingRateStateCreateInfoKHR<'_>
36816{
36817}
36818impl<'a> PipelineFragmentShadingRateStateCreateInfoKHR<'a> {
36819    #[inline]
36820    pub fn fragment_size(mut self, fragment_size: Extent2D) -> Self {
36821        self.fragment_size = fragment_size;
36822        self
36823    }
36824    #[inline]
36825    pub fn combiner_ops(mut self, combiner_ops: [FragmentShadingRateCombinerOpKHR; 2]) -> Self {
36826        self.combiner_ops = combiner_ops;
36827        self
36828    }
36829}
36830#[repr(C)]
36831#[cfg_attr(feature = "debug", derive(Debug))]
36832#[derive(Copy, Clone)]
36833#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.html>"]
36834#[must_use]
36835pub struct PhysicalDeviceFragmentShadingRateFeaturesKHR<'a> {
36836    pub s_type: StructureType,
36837    pub p_next: *mut c_void,
36838    pub pipeline_fragment_shading_rate: Bool32,
36839    pub primitive_fragment_shading_rate: Bool32,
36840    pub attachment_fragment_shading_rate: Bool32,
36841    pub _marker: PhantomData<&'a ()>,
36842}
36843unsafe impl Send for PhysicalDeviceFragmentShadingRateFeaturesKHR<'_> {}
36844unsafe impl Sync for PhysicalDeviceFragmentShadingRateFeaturesKHR<'_> {}
36845impl ::core::default::Default for PhysicalDeviceFragmentShadingRateFeaturesKHR<'_> {
36846    #[inline]
36847    fn default() -> Self {
36848        Self {
36849            s_type: Self::STRUCTURE_TYPE,
36850            p_next: ::core::ptr::null_mut(),
36851            pipeline_fragment_shading_rate: Bool32::default(),
36852            primitive_fragment_shading_rate: Bool32::default(),
36853            attachment_fragment_shading_rate: Bool32::default(),
36854            _marker: PhantomData,
36855        }
36856    }
36857}
36858unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShadingRateFeaturesKHR<'a> {
36859    const STRUCTURE_TYPE: StructureType =
36860        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR;
36861}
36862unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceFragmentShadingRateFeaturesKHR<'_> {}
36863unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentShadingRateFeaturesKHR<'_> {}
36864impl<'a> PhysicalDeviceFragmentShadingRateFeaturesKHR<'a> {
36865    #[inline]
36866    pub fn pipeline_fragment_shading_rate(mut self, pipeline_fragment_shading_rate: bool) -> Self {
36867        self.pipeline_fragment_shading_rate = pipeline_fragment_shading_rate.into();
36868        self
36869    }
36870    #[inline]
36871    pub fn primitive_fragment_shading_rate(
36872        mut self,
36873        primitive_fragment_shading_rate: bool,
36874    ) -> Self {
36875        self.primitive_fragment_shading_rate = primitive_fragment_shading_rate.into();
36876        self
36877    }
36878    #[inline]
36879    pub fn attachment_fragment_shading_rate(
36880        mut self,
36881        attachment_fragment_shading_rate: bool,
36882    ) -> Self {
36883        self.attachment_fragment_shading_rate = attachment_fragment_shading_rate.into();
36884        self
36885    }
36886}
36887#[repr(C)]
36888#[cfg_attr(feature = "debug", derive(Debug))]
36889#[derive(Copy, Clone)]
36890#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.html>"]
36891#[must_use]
36892pub struct PhysicalDeviceFragmentShadingRatePropertiesKHR<'a> {
36893    pub s_type: StructureType,
36894    pub p_next: *mut c_void,
36895    pub min_fragment_shading_rate_attachment_texel_size: Extent2D,
36896    pub max_fragment_shading_rate_attachment_texel_size: Extent2D,
36897    pub max_fragment_shading_rate_attachment_texel_size_aspect_ratio: u32,
36898    pub primitive_fragment_shading_rate_with_multiple_viewports: Bool32,
36899    pub layered_shading_rate_attachments: Bool32,
36900    pub fragment_shading_rate_non_trivial_combiner_ops: Bool32,
36901    pub max_fragment_size: Extent2D,
36902    pub max_fragment_size_aspect_ratio: u32,
36903    pub max_fragment_shading_rate_coverage_samples: u32,
36904    pub max_fragment_shading_rate_rasterization_samples: SampleCountFlags,
36905    pub fragment_shading_rate_with_shader_depth_stencil_writes: Bool32,
36906    pub fragment_shading_rate_with_sample_mask: Bool32,
36907    pub fragment_shading_rate_with_shader_sample_mask: Bool32,
36908    pub fragment_shading_rate_with_conservative_rasterization: Bool32,
36909    pub fragment_shading_rate_with_fragment_shader_interlock: Bool32,
36910    pub fragment_shading_rate_with_custom_sample_locations: Bool32,
36911    pub fragment_shading_rate_strict_multiply_combiner: Bool32,
36912    pub _marker: PhantomData<&'a ()>,
36913}
36914unsafe impl Send for PhysicalDeviceFragmentShadingRatePropertiesKHR<'_> {}
36915unsafe impl Sync for PhysicalDeviceFragmentShadingRatePropertiesKHR<'_> {}
36916impl ::core::default::Default for PhysicalDeviceFragmentShadingRatePropertiesKHR<'_> {
36917    #[inline]
36918    fn default() -> Self {
36919        Self {
36920            s_type: Self::STRUCTURE_TYPE,
36921            p_next: ::core::ptr::null_mut(),
36922            min_fragment_shading_rate_attachment_texel_size: Extent2D::default(),
36923            max_fragment_shading_rate_attachment_texel_size: Extent2D::default(),
36924            max_fragment_shading_rate_attachment_texel_size_aspect_ratio: u32::default(),
36925            primitive_fragment_shading_rate_with_multiple_viewports: Bool32::default(),
36926            layered_shading_rate_attachments: Bool32::default(),
36927            fragment_shading_rate_non_trivial_combiner_ops: Bool32::default(),
36928            max_fragment_size: Extent2D::default(),
36929            max_fragment_size_aspect_ratio: u32::default(),
36930            max_fragment_shading_rate_coverage_samples: u32::default(),
36931            max_fragment_shading_rate_rasterization_samples: SampleCountFlags::default(),
36932            fragment_shading_rate_with_shader_depth_stencil_writes: Bool32::default(),
36933            fragment_shading_rate_with_sample_mask: Bool32::default(),
36934            fragment_shading_rate_with_shader_sample_mask: Bool32::default(),
36935            fragment_shading_rate_with_conservative_rasterization: Bool32::default(),
36936            fragment_shading_rate_with_fragment_shader_interlock: Bool32::default(),
36937            fragment_shading_rate_with_custom_sample_locations: Bool32::default(),
36938            fragment_shading_rate_strict_multiply_combiner: Bool32::default(),
36939            _marker: PhantomData,
36940        }
36941    }
36942}
36943unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShadingRatePropertiesKHR<'a> {
36944    const STRUCTURE_TYPE: StructureType =
36945        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR;
36946}
36947unsafe impl ExtendsPhysicalDeviceProperties2
36948    for PhysicalDeviceFragmentShadingRatePropertiesKHR<'_>
36949{
36950}
36951impl<'a> PhysicalDeviceFragmentShadingRatePropertiesKHR<'a> {
36952    #[inline]
36953    pub fn min_fragment_shading_rate_attachment_texel_size(
36954        mut self,
36955        min_fragment_shading_rate_attachment_texel_size: Extent2D,
36956    ) -> Self {
36957        self.min_fragment_shading_rate_attachment_texel_size =
36958            min_fragment_shading_rate_attachment_texel_size;
36959        self
36960    }
36961    #[inline]
36962    pub fn max_fragment_shading_rate_attachment_texel_size(
36963        mut self,
36964        max_fragment_shading_rate_attachment_texel_size: Extent2D,
36965    ) -> Self {
36966        self.max_fragment_shading_rate_attachment_texel_size =
36967            max_fragment_shading_rate_attachment_texel_size;
36968        self
36969    }
36970    #[inline]
36971    pub fn max_fragment_shading_rate_attachment_texel_size_aspect_ratio(
36972        mut self,
36973        max_fragment_shading_rate_attachment_texel_size_aspect_ratio: u32,
36974    ) -> Self {
36975        self.max_fragment_shading_rate_attachment_texel_size_aspect_ratio =
36976            max_fragment_shading_rate_attachment_texel_size_aspect_ratio;
36977        self
36978    }
36979    #[inline]
36980    pub fn primitive_fragment_shading_rate_with_multiple_viewports(
36981        mut self,
36982        primitive_fragment_shading_rate_with_multiple_viewports: bool,
36983    ) -> Self {
36984        self.primitive_fragment_shading_rate_with_multiple_viewports =
36985            primitive_fragment_shading_rate_with_multiple_viewports.into();
36986        self
36987    }
36988    #[inline]
36989    pub fn layered_shading_rate_attachments(
36990        mut self,
36991        layered_shading_rate_attachments: bool,
36992    ) -> Self {
36993        self.layered_shading_rate_attachments = layered_shading_rate_attachments.into();
36994        self
36995    }
36996    #[inline]
36997    pub fn fragment_shading_rate_non_trivial_combiner_ops(
36998        mut self,
36999        fragment_shading_rate_non_trivial_combiner_ops: bool,
37000    ) -> Self {
37001        self.fragment_shading_rate_non_trivial_combiner_ops =
37002            fragment_shading_rate_non_trivial_combiner_ops.into();
37003        self
37004    }
37005    #[inline]
37006    pub fn max_fragment_size(mut self, max_fragment_size: Extent2D) -> Self {
37007        self.max_fragment_size = max_fragment_size;
37008        self
37009    }
37010    #[inline]
37011    pub fn max_fragment_size_aspect_ratio(mut self, max_fragment_size_aspect_ratio: u32) -> Self {
37012        self.max_fragment_size_aspect_ratio = max_fragment_size_aspect_ratio;
37013        self
37014    }
37015    #[inline]
37016    pub fn max_fragment_shading_rate_coverage_samples(
37017        mut self,
37018        max_fragment_shading_rate_coverage_samples: u32,
37019    ) -> Self {
37020        self.max_fragment_shading_rate_coverage_samples =
37021            max_fragment_shading_rate_coverage_samples;
37022        self
37023    }
37024    #[inline]
37025    pub fn max_fragment_shading_rate_rasterization_samples(
37026        mut self,
37027        max_fragment_shading_rate_rasterization_samples: SampleCountFlags,
37028    ) -> Self {
37029        self.max_fragment_shading_rate_rasterization_samples =
37030            max_fragment_shading_rate_rasterization_samples;
37031        self
37032    }
37033    #[inline]
37034    pub fn fragment_shading_rate_with_shader_depth_stencil_writes(
37035        mut self,
37036        fragment_shading_rate_with_shader_depth_stencil_writes: bool,
37037    ) -> Self {
37038        self.fragment_shading_rate_with_shader_depth_stencil_writes =
37039            fragment_shading_rate_with_shader_depth_stencil_writes.into();
37040        self
37041    }
37042    #[inline]
37043    pub fn fragment_shading_rate_with_sample_mask(
37044        mut self,
37045        fragment_shading_rate_with_sample_mask: bool,
37046    ) -> Self {
37047        self.fragment_shading_rate_with_sample_mask = fragment_shading_rate_with_sample_mask.into();
37048        self
37049    }
37050    #[inline]
37051    pub fn fragment_shading_rate_with_shader_sample_mask(
37052        mut self,
37053        fragment_shading_rate_with_shader_sample_mask: bool,
37054    ) -> Self {
37055        self.fragment_shading_rate_with_shader_sample_mask =
37056            fragment_shading_rate_with_shader_sample_mask.into();
37057        self
37058    }
37059    #[inline]
37060    pub fn fragment_shading_rate_with_conservative_rasterization(
37061        mut self,
37062        fragment_shading_rate_with_conservative_rasterization: bool,
37063    ) -> Self {
37064        self.fragment_shading_rate_with_conservative_rasterization =
37065            fragment_shading_rate_with_conservative_rasterization.into();
37066        self
37067    }
37068    #[inline]
37069    pub fn fragment_shading_rate_with_fragment_shader_interlock(
37070        mut self,
37071        fragment_shading_rate_with_fragment_shader_interlock: bool,
37072    ) -> Self {
37073        self.fragment_shading_rate_with_fragment_shader_interlock =
37074            fragment_shading_rate_with_fragment_shader_interlock.into();
37075        self
37076    }
37077    #[inline]
37078    pub fn fragment_shading_rate_with_custom_sample_locations(
37079        mut self,
37080        fragment_shading_rate_with_custom_sample_locations: bool,
37081    ) -> Self {
37082        self.fragment_shading_rate_with_custom_sample_locations =
37083            fragment_shading_rate_with_custom_sample_locations.into();
37084        self
37085    }
37086    #[inline]
37087    pub fn fragment_shading_rate_strict_multiply_combiner(
37088        mut self,
37089        fragment_shading_rate_strict_multiply_combiner: bool,
37090    ) -> Self {
37091        self.fragment_shading_rate_strict_multiply_combiner =
37092            fragment_shading_rate_strict_multiply_combiner.into();
37093        self
37094    }
37095}
37096#[repr(C)]
37097#[cfg_attr(feature = "debug", derive(Debug))]
37098#[derive(Copy, Clone)]
37099#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShadingRateKHR.html>"]
37100#[must_use]
37101pub struct PhysicalDeviceFragmentShadingRateKHR<'a> {
37102    pub s_type: StructureType,
37103    pub p_next: *mut c_void,
37104    pub sample_counts: SampleCountFlags,
37105    pub fragment_size: Extent2D,
37106    pub _marker: PhantomData<&'a ()>,
37107}
37108unsafe impl Send for PhysicalDeviceFragmentShadingRateKHR<'_> {}
37109unsafe impl Sync for PhysicalDeviceFragmentShadingRateKHR<'_> {}
37110impl ::core::default::Default for PhysicalDeviceFragmentShadingRateKHR<'_> {
37111    #[inline]
37112    fn default() -> Self {
37113        Self {
37114            s_type: Self::STRUCTURE_TYPE,
37115            p_next: ::core::ptr::null_mut(),
37116            sample_counts: SampleCountFlags::default(),
37117            fragment_size: Extent2D::default(),
37118            _marker: PhantomData,
37119        }
37120    }
37121}
37122unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShadingRateKHR<'a> {
37123    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR;
37124}
37125impl<'a> PhysicalDeviceFragmentShadingRateKHR<'a> {
37126    #[inline]
37127    pub fn sample_counts(mut self, sample_counts: SampleCountFlags) -> Self {
37128        self.sample_counts = sample_counts;
37129        self
37130    }
37131    #[inline]
37132    pub fn fragment_size(mut self, fragment_size: Extent2D) -> Self {
37133        self.fragment_size = fragment_size;
37134        self
37135    }
37136}
37137#[repr(C)]
37138#[cfg_attr(feature = "debug", derive(Debug))]
37139#[derive(Copy, Clone)]
37140#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderTerminateInvocationFeatures.html>"]
37141#[must_use]
37142pub struct PhysicalDeviceShaderTerminateInvocationFeatures<'a> {
37143    pub s_type: StructureType,
37144    pub p_next: *mut c_void,
37145    pub shader_terminate_invocation: Bool32,
37146    pub _marker: PhantomData<&'a ()>,
37147}
37148unsafe impl Send for PhysicalDeviceShaderTerminateInvocationFeatures<'_> {}
37149unsafe impl Sync for PhysicalDeviceShaderTerminateInvocationFeatures<'_> {}
37150impl ::core::default::Default for PhysicalDeviceShaderTerminateInvocationFeatures<'_> {
37151    #[inline]
37152    fn default() -> Self {
37153        Self {
37154            s_type: Self::STRUCTURE_TYPE,
37155            p_next: ::core::ptr::null_mut(),
37156            shader_terminate_invocation: Bool32::default(),
37157            _marker: PhantomData,
37158        }
37159    }
37160}
37161unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderTerminateInvocationFeatures<'a> {
37162    const STRUCTURE_TYPE: StructureType =
37163        StructureType::PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES;
37164}
37165unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderTerminateInvocationFeatures<'_> {}
37166unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderTerminateInvocationFeatures<'_> {}
37167impl<'a> PhysicalDeviceShaderTerminateInvocationFeatures<'a> {
37168    #[inline]
37169    pub fn shader_terminate_invocation(mut self, shader_terminate_invocation: bool) -> Self {
37170        self.shader_terminate_invocation = shader_terminate_invocation.into();
37171        self
37172    }
37173}
37174#[repr(C)]
37175#[cfg_attr(feature = "debug", derive(Debug))]
37176#[derive(Copy, Clone)]
37177#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV.html>"]
37178#[must_use]
37179pub struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'a> {
37180    pub s_type: StructureType,
37181    pub p_next: *mut c_void,
37182    pub fragment_shading_rate_enums: Bool32,
37183    pub supersample_fragment_shading_rates: Bool32,
37184    pub no_invocation_fragment_shading_rates: Bool32,
37185    pub _marker: PhantomData<&'a ()>,
37186}
37187unsafe impl Send for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'_> {}
37188unsafe impl Sync for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'_> {}
37189impl ::core::default::Default for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'_> {
37190    #[inline]
37191    fn default() -> Self {
37192        Self {
37193            s_type: Self::STRUCTURE_TYPE,
37194            p_next: ::core::ptr::null_mut(),
37195            fragment_shading_rate_enums: Bool32::default(),
37196            supersample_fragment_shading_rates: Bool32::default(),
37197            no_invocation_fragment_shading_rates: Bool32::default(),
37198            _marker: PhantomData,
37199        }
37200    }
37201}
37202unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'a> {
37203    const STRUCTURE_TYPE: StructureType =
37204        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV;
37205}
37206unsafe impl ExtendsPhysicalDeviceFeatures2
37207    for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'_>
37208{
37209}
37210unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'_> {}
37211impl<'a> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV<'a> {
37212    #[inline]
37213    pub fn fragment_shading_rate_enums(mut self, fragment_shading_rate_enums: bool) -> Self {
37214        self.fragment_shading_rate_enums = fragment_shading_rate_enums.into();
37215        self
37216    }
37217    #[inline]
37218    pub fn supersample_fragment_shading_rates(
37219        mut self,
37220        supersample_fragment_shading_rates: bool,
37221    ) -> Self {
37222        self.supersample_fragment_shading_rates = supersample_fragment_shading_rates.into();
37223        self
37224    }
37225    #[inline]
37226    pub fn no_invocation_fragment_shading_rates(
37227        mut self,
37228        no_invocation_fragment_shading_rates: bool,
37229    ) -> Self {
37230        self.no_invocation_fragment_shading_rates = no_invocation_fragment_shading_rates.into();
37231        self
37232    }
37233}
37234#[repr(C)]
37235#[cfg_attr(feature = "debug", derive(Debug))]
37236#[derive(Copy, Clone)]
37237#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV.html>"]
37238#[must_use]
37239pub struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'a> {
37240    pub s_type: StructureType,
37241    pub p_next: *mut c_void,
37242    pub max_fragment_shading_rate_invocation_count: SampleCountFlags,
37243    pub _marker: PhantomData<&'a ()>,
37244}
37245unsafe impl Send for PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'_> {}
37246unsafe impl Sync for PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'_> {}
37247impl ::core::default::Default for PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'_> {
37248    #[inline]
37249    fn default() -> Self {
37250        Self {
37251            s_type: Self::STRUCTURE_TYPE,
37252            p_next: ::core::ptr::null_mut(),
37253            max_fragment_shading_rate_invocation_count: SampleCountFlags::default(),
37254            _marker: PhantomData,
37255        }
37256    }
37257}
37258unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'a> {
37259    const STRUCTURE_TYPE: StructureType =
37260        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV;
37261}
37262unsafe impl ExtendsPhysicalDeviceProperties2
37263    for PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'_>
37264{
37265}
37266impl<'a> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV<'a> {
37267    #[inline]
37268    pub fn max_fragment_shading_rate_invocation_count(
37269        mut self,
37270        max_fragment_shading_rate_invocation_count: SampleCountFlags,
37271    ) -> Self {
37272        self.max_fragment_shading_rate_invocation_count =
37273            max_fragment_shading_rate_invocation_count;
37274        self
37275    }
37276}
37277#[repr(C)]
37278#[cfg_attr(feature = "debug", derive(Debug))]
37279#[derive(Copy, Clone)]
37280#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineFragmentShadingRateEnumStateCreateInfoNV.html>"]
37281#[must_use]
37282pub struct PipelineFragmentShadingRateEnumStateCreateInfoNV<'a> {
37283    pub s_type: StructureType,
37284    pub p_next: *const c_void,
37285    pub shading_rate_type: FragmentShadingRateTypeNV,
37286    pub shading_rate: FragmentShadingRateNV,
37287    pub combiner_ops: [FragmentShadingRateCombinerOpKHR; 2],
37288    pub _marker: PhantomData<&'a ()>,
37289}
37290unsafe impl Send for PipelineFragmentShadingRateEnumStateCreateInfoNV<'_> {}
37291unsafe impl Sync for PipelineFragmentShadingRateEnumStateCreateInfoNV<'_> {}
37292impl ::core::default::Default for PipelineFragmentShadingRateEnumStateCreateInfoNV<'_> {
37293    #[inline]
37294    fn default() -> Self {
37295        Self {
37296            s_type: Self::STRUCTURE_TYPE,
37297            p_next: ::core::ptr::null(),
37298            shading_rate_type: FragmentShadingRateTypeNV::default(),
37299            shading_rate: FragmentShadingRateNV::default(),
37300            combiner_ops: unsafe { ::core::mem::zeroed() },
37301            _marker: PhantomData,
37302        }
37303    }
37304}
37305unsafe impl<'a> TaggedStructure for PipelineFragmentShadingRateEnumStateCreateInfoNV<'a> {
37306    const STRUCTURE_TYPE: StructureType =
37307        StructureType::PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV;
37308}
37309unsafe impl ExtendsGraphicsPipelineCreateInfo
37310    for PipelineFragmentShadingRateEnumStateCreateInfoNV<'_>
37311{
37312}
37313impl<'a> PipelineFragmentShadingRateEnumStateCreateInfoNV<'a> {
37314    #[inline]
37315    pub fn shading_rate_type(mut self, shading_rate_type: FragmentShadingRateTypeNV) -> Self {
37316        self.shading_rate_type = shading_rate_type;
37317        self
37318    }
37319    #[inline]
37320    pub fn shading_rate(mut self, shading_rate: FragmentShadingRateNV) -> Self {
37321        self.shading_rate = shading_rate;
37322        self
37323    }
37324    #[inline]
37325    pub fn combiner_ops(mut self, combiner_ops: [FragmentShadingRateCombinerOpKHR; 2]) -> Self {
37326        self.combiner_ops = combiner_ops;
37327        self
37328    }
37329}
37330#[repr(C)]
37331#[cfg_attr(feature = "debug", derive(Debug))]
37332#[derive(Copy, Clone)]
37333#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureBuildSizesInfoKHR.html>"]
37334#[must_use]
37335pub struct AccelerationStructureBuildSizesInfoKHR<'a> {
37336    pub s_type: StructureType,
37337    pub p_next: *const c_void,
37338    pub acceleration_structure_size: DeviceSize,
37339    pub update_scratch_size: DeviceSize,
37340    pub build_scratch_size: DeviceSize,
37341    pub _marker: PhantomData<&'a ()>,
37342}
37343unsafe impl Send for AccelerationStructureBuildSizesInfoKHR<'_> {}
37344unsafe impl Sync for AccelerationStructureBuildSizesInfoKHR<'_> {}
37345impl ::core::default::Default for AccelerationStructureBuildSizesInfoKHR<'_> {
37346    #[inline]
37347    fn default() -> Self {
37348        Self {
37349            s_type: Self::STRUCTURE_TYPE,
37350            p_next: ::core::ptr::null(),
37351            acceleration_structure_size: DeviceSize::default(),
37352            update_scratch_size: DeviceSize::default(),
37353            build_scratch_size: DeviceSize::default(),
37354            _marker: PhantomData,
37355        }
37356    }
37357}
37358unsafe impl<'a> TaggedStructure for AccelerationStructureBuildSizesInfoKHR<'a> {
37359    const STRUCTURE_TYPE: StructureType =
37360        StructureType::ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
37361}
37362impl<'a> AccelerationStructureBuildSizesInfoKHR<'a> {
37363    #[inline]
37364    pub fn acceleration_structure_size(mut self, acceleration_structure_size: DeviceSize) -> Self {
37365        self.acceleration_structure_size = acceleration_structure_size;
37366        self
37367    }
37368    #[inline]
37369    pub fn update_scratch_size(mut self, update_scratch_size: DeviceSize) -> Self {
37370        self.update_scratch_size = update_scratch_size;
37371        self
37372    }
37373    #[inline]
37374    pub fn build_scratch_size(mut self, build_scratch_size: DeviceSize) -> Self {
37375        self.build_scratch_size = build_scratch_size;
37376        self
37377    }
37378}
37379#[repr(C)]
37380#[cfg_attr(feature = "debug", derive(Debug))]
37381#[derive(Copy, Clone)]
37382#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImage2DViewOf3DFeaturesEXT.html>"]
37383#[must_use]
37384pub struct PhysicalDeviceImage2DViewOf3DFeaturesEXT<'a> {
37385    pub s_type: StructureType,
37386    pub p_next: *mut c_void,
37387    pub image2_d_view_of3_d: Bool32,
37388    pub sampler2_d_view_of3_d: Bool32,
37389    pub _marker: PhantomData<&'a ()>,
37390}
37391unsafe impl Send for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'_> {}
37392unsafe impl Sync for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'_> {}
37393impl ::core::default::Default for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'_> {
37394    #[inline]
37395    fn default() -> Self {
37396        Self {
37397            s_type: Self::STRUCTURE_TYPE,
37398            p_next: ::core::ptr::null_mut(),
37399            image2_d_view_of3_d: Bool32::default(),
37400            sampler2_d_view_of3_d: Bool32::default(),
37401            _marker: PhantomData,
37402        }
37403    }
37404}
37405unsafe impl<'a> TaggedStructure for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'a> {
37406    const STRUCTURE_TYPE: StructureType =
37407        StructureType::PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT;
37408}
37409unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'_> {}
37410unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImage2DViewOf3DFeaturesEXT<'_> {}
37411impl<'a> PhysicalDeviceImage2DViewOf3DFeaturesEXT<'a> {
37412    #[inline]
37413    pub fn image2_d_view_of3_d(mut self, image2_d_view_of3_d: bool) -> Self {
37414        self.image2_d_view_of3_d = image2_d_view_of3_d.into();
37415        self
37416    }
37417    #[inline]
37418    pub fn sampler2_d_view_of3_d(mut self, sampler2_d_view_of3_d: bool) -> Self {
37419        self.sampler2_d_view_of3_d = sampler2_d_view_of3_d.into();
37420        self
37421    }
37422}
37423#[repr(C)]
37424#[cfg_attr(feature = "debug", derive(Debug))]
37425#[derive(Copy, Clone)]
37426#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT.html>"]
37427#[must_use]
37428pub struct PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'a> {
37429    pub s_type: StructureType,
37430    pub p_next: *mut c_void,
37431    pub image_sliced_view_of3_d: Bool32,
37432    pub _marker: PhantomData<&'a ()>,
37433}
37434unsafe impl Send for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'_> {}
37435unsafe impl Sync for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'_> {}
37436impl ::core::default::Default for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'_> {
37437    #[inline]
37438    fn default() -> Self {
37439        Self {
37440            s_type: Self::STRUCTURE_TYPE,
37441            p_next: ::core::ptr::null_mut(),
37442            image_sliced_view_of3_d: Bool32::default(),
37443            _marker: PhantomData,
37444        }
37445    }
37446}
37447unsafe impl<'a> TaggedStructure for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'a> {
37448    const STRUCTURE_TYPE: StructureType =
37449        StructureType::PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT;
37450}
37451unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'_> {}
37452unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'_> {}
37453impl<'a> PhysicalDeviceImageSlicedViewOf3DFeaturesEXT<'a> {
37454    #[inline]
37455    pub fn image_sliced_view_of3_d(mut self, image_sliced_view_of3_d: bool) -> Self {
37456        self.image_sliced_view_of3_d = image_sliced_view_of3_d.into();
37457        self
37458    }
37459}
37460#[repr(C)]
37461#[cfg_attr(feature = "debug", derive(Debug))]
37462#[derive(Copy, Clone)]
37463#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT.html>"]
37464#[must_use]
37465pub struct PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'a> {
37466    pub s_type: StructureType,
37467    pub p_next: *mut c_void,
37468    pub attachment_feedback_loop_dynamic_state: Bool32,
37469    pub _marker: PhantomData<&'a ()>,
37470}
37471unsafe impl Send for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'_> {}
37472unsafe impl Sync for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'_> {}
37473impl ::core::default::Default for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'_> {
37474    #[inline]
37475    fn default() -> Self {
37476        Self {
37477            s_type: Self::STRUCTURE_TYPE,
37478            p_next: ::core::ptr::null_mut(),
37479            attachment_feedback_loop_dynamic_state: Bool32::default(),
37480            _marker: PhantomData,
37481        }
37482    }
37483}
37484unsafe impl<'a> TaggedStructure
37485    for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'a>
37486{
37487    const STRUCTURE_TYPE: StructureType =
37488        StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT;
37489}
37490unsafe impl ExtendsPhysicalDeviceFeatures2
37491    for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'_>
37492{
37493}
37494unsafe impl ExtendsDeviceCreateInfo
37495    for PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'_>
37496{
37497}
37498impl<'a> PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT<'a> {
37499    #[inline]
37500    pub fn attachment_feedback_loop_dynamic_state(
37501        mut self,
37502        attachment_feedback_loop_dynamic_state: bool,
37503    ) -> Self {
37504        self.attachment_feedback_loop_dynamic_state = attachment_feedback_loop_dynamic_state.into();
37505        self
37506    }
37507}
37508#[repr(C)]
37509#[cfg_attr(feature = "debug", derive(Debug))]
37510#[derive(Copy, Clone)]
37511#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.html>"]
37512#[must_use]
37513pub struct PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'a> {
37514    pub s_type: StructureType,
37515    pub p_next: *mut c_void,
37516    pub mutable_descriptor_type: Bool32,
37517    pub _marker: PhantomData<&'a ()>,
37518}
37519unsafe impl Send for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'_> {}
37520unsafe impl Sync for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'_> {}
37521impl ::core::default::Default for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'_> {
37522    #[inline]
37523    fn default() -> Self {
37524        Self {
37525            s_type: Self::STRUCTURE_TYPE,
37526            p_next: ::core::ptr::null_mut(),
37527            mutable_descriptor_type: Bool32::default(),
37528            _marker: PhantomData,
37529        }
37530    }
37531}
37532unsafe impl<'a> TaggedStructure for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'a> {
37533    const STRUCTURE_TYPE: StructureType =
37534        StructureType::PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT;
37535}
37536unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'_> {}
37537unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'_> {}
37538impl<'a> PhysicalDeviceMutableDescriptorTypeFeaturesEXT<'a> {
37539    #[inline]
37540    pub fn mutable_descriptor_type(mut self, mutable_descriptor_type: bool) -> Self {
37541        self.mutable_descriptor_type = mutable_descriptor_type.into();
37542        self
37543    }
37544}
37545#[repr(C)]
37546#[cfg_attr(feature = "debug", derive(Debug))]
37547#[derive(Copy, Clone)]
37548#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMutableDescriptorTypeListEXT.html>"]
37549#[must_use]
37550pub struct MutableDescriptorTypeListEXT<'a> {
37551    pub descriptor_type_count: u32,
37552    pub p_descriptor_types: *const DescriptorType,
37553    pub _marker: PhantomData<&'a ()>,
37554}
37555unsafe impl Send for MutableDescriptorTypeListEXT<'_> {}
37556unsafe impl Sync for MutableDescriptorTypeListEXT<'_> {}
37557impl ::core::default::Default for MutableDescriptorTypeListEXT<'_> {
37558    #[inline]
37559    fn default() -> Self {
37560        Self {
37561            descriptor_type_count: u32::default(),
37562            p_descriptor_types: ::core::ptr::null(),
37563            _marker: PhantomData,
37564        }
37565    }
37566}
37567impl<'a> MutableDescriptorTypeListEXT<'a> {
37568    #[inline]
37569    pub fn descriptor_types(mut self, descriptor_types: &'a [DescriptorType]) -> Self {
37570        self.descriptor_type_count = descriptor_types.len() as _;
37571        self.p_descriptor_types = descriptor_types.as_ptr();
37572        self
37573    }
37574}
37575#[repr(C)]
37576#[cfg_attr(feature = "debug", derive(Debug))]
37577#[derive(Copy, Clone)]
37578#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMutableDescriptorTypeCreateInfoEXT.html>"]
37579#[must_use]
37580pub struct MutableDescriptorTypeCreateInfoEXT<'a> {
37581    pub s_type: StructureType,
37582    pub p_next: *const c_void,
37583    pub mutable_descriptor_type_list_count: u32,
37584    pub p_mutable_descriptor_type_lists: *const MutableDescriptorTypeListEXT<'a>,
37585    pub _marker: PhantomData<&'a ()>,
37586}
37587unsafe impl Send for MutableDescriptorTypeCreateInfoEXT<'_> {}
37588unsafe impl Sync for MutableDescriptorTypeCreateInfoEXT<'_> {}
37589impl ::core::default::Default for MutableDescriptorTypeCreateInfoEXT<'_> {
37590    #[inline]
37591    fn default() -> Self {
37592        Self {
37593            s_type: Self::STRUCTURE_TYPE,
37594            p_next: ::core::ptr::null(),
37595            mutable_descriptor_type_list_count: u32::default(),
37596            p_mutable_descriptor_type_lists: ::core::ptr::null(),
37597            _marker: PhantomData,
37598        }
37599    }
37600}
37601unsafe impl<'a> TaggedStructure for MutableDescriptorTypeCreateInfoEXT<'a> {
37602    const STRUCTURE_TYPE: StructureType = StructureType::MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT;
37603}
37604unsafe impl ExtendsDescriptorSetLayoutCreateInfo for MutableDescriptorTypeCreateInfoEXT<'_> {}
37605unsafe impl ExtendsDescriptorPoolCreateInfo for MutableDescriptorTypeCreateInfoEXT<'_> {}
37606impl<'a> MutableDescriptorTypeCreateInfoEXT<'a> {
37607    #[inline]
37608    pub fn mutable_descriptor_type_lists(
37609        mut self,
37610        mutable_descriptor_type_lists: &'a [MutableDescriptorTypeListEXT<'a>],
37611    ) -> Self {
37612        self.mutable_descriptor_type_list_count = mutable_descriptor_type_lists.len() as _;
37613        self.p_mutable_descriptor_type_lists = mutable_descriptor_type_lists.as_ptr();
37614        self
37615    }
37616}
37617#[repr(C)]
37618#[cfg_attr(feature = "debug", derive(Debug))]
37619#[derive(Copy, Clone)]
37620#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthClipControlFeaturesEXT.html>"]
37621#[must_use]
37622pub struct PhysicalDeviceDepthClipControlFeaturesEXT<'a> {
37623    pub s_type: StructureType,
37624    pub p_next: *mut c_void,
37625    pub depth_clip_control: Bool32,
37626    pub _marker: PhantomData<&'a ()>,
37627}
37628unsafe impl Send for PhysicalDeviceDepthClipControlFeaturesEXT<'_> {}
37629unsafe impl Sync for PhysicalDeviceDepthClipControlFeaturesEXT<'_> {}
37630impl ::core::default::Default for PhysicalDeviceDepthClipControlFeaturesEXT<'_> {
37631    #[inline]
37632    fn default() -> Self {
37633        Self {
37634            s_type: Self::STRUCTURE_TYPE,
37635            p_next: ::core::ptr::null_mut(),
37636            depth_clip_control: Bool32::default(),
37637            _marker: PhantomData,
37638        }
37639    }
37640}
37641unsafe impl<'a> TaggedStructure for PhysicalDeviceDepthClipControlFeaturesEXT<'a> {
37642    const STRUCTURE_TYPE: StructureType =
37643        StructureType::PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT;
37644}
37645unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDepthClipControlFeaturesEXT<'_> {}
37646unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDepthClipControlFeaturesEXT<'_> {}
37647impl<'a> PhysicalDeviceDepthClipControlFeaturesEXT<'a> {
37648    #[inline]
37649    pub fn depth_clip_control(mut self, depth_clip_control: bool) -> Self {
37650        self.depth_clip_control = depth_clip_control.into();
37651        self
37652    }
37653}
37654#[repr(C)]
37655#[cfg_attr(feature = "debug", derive(Debug))]
37656#[derive(Copy, Clone)]
37657#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportDepthClipControlCreateInfoEXT.html>"]
37658#[must_use]
37659pub struct PipelineViewportDepthClipControlCreateInfoEXT<'a> {
37660    pub s_type: StructureType,
37661    pub p_next: *const c_void,
37662    pub negative_one_to_one: Bool32,
37663    pub _marker: PhantomData<&'a ()>,
37664}
37665unsafe impl Send for PipelineViewportDepthClipControlCreateInfoEXT<'_> {}
37666unsafe impl Sync for PipelineViewportDepthClipControlCreateInfoEXT<'_> {}
37667impl ::core::default::Default for PipelineViewportDepthClipControlCreateInfoEXT<'_> {
37668    #[inline]
37669    fn default() -> Self {
37670        Self {
37671            s_type: Self::STRUCTURE_TYPE,
37672            p_next: ::core::ptr::null(),
37673            negative_one_to_one: Bool32::default(),
37674            _marker: PhantomData,
37675        }
37676    }
37677}
37678unsafe impl<'a> TaggedStructure for PipelineViewportDepthClipControlCreateInfoEXT<'a> {
37679    const STRUCTURE_TYPE: StructureType =
37680        StructureType::PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT;
37681}
37682unsafe impl ExtendsPipelineViewportStateCreateInfo
37683    for PipelineViewportDepthClipControlCreateInfoEXT<'_>
37684{
37685}
37686impl<'a> PipelineViewportDepthClipControlCreateInfoEXT<'a> {
37687    #[inline]
37688    pub fn negative_one_to_one(mut self, negative_one_to_one: bool) -> Self {
37689        self.negative_one_to_one = negative_one_to_one.into();
37690        self
37691    }
37692}
37693#[repr(C)]
37694#[cfg_attr(feature = "debug", derive(Debug))]
37695#[derive(Copy, Clone)]
37696#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT.html>"]
37697#[must_use]
37698pub struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'a> {
37699    pub s_type: StructureType,
37700    pub p_next: *mut c_void,
37701    pub vertex_input_dynamic_state: Bool32,
37702    pub _marker: PhantomData<&'a ()>,
37703}
37704unsafe impl Send for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'_> {}
37705unsafe impl Sync for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'_> {}
37706impl ::core::default::Default for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'_> {
37707    #[inline]
37708    fn default() -> Self {
37709        Self {
37710            s_type: Self::STRUCTURE_TYPE,
37711            p_next: ::core::ptr::null_mut(),
37712            vertex_input_dynamic_state: Bool32::default(),
37713            _marker: PhantomData,
37714        }
37715    }
37716}
37717unsafe impl<'a> TaggedStructure for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'a> {
37718    const STRUCTURE_TYPE: StructureType =
37719        StructureType::PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT;
37720}
37721unsafe impl ExtendsPhysicalDeviceFeatures2
37722    for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'_>
37723{
37724}
37725unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'_> {}
37726impl<'a> PhysicalDeviceVertexInputDynamicStateFeaturesEXT<'a> {
37727    #[inline]
37728    pub fn vertex_input_dynamic_state(mut self, vertex_input_dynamic_state: bool) -> Self {
37729        self.vertex_input_dynamic_state = vertex_input_dynamic_state.into();
37730        self
37731    }
37732}
37733#[repr(C)]
37734#[cfg_attr(feature = "debug", derive(Debug))]
37735#[derive(Copy, Clone)]
37736#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalMemoryRDMAFeaturesNV.html>"]
37737#[must_use]
37738pub struct PhysicalDeviceExternalMemoryRDMAFeaturesNV<'a> {
37739    pub s_type: StructureType,
37740    pub p_next: *mut c_void,
37741    pub external_memory_rdma: Bool32,
37742    pub _marker: PhantomData<&'a ()>,
37743}
37744unsafe impl Send for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'_> {}
37745unsafe impl Sync for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'_> {}
37746impl ::core::default::Default for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'_> {
37747    #[inline]
37748    fn default() -> Self {
37749        Self {
37750            s_type: Self::STRUCTURE_TYPE,
37751            p_next: ::core::ptr::null_mut(),
37752            external_memory_rdma: Bool32::default(),
37753            _marker: PhantomData,
37754        }
37755    }
37756}
37757unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'a> {
37758    const STRUCTURE_TYPE: StructureType =
37759        StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV;
37760}
37761unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'_> {}
37762unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExternalMemoryRDMAFeaturesNV<'_> {}
37763impl<'a> PhysicalDeviceExternalMemoryRDMAFeaturesNV<'a> {
37764    #[inline]
37765    pub fn external_memory_rdma(mut self, external_memory_rdma: bool) -> Self {
37766        self.external_memory_rdma = external_memory_rdma.into();
37767        self
37768    }
37769}
37770#[repr(C)]
37771#[cfg_attr(feature = "debug", derive(Debug))]
37772#[derive(Copy, Clone)]
37773#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVertexInputBindingDescription2EXT.html>"]
37774#[must_use]
37775pub struct VertexInputBindingDescription2EXT<'a> {
37776    pub s_type: StructureType,
37777    pub p_next: *mut c_void,
37778    pub binding: u32,
37779    pub stride: u32,
37780    pub input_rate: VertexInputRate,
37781    pub divisor: u32,
37782    pub _marker: PhantomData<&'a ()>,
37783}
37784unsafe impl Send for VertexInputBindingDescription2EXT<'_> {}
37785unsafe impl Sync for VertexInputBindingDescription2EXT<'_> {}
37786impl ::core::default::Default for VertexInputBindingDescription2EXT<'_> {
37787    #[inline]
37788    fn default() -> Self {
37789        Self {
37790            s_type: Self::STRUCTURE_TYPE,
37791            p_next: ::core::ptr::null_mut(),
37792            binding: u32::default(),
37793            stride: u32::default(),
37794            input_rate: VertexInputRate::default(),
37795            divisor: u32::default(),
37796            _marker: PhantomData,
37797        }
37798    }
37799}
37800unsafe impl<'a> TaggedStructure for VertexInputBindingDescription2EXT<'a> {
37801    const STRUCTURE_TYPE: StructureType = StructureType::VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT;
37802}
37803impl<'a> VertexInputBindingDescription2EXT<'a> {
37804    #[inline]
37805    pub fn binding(mut self, binding: u32) -> Self {
37806        self.binding = binding;
37807        self
37808    }
37809    #[inline]
37810    pub fn stride(mut self, stride: u32) -> Self {
37811        self.stride = stride;
37812        self
37813    }
37814    #[inline]
37815    pub fn input_rate(mut self, input_rate: VertexInputRate) -> Self {
37816        self.input_rate = input_rate;
37817        self
37818    }
37819    #[inline]
37820    pub fn divisor(mut self, divisor: u32) -> Self {
37821        self.divisor = divisor;
37822        self
37823    }
37824}
37825#[repr(C)]
37826#[cfg_attr(feature = "debug", derive(Debug))]
37827#[derive(Copy, Clone)]
37828#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVertexInputAttributeDescription2EXT.html>"]
37829#[must_use]
37830pub struct VertexInputAttributeDescription2EXT<'a> {
37831    pub s_type: StructureType,
37832    pub p_next: *mut c_void,
37833    pub location: u32,
37834    pub binding: u32,
37835    pub format: Format,
37836    pub offset: u32,
37837    pub _marker: PhantomData<&'a ()>,
37838}
37839unsafe impl Send for VertexInputAttributeDescription2EXT<'_> {}
37840unsafe impl Sync for VertexInputAttributeDescription2EXT<'_> {}
37841impl ::core::default::Default for VertexInputAttributeDescription2EXT<'_> {
37842    #[inline]
37843    fn default() -> Self {
37844        Self {
37845            s_type: Self::STRUCTURE_TYPE,
37846            p_next: ::core::ptr::null_mut(),
37847            location: u32::default(),
37848            binding: u32::default(),
37849            format: Format::default(),
37850            offset: u32::default(),
37851            _marker: PhantomData,
37852        }
37853    }
37854}
37855unsafe impl<'a> TaggedStructure for VertexInputAttributeDescription2EXT<'a> {
37856    const STRUCTURE_TYPE: StructureType = StructureType::VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT;
37857}
37858impl<'a> VertexInputAttributeDescription2EXT<'a> {
37859    #[inline]
37860    pub fn location(mut self, location: u32) -> Self {
37861        self.location = location;
37862        self
37863    }
37864    #[inline]
37865    pub fn binding(mut self, binding: u32) -> Self {
37866        self.binding = binding;
37867        self
37868    }
37869    #[inline]
37870    pub fn format(mut self, format: Format) -> Self {
37871        self.format = format;
37872        self
37873    }
37874    #[inline]
37875    pub fn offset(mut self, offset: u32) -> Self {
37876        self.offset = offset;
37877        self
37878    }
37879}
37880#[repr(C)]
37881#[cfg_attr(feature = "debug", derive(Debug))]
37882#[derive(Copy, Clone)]
37883#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceColorWriteEnableFeaturesEXT.html>"]
37884#[must_use]
37885pub struct PhysicalDeviceColorWriteEnableFeaturesEXT<'a> {
37886    pub s_type: StructureType,
37887    pub p_next: *mut c_void,
37888    pub color_write_enable: Bool32,
37889    pub _marker: PhantomData<&'a ()>,
37890}
37891unsafe impl Send for PhysicalDeviceColorWriteEnableFeaturesEXT<'_> {}
37892unsafe impl Sync for PhysicalDeviceColorWriteEnableFeaturesEXT<'_> {}
37893impl ::core::default::Default for PhysicalDeviceColorWriteEnableFeaturesEXT<'_> {
37894    #[inline]
37895    fn default() -> Self {
37896        Self {
37897            s_type: Self::STRUCTURE_TYPE,
37898            p_next: ::core::ptr::null_mut(),
37899            color_write_enable: Bool32::default(),
37900            _marker: PhantomData,
37901        }
37902    }
37903}
37904unsafe impl<'a> TaggedStructure for PhysicalDeviceColorWriteEnableFeaturesEXT<'a> {
37905    const STRUCTURE_TYPE: StructureType =
37906        StructureType::PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT;
37907}
37908unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceColorWriteEnableFeaturesEXT<'_> {}
37909unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceColorWriteEnableFeaturesEXT<'_> {}
37910impl<'a> PhysicalDeviceColorWriteEnableFeaturesEXT<'a> {
37911    #[inline]
37912    pub fn color_write_enable(mut self, color_write_enable: bool) -> Self {
37913        self.color_write_enable = color_write_enable.into();
37914        self
37915    }
37916}
37917#[repr(C)]
37918#[cfg_attr(feature = "debug", derive(Debug))]
37919#[derive(Copy, Clone)]
37920#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineColorWriteCreateInfoEXT.html>"]
37921#[must_use]
37922pub struct PipelineColorWriteCreateInfoEXT<'a> {
37923    pub s_type: StructureType,
37924    pub p_next: *const c_void,
37925    pub attachment_count: u32,
37926    pub p_color_write_enables: *const Bool32,
37927    pub _marker: PhantomData<&'a ()>,
37928}
37929unsafe impl Send for PipelineColorWriteCreateInfoEXT<'_> {}
37930unsafe impl Sync for PipelineColorWriteCreateInfoEXT<'_> {}
37931impl ::core::default::Default for PipelineColorWriteCreateInfoEXT<'_> {
37932    #[inline]
37933    fn default() -> Self {
37934        Self {
37935            s_type: Self::STRUCTURE_TYPE,
37936            p_next: ::core::ptr::null(),
37937            attachment_count: u32::default(),
37938            p_color_write_enables: ::core::ptr::null(),
37939            _marker: PhantomData,
37940        }
37941    }
37942}
37943unsafe impl<'a> TaggedStructure for PipelineColorWriteCreateInfoEXT<'a> {
37944    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_COLOR_WRITE_CREATE_INFO_EXT;
37945}
37946unsafe impl ExtendsPipelineColorBlendStateCreateInfo for PipelineColorWriteCreateInfoEXT<'_> {}
37947impl<'a> PipelineColorWriteCreateInfoEXT<'a> {
37948    #[inline]
37949    pub fn color_write_enables(mut self, color_write_enables: &'a [Bool32]) -> Self {
37950        self.attachment_count = color_write_enables.len() as _;
37951        self.p_color_write_enables = color_write_enables.as_ptr();
37952        self
37953    }
37954}
37955#[repr(C)]
37956#[cfg_attr(feature = "debug", derive(Debug))]
37957#[derive(Copy, Clone)]
37958#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryBarrier2.html>"]
37959#[must_use]
37960pub struct MemoryBarrier2<'a> {
37961    pub s_type: StructureType,
37962    pub p_next: *const c_void,
37963    pub src_stage_mask: PipelineStageFlags2,
37964    pub src_access_mask: AccessFlags2,
37965    pub dst_stage_mask: PipelineStageFlags2,
37966    pub dst_access_mask: AccessFlags2,
37967    pub _marker: PhantomData<&'a ()>,
37968}
37969unsafe impl Send for MemoryBarrier2<'_> {}
37970unsafe impl Sync for MemoryBarrier2<'_> {}
37971impl ::core::default::Default for MemoryBarrier2<'_> {
37972    #[inline]
37973    fn default() -> Self {
37974        Self {
37975            s_type: Self::STRUCTURE_TYPE,
37976            p_next: ::core::ptr::null(),
37977            src_stage_mask: PipelineStageFlags2::default(),
37978            src_access_mask: AccessFlags2::default(),
37979            dst_stage_mask: PipelineStageFlags2::default(),
37980            dst_access_mask: AccessFlags2::default(),
37981            _marker: PhantomData,
37982        }
37983    }
37984}
37985unsafe impl<'a> TaggedStructure for MemoryBarrier2<'a> {
37986    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_BARRIER_2;
37987}
37988unsafe impl ExtendsSubpassDependency2 for MemoryBarrier2<'_> {}
37989impl<'a> MemoryBarrier2<'a> {
37990    #[inline]
37991    pub fn src_stage_mask(mut self, src_stage_mask: PipelineStageFlags2) -> Self {
37992        self.src_stage_mask = src_stage_mask;
37993        self
37994    }
37995    #[inline]
37996    pub fn src_access_mask(mut self, src_access_mask: AccessFlags2) -> Self {
37997        self.src_access_mask = src_access_mask;
37998        self
37999    }
38000    #[inline]
38001    pub fn dst_stage_mask(mut self, dst_stage_mask: PipelineStageFlags2) -> Self {
38002        self.dst_stage_mask = dst_stage_mask;
38003        self
38004    }
38005    #[inline]
38006    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags2) -> Self {
38007        self.dst_access_mask = dst_access_mask;
38008        self
38009    }
38010}
38011#[repr(C)]
38012#[cfg_attr(feature = "debug", derive(Debug))]
38013#[derive(Copy, Clone)]
38014#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageMemoryBarrier2.html>"]
38015#[must_use]
38016pub struct ImageMemoryBarrier2<'a> {
38017    pub s_type: StructureType,
38018    pub p_next: *const c_void,
38019    pub src_stage_mask: PipelineStageFlags2,
38020    pub src_access_mask: AccessFlags2,
38021    pub dst_stage_mask: PipelineStageFlags2,
38022    pub dst_access_mask: AccessFlags2,
38023    pub old_layout: ImageLayout,
38024    pub new_layout: ImageLayout,
38025    pub src_queue_family_index: u32,
38026    pub dst_queue_family_index: u32,
38027    pub image: Image,
38028    pub subresource_range: ImageSubresourceRange,
38029    pub _marker: PhantomData<&'a ()>,
38030}
38031unsafe impl Send for ImageMemoryBarrier2<'_> {}
38032unsafe impl Sync for ImageMemoryBarrier2<'_> {}
38033impl ::core::default::Default for ImageMemoryBarrier2<'_> {
38034    #[inline]
38035    fn default() -> Self {
38036        Self {
38037            s_type: Self::STRUCTURE_TYPE,
38038            p_next: ::core::ptr::null(),
38039            src_stage_mask: PipelineStageFlags2::default(),
38040            src_access_mask: AccessFlags2::default(),
38041            dst_stage_mask: PipelineStageFlags2::default(),
38042            dst_access_mask: AccessFlags2::default(),
38043            old_layout: ImageLayout::default(),
38044            new_layout: ImageLayout::default(),
38045            src_queue_family_index: u32::default(),
38046            dst_queue_family_index: u32::default(),
38047            image: Image::default(),
38048            subresource_range: ImageSubresourceRange::default(),
38049            _marker: PhantomData,
38050        }
38051    }
38052}
38053unsafe impl<'a> TaggedStructure for ImageMemoryBarrier2<'a> {
38054    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_MEMORY_BARRIER_2;
38055}
38056pub unsafe trait ExtendsImageMemoryBarrier2 {}
38057impl<'a> ImageMemoryBarrier2<'a> {
38058    #[inline]
38059    pub fn src_stage_mask(mut self, src_stage_mask: PipelineStageFlags2) -> Self {
38060        self.src_stage_mask = src_stage_mask;
38061        self
38062    }
38063    #[inline]
38064    pub fn src_access_mask(mut self, src_access_mask: AccessFlags2) -> Self {
38065        self.src_access_mask = src_access_mask;
38066        self
38067    }
38068    #[inline]
38069    pub fn dst_stage_mask(mut self, dst_stage_mask: PipelineStageFlags2) -> Self {
38070        self.dst_stage_mask = dst_stage_mask;
38071        self
38072    }
38073    #[inline]
38074    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags2) -> Self {
38075        self.dst_access_mask = dst_access_mask;
38076        self
38077    }
38078    #[inline]
38079    pub fn old_layout(mut self, old_layout: ImageLayout) -> Self {
38080        self.old_layout = old_layout;
38081        self
38082    }
38083    #[inline]
38084    pub fn new_layout(mut self, new_layout: ImageLayout) -> Self {
38085        self.new_layout = new_layout;
38086        self
38087    }
38088    #[inline]
38089    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
38090        self.src_queue_family_index = src_queue_family_index;
38091        self
38092    }
38093    #[inline]
38094    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
38095        self.dst_queue_family_index = dst_queue_family_index;
38096        self
38097    }
38098    #[inline]
38099    pub fn image(mut self, image: Image) -> Self {
38100        self.image = image;
38101        self
38102    }
38103    #[inline]
38104    pub fn subresource_range(mut self, subresource_range: ImageSubresourceRange) -> Self {
38105        self.subresource_range = subresource_range;
38106        self
38107    }
38108    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
38109    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
38110    #[doc = r" valid extension structs can be pushed into the chain."]
38111    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
38112    #[doc = r" chain will look like `A -> D -> B -> C`."]
38113    pub fn push_next<T: ExtendsImageMemoryBarrier2 + ?Sized>(mut self, next: &'a mut T) -> Self {
38114        unsafe {
38115            let next_ptr = <*const T>::cast(next);
38116            let last_next = ptr_chain_iter(next).last().unwrap();
38117            (*last_next).p_next = self.p_next as _;
38118            self.p_next = next_ptr;
38119        }
38120        self
38121    }
38122}
38123#[repr(C)]
38124#[cfg_attr(feature = "debug", derive(Debug))]
38125#[derive(Copy, Clone)]
38126#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferMemoryBarrier2.html>"]
38127#[must_use]
38128pub struct BufferMemoryBarrier2<'a> {
38129    pub s_type: StructureType,
38130    pub p_next: *const c_void,
38131    pub src_stage_mask: PipelineStageFlags2,
38132    pub src_access_mask: AccessFlags2,
38133    pub dst_stage_mask: PipelineStageFlags2,
38134    pub dst_access_mask: AccessFlags2,
38135    pub src_queue_family_index: u32,
38136    pub dst_queue_family_index: u32,
38137    pub buffer: Buffer,
38138    pub offset: DeviceSize,
38139    pub size: DeviceSize,
38140    pub _marker: PhantomData<&'a ()>,
38141}
38142unsafe impl Send for BufferMemoryBarrier2<'_> {}
38143unsafe impl Sync for BufferMemoryBarrier2<'_> {}
38144impl ::core::default::Default for BufferMemoryBarrier2<'_> {
38145    #[inline]
38146    fn default() -> Self {
38147        Self {
38148            s_type: Self::STRUCTURE_TYPE,
38149            p_next: ::core::ptr::null(),
38150            src_stage_mask: PipelineStageFlags2::default(),
38151            src_access_mask: AccessFlags2::default(),
38152            dst_stage_mask: PipelineStageFlags2::default(),
38153            dst_access_mask: AccessFlags2::default(),
38154            src_queue_family_index: u32::default(),
38155            dst_queue_family_index: u32::default(),
38156            buffer: Buffer::default(),
38157            offset: DeviceSize::default(),
38158            size: DeviceSize::default(),
38159            _marker: PhantomData,
38160        }
38161    }
38162}
38163unsafe impl<'a> TaggedStructure for BufferMemoryBarrier2<'a> {
38164    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_MEMORY_BARRIER_2;
38165}
38166pub unsafe trait ExtendsBufferMemoryBarrier2 {}
38167impl<'a> BufferMemoryBarrier2<'a> {
38168    #[inline]
38169    pub fn src_stage_mask(mut self, src_stage_mask: PipelineStageFlags2) -> Self {
38170        self.src_stage_mask = src_stage_mask;
38171        self
38172    }
38173    #[inline]
38174    pub fn src_access_mask(mut self, src_access_mask: AccessFlags2) -> Self {
38175        self.src_access_mask = src_access_mask;
38176        self
38177    }
38178    #[inline]
38179    pub fn dst_stage_mask(mut self, dst_stage_mask: PipelineStageFlags2) -> Self {
38180        self.dst_stage_mask = dst_stage_mask;
38181        self
38182    }
38183    #[inline]
38184    pub fn dst_access_mask(mut self, dst_access_mask: AccessFlags2) -> Self {
38185        self.dst_access_mask = dst_access_mask;
38186        self
38187    }
38188    #[inline]
38189    pub fn src_queue_family_index(mut self, src_queue_family_index: u32) -> Self {
38190        self.src_queue_family_index = src_queue_family_index;
38191        self
38192    }
38193    #[inline]
38194    pub fn dst_queue_family_index(mut self, dst_queue_family_index: u32) -> Self {
38195        self.dst_queue_family_index = dst_queue_family_index;
38196        self
38197    }
38198    #[inline]
38199    pub fn buffer(mut self, buffer: Buffer) -> Self {
38200        self.buffer = buffer;
38201        self
38202    }
38203    #[inline]
38204    pub fn offset(mut self, offset: DeviceSize) -> Self {
38205        self.offset = offset;
38206        self
38207    }
38208    #[inline]
38209    pub fn size(mut self, size: DeviceSize) -> Self {
38210        self.size = size;
38211        self
38212    }
38213    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
38214    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
38215    #[doc = r" valid extension structs can be pushed into the chain."]
38216    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
38217    #[doc = r" chain will look like `A -> D -> B -> C`."]
38218    pub fn push_next<T: ExtendsBufferMemoryBarrier2 + ?Sized>(mut self, next: &'a mut T) -> Self {
38219        unsafe {
38220            let next_ptr = <*const T>::cast(next);
38221            let last_next = ptr_chain_iter(next).last().unwrap();
38222            (*last_next).p_next = self.p_next as _;
38223            self.p_next = next_ptr;
38224        }
38225        self
38226    }
38227}
38228#[repr(C)]
38229#[cfg_attr(feature = "debug", derive(Debug))]
38230#[derive(Copy, Clone)]
38231#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDependencyInfo.html>"]
38232#[must_use]
38233pub struct DependencyInfo<'a> {
38234    pub s_type: StructureType,
38235    pub p_next: *const c_void,
38236    pub dependency_flags: DependencyFlags,
38237    pub memory_barrier_count: u32,
38238    pub p_memory_barriers: *const MemoryBarrier2<'a>,
38239    pub buffer_memory_barrier_count: u32,
38240    pub p_buffer_memory_barriers: *const BufferMemoryBarrier2<'a>,
38241    pub image_memory_barrier_count: u32,
38242    pub p_image_memory_barriers: *const ImageMemoryBarrier2<'a>,
38243    pub _marker: PhantomData<&'a ()>,
38244}
38245unsafe impl Send for DependencyInfo<'_> {}
38246unsafe impl Sync for DependencyInfo<'_> {}
38247impl ::core::default::Default for DependencyInfo<'_> {
38248    #[inline]
38249    fn default() -> Self {
38250        Self {
38251            s_type: Self::STRUCTURE_TYPE,
38252            p_next: ::core::ptr::null(),
38253            dependency_flags: DependencyFlags::default(),
38254            memory_barrier_count: u32::default(),
38255            p_memory_barriers: ::core::ptr::null(),
38256            buffer_memory_barrier_count: u32::default(),
38257            p_buffer_memory_barriers: ::core::ptr::null(),
38258            image_memory_barrier_count: u32::default(),
38259            p_image_memory_barriers: ::core::ptr::null(),
38260            _marker: PhantomData,
38261        }
38262    }
38263}
38264unsafe impl<'a> TaggedStructure for DependencyInfo<'a> {
38265    const STRUCTURE_TYPE: StructureType = StructureType::DEPENDENCY_INFO;
38266}
38267impl<'a> DependencyInfo<'a> {
38268    #[inline]
38269    pub fn dependency_flags(mut self, dependency_flags: DependencyFlags) -> Self {
38270        self.dependency_flags = dependency_flags;
38271        self
38272    }
38273    #[inline]
38274    pub fn memory_barriers(mut self, memory_barriers: &'a [MemoryBarrier2<'a>]) -> Self {
38275        self.memory_barrier_count = memory_barriers.len() as _;
38276        self.p_memory_barriers = memory_barriers.as_ptr();
38277        self
38278    }
38279    #[inline]
38280    pub fn buffer_memory_barriers(
38281        mut self,
38282        buffer_memory_barriers: &'a [BufferMemoryBarrier2<'a>],
38283    ) -> Self {
38284        self.buffer_memory_barrier_count = buffer_memory_barriers.len() as _;
38285        self.p_buffer_memory_barriers = buffer_memory_barriers.as_ptr();
38286        self
38287    }
38288    #[inline]
38289    pub fn image_memory_barriers(
38290        mut self,
38291        image_memory_barriers: &'a [ImageMemoryBarrier2<'a>],
38292    ) -> Self {
38293        self.image_memory_barrier_count = image_memory_barriers.len() as _;
38294        self.p_image_memory_barriers = image_memory_barriers.as_ptr();
38295        self
38296    }
38297}
38298#[repr(C)]
38299#[cfg_attr(feature = "debug", derive(Debug))]
38300#[derive(Copy, Clone)]
38301#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSemaphoreSubmitInfo.html>"]
38302#[must_use]
38303pub struct SemaphoreSubmitInfo<'a> {
38304    pub s_type: StructureType,
38305    pub p_next: *const c_void,
38306    pub semaphore: Semaphore,
38307    pub value: u64,
38308    pub stage_mask: PipelineStageFlags2,
38309    pub device_index: u32,
38310    pub _marker: PhantomData<&'a ()>,
38311}
38312unsafe impl Send for SemaphoreSubmitInfo<'_> {}
38313unsafe impl Sync for SemaphoreSubmitInfo<'_> {}
38314impl ::core::default::Default for SemaphoreSubmitInfo<'_> {
38315    #[inline]
38316    fn default() -> Self {
38317        Self {
38318            s_type: Self::STRUCTURE_TYPE,
38319            p_next: ::core::ptr::null(),
38320            semaphore: Semaphore::default(),
38321            value: u64::default(),
38322            stage_mask: PipelineStageFlags2::default(),
38323            device_index: u32::default(),
38324            _marker: PhantomData,
38325        }
38326    }
38327}
38328unsafe impl<'a> TaggedStructure for SemaphoreSubmitInfo<'a> {
38329    const STRUCTURE_TYPE: StructureType = StructureType::SEMAPHORE_SUBMIT_INFO;
38330}
38331impl<'a> SemaphoreSubmitInfo<'a> {
38332    #[inline]
38333    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
38334        self.semaphore = semaphore;
38335        self
38336    }
38337    #[inline]
38338    pub fn value(mut self, value: u64) -> Self {
38339        self.value = value;
38340        self
38341    }
38342    #[inline]
38343    pub fn stage_mask(mut self, stage_mask: PipelineStageFlags2) -> Self {
38344        self.stage_mask = stage_mask;
38345        self
38346    }
38347    #[inline]
38348    pub fn device_index(mut self, device_index: u32) -> Self {
38349        self.device_index = device_index;
38350        self
38351    }
38352}
38353#[repr(C)]
38354#[cfg_attr(feature = "debug", derive(Debug))]
38355#[derive(Copy, Clone)]
38356#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferSubmitInfo.html>"]
38357#[must_use]
38358pub struct CommandBufferSubmitInfo<'a> {
38359    pub s_type: StructureType,
38360    pub p_next: *const c_void,
38361    pub command_buffer: CommandBuffer,
38362    pub device_mask: u32,
38363    pub _marker: PhantomData<&'a ()>,
38364}
38365unsafe impl Send for CommandBufferSubmitInfo<'_> {}
38366unsafe impl Sync for CommandBufferSubmitInfo<'_> {}
38367impl ::core::default::Default for CommandBufferSubmitInfo<'_> {
38368    #[inline]
38369    fn default() -> Self {
38370        Self {
38371            s_type: Self::STRUCTURE_TYPE,
38372            p_next: ::core::ptr::null(),
38373            command_buffer: CommandBuffer::default(),
38374            device_mask: u32::default(),
38375            _marker: PhantomData,
38376        }
38377    }
38378}
38379unsafe impl<'a> TaggedStructure for CommandBufferSubmitInfo<'a> {
38380    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_BUFFER_SUBMIT_INFO;
38381}
38382pub unsafe trait ExtendsCommandBufferSubmitInfo {}
38383impl<'a> CommandBufferSubmitInfo<'a> {
38384    #[inline]
38385    pub fn command_buffer(mut self, command_buffer: CommandBuffer) -> Self {
38386        self.command_buffer = command_buffer;
38387        self
38388    }
38389    #[inline]
38390    pub fn device_mask(mut self, device_mask: u32) -> Self {
38391        self.device_mask = device_mask;
38392        self
38393    }
38394    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
38395    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
38396    #[doc = r" valid extension structs can be pushed into the chain."]
38397    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
38398    #[doc = r" chain will look like `A -> D -> B -> C`."]
38399    pub fn push_next<T: ExtendsCommandBufferSubmitInfo + ?Sized>(
38400        mut self,
38401        next: &'a mut T,
38402    ) -> Self {
38403        unsafe {
38404            let next_ptr = <*const T>::cast(next);
38405            let last_next = ptr_chain_iter(next).last().unwrap();
38406            (*last_next).p_next = self.p_next as _;
38407            self.p_next = next_ptr;
38408        }
38409        self
38410    }
38411}
38412#[repr(C)]
38413#[cfg_attr(feature = "debug", derive(Debug))]
38414#[derive(Copy, Clone)]
38415#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubmitInfo2.html>"]
38416#[must_use]
38417pub struct SubmitInfo2<'a> {
38418    pub s_type: StructureType,
38419    pub p_next: *const c_void,
38420    pub flags: SubmitFlags,
38421    pub wait_semaphore_info_count: u32,
38422    pub p_wait_semaphore_infos: *const SemaphoreSubmitInfo<'a>,
38423    pub command_buffer_info_count: u32,
38424    pub p_command_buffer_infos: *const CommandBufferSubmitInfo<'a>,
38425    pub signal_semaphore_info_count: u32,
38426    pub p_signal_semaphore_infos: *const SemaphoreSubmitInfo<'a>,
38427    pub _marker: PhantomData<&'a ()>,
38428}
38429unsafe impl Send for SubmitInfo2<'_> {}
38430unsafe impl Sync for SubmitInfo2<'_> {}
38431impl ::core::default::Default for SubmitInfo2<'_> {
38432    #[inline]
38433    fn default() -> Self {
38434        Self {
38435            s_type: Self::STRUCTURE_TYPE,
38436            p_next: ::core::ptr::null(),
38437            flags: SubmitFlags::default(),
38438            wait_semaphore_info_count: u32::default(),
38439            p_wait_semaphore_infos: ::core::ptr::null(),
38440            command_buffer_info_count: u32::default(),
38441            p_command_buffer_infos: ::core::ptr::null(),
38442            signal_semaphore_info_count: u32::default(),
38443            p_signal_semaphore_infos: ::core::ptr::null(),
38444            _marker: PhantomData,
38445        }
38446    }
38447}
38448unsafe impl<'a> TaggedStructure for SubmitInfo2<'a> {
38449    const STRUCTURE_TYPE: StructureType = StructureType::SUBMIT_INFO_2;
38450}
38451pub unsafe trait ExtendsSubmitInfo2 {}
38452impl<'a> SubmitInfo2<'a> {
38453    #[inline]
38454    pub fn flags(mut self, flags: SubmitFlags) -> Self {
38455        self.flags = flags;
38456        self
38457    }
38458    #[inline]
38459    pub fn wait_semaphore_infos(
38460        mut self,
38461        wait_semaphore_infos: &'a [SemaphoreSubmitInfo<'a>],
38462    ) -> Self {
38463        self.wait_semaphore_info_count = wait_semaphore_infos.len() as _;
38464        self.p_wait_semaphore_infos = wait_semaphore_infos.as_ptr();
38465        self
38466    }
38467    #[inline]
38468    pub fn command_buffer_infos(
38469        mut self,
38470        command_buffer_infos: &'a [CommandBufferSubmitInfo<'a>],
38471    ) -> Self {
38472        self.command_buffer_info_count = command_buffer_infos.len() as _;
38473        self.p_command_buffer_infos = command_buffer_infos.as_ptr();
38474        self
38475    }
38476    #[inline]
38477    pub fn signal_semaphore_infos(
38478        mut self,
38479        signal_semaphore_infos: &'a [SemaphoreSubmitInfo<'a>],
38480    ) -> Self {
38481        self.signal_semaphore_info_count = signal_semaphore_infos.len() as _;
38482        self.p_signal_semaphore_infos = signal_semaphore_infos.as_ptr();
38483        self
38484    }
38485    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
38486    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
38487    #[doc = r" valid extension structs can be pushed into the chain."]
38488    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
38489    #[doc = r" chain will look like `A -> D -> B -> C`."]
38490    pub fn push_next<T: ExtendsSubmitInfo2 + ?Sized>(mut self, next: &'a mut T) -> Self {
38491        unsafe {
38492            let next_ptr = <*const T>::cast(next);
38493            let last_next = ptr_chain_iter(next).last().unwrap();
38494            (*last_next).p_next = self.p_next as _;
38495            self.p_next = next_ptr;
38496        }
38497        self
38498    }
38499}
38500#[repr(C)]
38501#[cfg_attr(feature = "debug", derive(Debug))]
38502#[derive(Copy, Clone)]
38503#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyCheckpointProperties2NV.html>"]
38504#[must_use]
38505pub struct QueueFamilyCheckpointProperties2NV<'a> {
38506    pub s_type: StructureType,
38507    pub p_next: *mut c_void,
38508    pub checkpoint_execution_stage_mask: PipelineStageFlags2,
38509    pub _marker: PhantomData<&'a ()>,
38510}
38511unsafe impl Send for QueueFamilyCheckpointProperties2NV<'_> {}
38512unsafe impl Sync for QueueFamilyCheckpointProperties2NV<'_> {}
38513impl ::core::default::Default for QueueFamilyCheckpointProperties2NV<'_> {
38514    #[inline]
38515    fn default() -> Self {
38516        Self {
38517            s_type: Self::STRUCTURE_TYPE,
38518            p_next: ::core::ptr::null_mut(),
38519            checkpoint_execution_stage_mask: PipelineStageFlags2::default(),
38520            _marker: PhantomData,
38521        }
38522    }
38523}
38524unsafe impl<'a> TaggedStructure for QueueFamilyCheckpointProperties2NV<'a> {
38525    const STRUCTURE_TYPE: StructureType = StructureType::QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV;
38526}
38527unsafe impl ExtendsQueueFamilyProperties2 for QueueFamilyCheckpointProperties2NV<'_> {}
38528impl<'a> QueueFamilyCheckpointProperties2NV<'a> {
38529    #[inline]
38530    pub fn checkpoint_execution_stage_mask(
38531        mut self,
38532        checkpoint_execution_stage_mask: PipelineStageFlags2,
38533    ) -> Self {
38534        self.checkpoint_execution_stage_mask = checkpoint_execution_stage_mask;
38535        self
38536    }
38537}
38538#[repr(C)]
38539#[cfg_attr(feature = "debug", derive(Debug))]
38540#[derive(Copy, Clone)]
38541#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCheckpointData2NV.html>"]
38542#[must_use]
38543pub struct CheckpointData2NV<'a> {
38544    pub s_type: StructureType,
38545    pub p_next: *mut c_void,
38546    pub stage: PipelineStageFlags2,
38547    pub p_checkpoint_marker: *mut c_void,
38548    pub _marker: PhantomData<&'a ()>,
38549}
38550unsafe impl Send for CheckpointData2NV<'_> {}
38551unsafe impl Sync for CheckpointData2NV<'_> {}
38552impl ::core::default::Default for CheckpointData2NV<'_> {
38553    #[inline]
38554    fn default() -> Self {
38555        Self {
38556            s_type: Self::STRUCTURE_TYPE,
38557            p_next: ::core::ptr::null_mut(),
38558            stage: PipelineStageFlags2::default(),
38559            p_checkpoint_marker: ::core::ptr::null_mut(),
38560            _marker: PhantomData,
38561        }
38562    }
38563}
38564unsafe impl<'a> TaggedStructure for CheckpointData2NV<'a> {
38565    const STRUCTURE_TYPE: StructureType = StructureType::CHECKPOINT_DATA_2_NV;
38566}
38567impl<'a> CheckpointData2NV<'a> {
38568    #[inline]
38569    pub fn stage(mut self, stage: PipelineStageFlags2) -> Self {
38570        self.stage = stage;
38571        self
38572    }
38573    #[inline]
38574    pub fn checkpoint_marker(mut self, checkpoint_marker: *mut c_void) -> Self {
38575        self.p_checkpoint_marker = checkpoint_marker;
38576        self
38577    }
38578}
38579#[repr(C)]
38580#[cfg_attr(feature = "debug", derive(Debug))]
38581#[derive(Copy, Clone)]
38582#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSynchronization2Features.html>"]
38583#[must_use]
38584pub struct PhysicalDeviceSynchronization2Features<'a> {
38585    pub s_type: StructureType,
38586    pub p_next: *mut c_void,
38587    pub synchronization2: Bool32,
38588    pub _marker: PhantomData<&'a ()>,
38589}
38590unsafe impl Send for PhysicalDeviceSynchronization2Features<'_> {}
38591unsafe impl Sync for PhysicalDeviceSynchronization2Features<'_> {}
38592impl ::core::default::Default for PhysicalDeviceSynchronization2Features<'_> {
38593    #[inline]
38594    fn default() -> Self {
38595        Self {
38596            s_type: Self::STRUCTURE_TYPE,
38597            p_next: ::core::ptr::null_mut(),
38598            synchronization2: Bool32::default(),
38599            _marker: PhantomData,
38600        }
38601    }
38602}
38603unsafe impl<'a> TaggedStructure for PhysicalDeviceSynchronization2Features<'a> {
38604    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES;
38605}
38606unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSynchronization2Features<'_> {}
38607unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSynchronization2Features<'_> {}
38608impl<'a> PhysicalDeviceSynchronization2Features<'a> {
38609    #[inline]
38610    pub fn synchronization2(mut self, synchronization2: bool) -> Self {
38611        self.synchronization2 = synchronization2.into();
38612        self
38613    }
38614}
38615#[repr(C)]
38616#[cfg_attr(feature = "debug", derive(Debug))]
38617#[derive(Copy, Clone)]
38618#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceHostImageCopyFeaturesEXT.html>"]
38619#[must_use]
38620pub struct PhysicalDeviceHostImageCopyFeaturesEXT<'a> {
38621    pub s_type: StructureType,
38622    pub p_next: *mut c_void,
38623    pub host_image_copy: Bool32,
38624    pub _marker: PhantomData<&'a ()>,
38625}
38626unsafe impl Send for PhysicalDeviceHostImageCopyFeaturesEXT<'_> {}
38627unsafe impl Sync for PhysicalDeviceHostImageCopyFeaturesEXT<'_> {}
38628impl ::core::default::Default for PhysicalDeviceHostImageCopyFeaturesEXT<'_> {
38629    #[inline]
38630    fn default() -> Self {
38631        Self {
38632            s_type: Self::STRUCTURE_TYPE,
38633            p_next: ::core::ptr::null_mut(),
38634            host_image_copy: Bool32::default(),
38635            _marker: PhantomData,
38636        }
38637    }
38638}
38639unsafe impl<'a> TaggedStructure for PhysicalDeviceHostImageCopyFeaturesEXT<'a> {
38640    const STRUCTURE_TYPE: StructureType =
38641        StructureType::PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT;
38642}
38643unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceHostImageCopyFeaturesEXT<'_> {}
38644unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceHostImageCopyFeaturesEXT<'_> {}
38645impl<'a> PhysicalDeviceHostImageCopyFeaturesEXT<'a> {
38646    #[inline]
38647    pub fn host_image_copy(mut self, host_image_copy: bool) -> Self {
38648        self.host_image_copy = host_image_copy.into();
38649        self
38650    }
38651}
38652#[repr(C)]
38653#[cfg_attr(feature = "debug", derive(Debug))]
38654#[derive(Copy, Clone)]
38655#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceHostImageCopyPropertiesEXT.html>"]
38656#[must_use]
38657pub struct PhysicalDeviceHostImageCopyPropertiesEXT<'a> {
38658    pub s_type: StructureType,
38659    pub p_next: *mut c_void,
38660    pub copy_src_layout_count: u32,
38661    pub p_copy_src_layouts: *mut ImageLayout,
38662    pub copy_dst_layout_count: u32,
38663    pub p_copy_dst_layouts: *mut ImageLayout,
38664    pub optimal_tiling_layout_uuid: [u8; UUID_SIZE],
38665    pub identical_memory_type_requirements: Bool32,
38666    pub _marker: PhantomData<&'a ()>,
38667}
38668unsafe impl Send for PhysicalDeviceHostImageCopyPropertiesEXT<'_> {}
38669unsafe impl Sync for PhysicalDeviceHostImageCopyPropertiesEXT<'_> {}
38670impl ::core::default::Default for PhysicalDeviceHostImageCopyPropertiesEXT<'_> {
38671    #[inline]
38672    fn default() -> Self {
38673        Self {
38674            s_type: Self::STRUCTURE_TYPE,
38675            p_next: ::core::ptr::null_mut(),
38676            copy_src_layout_count: u32::default(),
38677            p_copy_src_layouts: ::core::ptr::null_mut(),
38678            copy_dst_layout_count: u32::default(),
38679            p_copy_dst_layouts: ::core::ptr::null_mut(),
38680            optimal_tiling_layout_uuid: unsafe { ::core::mem::zeroed() },
38681            identical_memory_type_requirements: Bool32::default(),
38682            _marker: PhantomData,
38683        }
38684    }
38685}
38686unsafe impl<'a> TaggedStructure for PhysicalDeviceHostImageCopyPropertiesEXT<'a> {
38687    const STRUCTURE_TYPE: StructureType =
38688        StructureType::PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT;
38689}
38690unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceHostImageCopyPropertiesEXT<'_> {}
38691impl<'a> PhysicalDeviceHostImageCopyPropertiesEXT<'a> {
38692    #[inline]
38693    pub fn copy_src_layouts(mut self, copy_src_layouts: &'a mut [ImageLayout]) -> Self {
38694        self.copy_src_layout_count = copy_src_layouts.len() as _;
38695        self.p_copy_src_layouts = copy_src_layouts.as_mut_ptr();
38696        self
38697    }
38698    #[inline]
38699    pub fn copy_dst_layouts(mut self, copy_dst_layouts: &'a mut [ImageLayout]) -> Self {
38700        self.copy_dst_layout_count = copy_dst_layouts.len() as _;
38701        self.p_copy_dst_layouts = copy_dst_layouts.as_mut_ptr();
38702        self
38703    }
38704    #[inline]
38705    pub fn optimal_tiling_layout_uuid(
38706        mut self,
38707        optimal_tiling_layout_uuid: [u8; UUID_SIZE],
38708    ) -> Self {
38709        self.optimal_tiling_layout_uuid = optimal_tiling_layout_uuid;
38710        self
38711    }
38712    #[inline]
38713    pub fn identical_memory_type_requirements(
38714        mut self,
38715        identical_memory_type_requirements: bool,
38716    ) -> Self {
38717        self.identical_memory_type_requirements = identical_memory_type_requirements.into();
38718        self
38719    }
38720}
38721#[repr(C)]
38722#[cfg_attr(feature = "debug", derive(Debug))]
38723#[derive(Copy, Clone)]
38724#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryToImageCopyEXT.html>"]
38725#[must_use]
38726pub struct MemoryToImageCopyEXT<'a> {
38727    pub s_type: StructureType,
38728    pub p_next: *const c_void,
38729    pub p_host_pointer: *const c_void,
38730    pub memory_row_length: u32,
38731    pub memory_image_height: u32,
38732    pub image_subresource: ImageSubresourceLayers,
38733    pub image_offset: Offset3D,
38734    pub image_extent: Extent3D,
38735    pub _marker: PhantomData<&'a ()>,
38736}
38737unsafe impl Send for MemoryToImageCopyEXT<'_> {}
38738unsafe impl Sync for MemoryToImageCopyEXT<'_> {}
38739impl ::core::default::Default for MemoryToImageCopyEXT<'_> {
38740    #[inline]
38741    fn default() -> Self {
38742        Self {
38743            s_type: Self::STRUCTURE_TYPE,
38744            p_next: ::core::ptr::null(),
38745            p_host_pointer: ::core::ptr::null(),
38746            memory_row_length: u32::default(),
38747            memory_image_height: u32::default(),
38748            image_subresource: ImageSubresourceLayers::default(),
38749            image_offset: Offset3D::default(),
38750            image_extent: Extent3D::default(),
38751            _marker: PhantomData,
38752        }
38753    }
38754}
38755unsafe impl<'a> TaggedStructure for MemoryToImageCopyEXT<'a> {
38756    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_TO_IMAGE_COPY_EXT;
38757}
38758impl<'a> MemoryToImageCopyEXT<'a> {
38759    #[inline]
38760    pub fn host_pointer(mut self, host_pointer: *const c_void) -> Self {
38761        self.p_host_pointer = host_pointer;
38762        self
38763    }
38764    #[inline]
38765    pub fn memory_row_length(mut self, memory_row_length: u32) -> Self {
38766        self.memory_row_length = memory_row_length;
38767        self
38768    }
38769    #[inline]
38770    pub fn memory_image_height(mut self, memory_image_height: u32) -> Self {
38771        self.memory_image_height = memory_image_height;
38772        self
38773    }
38774    #[inline]
38775    pub fn image_subresource(mut self, image_subresource: ImageSubresourceLayers) -> Self {
38776        self.image_subresource = image_subresource;
38777        self
38778    }
38779    #[inline]
38780    pub fn image_offset(mut self, image_offset: Offset3D) -> Self {
38781        self.image_offset = image_offset;
38782        self
38783    }
38784    #[inline]
38785    pub fn image_extent(mut self, image_extent: Extent3D) -> Self {
38786        self.image_extent = image_extent;
38787        self
38788    }
38789}
38790#[repr(C)]
38791#[cfg_attr(feature = "debug", derive(Debug))]
38792#[derive(Copy, Clone)]
38793#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageToMemoryCopyEXT.html>"]
38794#[must_use]
38795pub struct ImageToMemoryCopyEXT<'a> {
38796    pub s_type: StructureType,
38797    pub p_next: *const c_void,
38798    pub p_host_pointer: *mut c_void,
38799    pub memory_row_length: u32,
38800    pub memory_image_height: u32,
38801    pub image_subresource: ImageSubresourceLayers,
38802    pub image_offset: Offset3D,
38803    pub image_extent: Extent3D,
38804    pub _marker: PhantomData<&'a ()>,
38805}
38806unsafe impl Send for ImageToMemoryCopyEXT<'_> {}
38807unsafe impl Sync for ImageToMemoryCopyEXT<'_> {}
38808impl ::core::default::Default for ImageToMemoryCopyEXT<'_> {
38809    #[inline]
38810    fn default() -> Self {
38811        Self {
38812            s_type: Self::STRUCTURE_TYPE,
38813            p_next: ::core::ptr::null(),
38814            p_host_pointer: ::core::ptr::null_mut(),
38815            memory_row_length: u32::default(),
38816            memory_image_height: u32::default(),
38817            image_subresource: ImageSubresourceLayers::default(),
38818            image_offset: Offset3D::default(),
38819            image_extent: Extent3D::default(),
38820            _marker: PhantomData,
38821        }
38822    }
38823}
38824unsafe impl<'a> TaggedStructure for ImageToMemoryCopyEXT<'a> {
38825    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_TO_MEMORY_COPY_EXT;
38826}
38827impl<'a> ImageToMemoryCopyEXT<'a> {
38828    #[inline]
38829    pub fn host_pointer(mut self, host_pointer: *mut c_void) -> Self {
38830        self.p_host_pointer = host_pointer;
38831        self
38832    }
38833    #[inline]
38834    pub fn memory_row_length(mut self, memory_row_length: u32) -> Self {
38835        self.memory_row_length = memory_row_length;
38836        self
38837    }
38838    #[inline]
38839    pub fn memory_image_height(mut self, memory_image_height: u32) -> Self {
38840        self.memory_image_height = memory_image_height;
38841        self
38842    }
38843    #[inline]
38844    pub fn image_subresource(mut self, image_subresource: ImageSubresourceLayers) -> Self {
38845        self.image_subresource = image_subresource;
38846        self
38847    }
38848    #[inline]
38849    pub fn image_offset(mut self, image_offset: Offset3D) -> Self {
38850        self.image_offset = image_offset;
38851        self
38852    }
38853    #[inline]
38854    pub fn image_extent(mut self, image_extent: Extent3D) -> Self {
38855        self.image_extent = image_extent;
38856        self
38857    }
38858}
38859#[repr(C)]
38860#[cfg_attr(feature = "debug", derive(Debug))]
38861#[derive(Copy, Clone)]
38862#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryToImageInfoEXT.html>"]
38863#[must_use]
38864pub struct CopyMemoryToImageInfoEXT<'a> {
38865    pub s_type: StructureType,
38866    pub p_next: *const c_void,
38867    pub flags: HostImageCopyFlagsEXT,
38868    pub dst_image: Image,
38869    pub dst_image_layout: ImageLayout,
38870    pub region_count: u32,
38871    pub p_regions: *const MemoryToImageCopyEXT<'a>,
38872    pub _marker: PhantomData<&'a ()>,
38873}
38874unsafe impl Send for CopyMemoryToImageInfoEXT<'_> {}
38875unsafe impl Sync for CopyMemoryToImageInfoEXT<'_> {}
38876impl ::core::default::Default for CopyMemoryToImageInfoEXT<'_> {
38877    #[inline]
38878    fn default() -> Self {
38879        Self {
38880            s_type: Self::STRUCTURE_TYPE,
38881            p_next: ::core::ptr::null(),
38882            flags: HostImageCopyFlagsEXT::default(),
38883            dst_image: Image::default(),
38884            dst_image_layout: ImageLayout::default(),
38885            region_count: u32::default(),
38886            p_regions: ::core::ptr::null(),
38887            _marker: PhantomData,
38888        }
38889    }
38890}
38891unsafe impl<'a> TaggedStructure for CopyMemoryToImageInfoEXT<'a> {
38892    const STRUCTURE_TYPE: StructureType = StructureType::COPY_MEMORY_TO_IMAGE_INFO_EXT;
38893}
38894impl<'a> CopyMemoryToImageInfoEXT<'a> {
38895    #[inline]
38896    pub fn flags(mut self, flags: HostImageCopyFlagsEXT) -> Self {
38897        self.flags = flags;
38898        self
38899    }
38900    #[inline]
38901    pub fn dst_image(mut self, dst_image: Image) -> Self {
38902        self.dst_image = dst_image;
38903        self
38904    }
38905    #[inline]
38906    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
38907        self.dst_image_layout = dst_image_layout;
38908        self
38909    }
38910    #[inline]
38911    pub fn regions(mut self, regions: &'a [MemoryToImageCopyEXT<'a>]) -> Self {
38912        self.region_count = regions.len() as _;
38913        self.p_regions = regions.as_ptr();
38914        self
38915    }
38916}
38917#[repr(C)]
38918#[cfg_attr(feature = "debug", derive(Debug))]
38919#[derive(Copy, Clone)]
38920#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyImageToMemoryInfoEXT.html>"]
38921#[must_use]
38922pub struct CopyImageToMemoryInfoEXT<'a> {
38923    pub s_type: StructureType,
38924    pub p_next: *const c_void,
38925    pub flags: HostImageCopyFlagsEXT,
38926    pub src_image: Image,
38927    pub src_image_layout: ImageLayout,
38928    pub region_count: u32,
38929    pub p_regions: *const ImageToMemoryCopyEXT<'a>,
38930    pub _marker: PhantomData<&'a ()>,
38931}
38932unsafe impl Send for CopyImageToMemoryInfoEXT<'_> {}
38933unsafe impl Sync for CopyImageToMemoryInfoEXT<'_> {}
38934impl ::core::default::Default for CopyImageToMemoryInfoEXT<'_> {
38935    #[inline]
38936    fn default() -> Self {
38937        Self {
38938            s_type: Self::STRUCTURE_TYPE,
38939            p_next: ::core::ptr::null(),
38940            flags: HostImageCopyFlagsEXT::default(),
38941            src_image: Image::default(),
38942            src_image_layout: ImageLayout::default(),
38943            region_count: u32::default(),
38944            p_regions: ::core::ptr::null(),
38945            _marker: PhantomData,
38946        }
38947    }
38948}
38949unsafe impl<'a> TaggedStructure for CopyImageToMemoryInfoEXT<'a> {
38950    const STRUCTURE_TYPE: StructureType = StructureType::COPY_IMAGE_TO_MEMORY_INFO_EXT;
38951}
38952impl<'a> CopyImageToMemoryInfoEXT<'a> {
38953    #[inline]
38954    pub fn flags(mut self, flags: HostImageCopyFlagsEXT) -> Self {
38955        self.flags = flags;
38956        self
38957    }
38958    #[inline]
38959    pub fn src_image(mut self, src_image: Image) -> Self {
38960        self.src_image = src_image;
38961        self
38962    }
38963    #[inline]
38964    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
38965        self.src_image_layout = src_image_layout;
38966        self
38967    }
38968    #[inline]
38969    pub fn regions(mut self, regions: &'a [ImageToMemoryCopyEXT<'a>]) -> Self {
38970        self.region_count = regions.len() as _;
38971        self.p_regions = regions.as_ptr();
38972        self
38973    }
38974}
38975#[repr(C)]
38976#[cfg_attr(feature = "debug", derive(Debug))]
38977#[derive(Copy, Clone)]
38978#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyImageToImageInfoEXT.html>"]
38979#[must_use]
38980pub struct CopyImageToImageInfoEXT<'a> {
38981    pub s_type: StructureType,
38982    pub p_next: *const c_void,
38983    pub flags: HostImageCopyFlagsEXT,
38984    pub src_image: Image,
38985    pub src_image_layout: ImageLayout,
38986    pub dst_image: Image,
38987    pub dst_image_layout: ImageLayout,
38988    pub region_count: u32,
38989    pub p_regions: *const ImageCopy2<'a>,
38990    pub _marker: PhantomData<&'a ()>,
38991}
38992unsafe impl Send for CopyImageToImageInfoEXT<'_> {}
38993unsafe impl Sync for CopyImageToImageInfoEXT<'_> {}
38994impl ::core::default::Default for CopyImageToImageInfoEXT<'_> {
38995    #[inline]
38996    fn default() -> Self {
38997        Self {
38998            s_type: Self::STRUCTURE_TYPE,
38999            p_next: ::core::ptr::null(),
39000            flags: HostImageCopyFlagsEXT::default(),
39001            src_image: Image::default(),
39002            src_image_layout: ImageLayout::default(),
39003            dst_image: Image::default(),
39004            dst_image_layout: ImageLayout::default(),
39005            region_count: u32::default(),
39006            p_regions: ::core::ptr::null(),
39007            _marker: PhantomData,
39008        }
39009    }
39010}
39011unsafe impl<'a> TaggedStructure for CopyImageToImageInfoEXT<'a> {
39012    const STRUCTURE_TYPE: StructureType = StructureType::COPY_IMAGE_TO_IMAGE_INFO_EXT;
39013}
39014impl<'a> CopyImageToImageInfoEXT<'a> {
39015    #[inline]
39016    pub fn flags(mut self, flags: HostImageCopyFlagsEXT) -> Self {
39017        self.flags = flags;
39018        self
39019    }
39020    #[inline]
39021    pub fn src_image(mut self, src_image: Image) -> Self {
39022        self.src_image = src_image;
39023        self
39024    }
39025    #[inline]
39026    pub fn src_image_layout(mut self, src_image_layout: ImageLayout) -> Self {
39027        self.src_image_layout = src_image_layout;
39028        self
39029    }
39030    #[inline]
39031    pub fn dst_image(mut self, dst_image: Image) -> Self {
39032        self.dst_image = dst_image;
39033        self
39034    }
39035    #[inline]
39036    pub fn dst_image_layout(mut self, dst_image_layout: ImageLayout) -> Self {
39037        self.dst_image_layout = dst_image_layout;
39038        self
39039    }
39040    #[inline]
39041    pub fn regions(mut self, regions: &'a [ImageCopy2<'a>]) -> Self {
39042        self.region_count = regions.len() as _;
39043        self.p_regions = regions.as_ptr();
39044        self
39045    }
39046}
39047#[repr(C)]
39048#[cfg_attr(feature = "debug", derive(Debug))]
39049#[derive(Copy, Clone)]
39050#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkHostImageLayoutTransitionInfoEXT.html>"]
39051#[must_use]
39052pub struct HostImageLayoutTransitionInfoEXT<'a> {
39053    pub s_type: StructureType,
39054    pub p_next: *const c_void,
39055    pub image: Image,
39056    pub old_layout: ImageLayout,
39057    pub new_layout: ImageLayout,
39058    pub subresource_range: ImageSubresourceRange,
39059    pub _marker: PhantomData<&'a ()>,
39060}
39061unsafe impl Send for HostImageLayoutTransitionInfoEXT<'_> {}
39062unsafe impl Sync for HostImageLayoutTransitionInfoEXT<'_> {}
39063impl ::core::default::Default for HostImageLayoutTransitionInfoEXT<'_> {
39064    #[inline]
39065    fn default() -> Self {
39066        Self {
39067            s_type: Self::STRUCTURE_TYPE,
39068            p_next: ::core::ptr::null(),
39069            image: Image::default(),
39070            old_layout: ImageLayout::default(),
39071            new_layout: ImageLayout::default(),
39072            subresource_range: ImageSubresourceRange::default(),
39073            _marker: PhantomData,
39074        }
39075    }
39076}
39077unsafe impl<'a> TaggedStructure for HostImageLayoutTransitionInfoEXT<'a> {
39078    const STRUCTURE_TYPE: StructureType = StructureType::HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT;
39079}
39080impl<'a> HostImageLayoutTransitionInfoEXT<'a> {
39081    #[inline]
39082    pub fn image(mut self, image: Image) -> Self {
39083        self.image = image;
39084        self
39085    }
39086    #[inline]
39087    pub fn old_layout(mut self, old_layout: ImageLayout) -> Self {
39088        self.old_layout = old_layout;
39089        self
39090    }
39091    #[inline]
39092    pub fn new_layout(mut self, new_layout: ImageLayout) -> Self {
39093        self.new_layout = new_layout;
39094        self
39095    }
39096    #[inline]
39097    pub fn subresource_range(mut self, subresource_range: ImageSubresourceRange) -> Self {
39098        self.subresource_range = subresource_range;
39099        self
39100    }
39101}
39102#[repr(C)]
39103#[cfg_attr(feature = "debug", derive(Debug))]
39104#[derive(Copy, Clone)]
39105#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubresourceHostMemcpySizeEXT.html>"]
39106#[must_use]
39107pub struct SubresourceHostMemcpySizeEXT<'a> {
39108    pub s_type: StructureType,
39109    pub p_next: *mut c_void,
39110    pub size: DeviceSize,
39111    pub _marker: PhantomData<&'a ()>,
39112}
39113unsafe impl Send for SubresourceHostMemcpySizeEXT<'_> {}
39114unsafe impl Sync for SubresourceHostMemcpySizeEXT<'_> {}
39115impl ::core::default::Default for SubresourceHostMemcpySizeEXT<'_> {
39116    #[inline]
39117    fn default() -> Self {
39118        Self {
39119            s_type: Self::STRUCTURE_TYPE,
39120            p_next: ::core::ptr::null_mut(),
39121            size: DeviceSize::default(),
39122            _marker: PhantomData,
39123        }
39124    }
39125}
39126unsafe impl<'a> TaggedStructure for SubresourceHostMemcpySizeEXT<'a> {
39127    const STRUCTURE_TYPE: StructureType = StructureType::SUBRESOURCE_HOST_MEMCPY_SIZE_EXT;
39128}
39129unsafe impl ExtendsSubresourceLayout2KHR for SubresourceHostMemcpySizeEXT<'_> {}
39130impl<'a> SubresourceHostMemcpySizeEXT<'a> {
39131    #[inline]
39132    pub fn size(mut self, size: DeviceSize) -> Self {
39133        self.size = size;
39134        self
39135    }
39136}
39137#[repr(C)]
39138#[cfg_attr(feature = "debug", derive(Debug))]
39139#[derive(Copy, Clone)]
39140#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkHostImageCopyDevicePerformanceQueryEXT.html>"]
39141#[must_use]
39142pub struct HostImageCopyDevicePerformanceQueryEXT<'a> {
39143    pub s_type: StructureType,
39144    pub p_next: *mut c_void,
39145    pub optimal_device_access: Bool32,
39146    pub identical_memory_layout: Bool32,
39147    pub _marker: PhantomData<&'a ()>,
39148}
39149unsafe impl Send for HostImageCopyDevicePerformanceQueryEXT<'_> {}
39150unsafe impl Sync for HostImageCopyDevicePerformanceQueryEXT<'_> {}
39151impl ::core::default::Default for HostImageCopyDevicePerformanceQueryEXT<'_> {
39152    #[inline]
39153    fn default() -> Self {
39154        Self {
39155            s_type: Self::STRUCTURE_TYPE,
39156            p_next: ::core::ptr::null_mut(),
39157            optimal_device_access: Bool32::default(),
39158            identical_memory_layout: Bool32::default(),
39159            _marker: PhantomData,
39160        }
39161    }
39162}
39163unsafe impl<'a> TaggedStructure for HostImageCopyDevicePerformanceQueryEXT<'a> {
39164    const STRUCTURE_TYPE: StructureType =
39165        StructureType::HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT;
39166}
39167unsafe impl ExtendsImageFormatProperties2 for HostImageCopyDevicePerformanceQueryEXT<'_> {}
39168impl<'a> HostImageCopyDevicePerformanceQueryEXT<'a> {
39169    #[inline]
39170    pub fn optimal_device_access(mut self, optimal_device_access: bool) -> Self {
39171        self.optimal_device_access = optimal_device_access.into();
39172        self
39173    }
39174    #[inline]
39175    pub fn identical_memory_layout(mut self, identical_memory_layout: bool) -> Self {
39176        self.identical_memory_layout = identical_memory_layout.into();
39177        self
39178    }
39179}
39180#[repr(C)]
39181#[cfg_attr(feature = "debug", derive(Debug))]
39182#[derive(Copy, Clone)]
39183#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT.html>"]
39184#[must_use]
39185pub struct PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'a> {
39186    pub s_type: StructureType,
39187    pub p_next: *mut c_void,
39188    pub primitives_generated_query: Bool32,
39189    pub primitives_generated_query_with_rasterizer_discard: Bool32,
39190    pub primitives_generated_query_with_non_zero_streams: Bool32,
39191    pub _marker: PhantomData<&'a ()>,
39192}
39193unsafe impl Send for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'_> {}
39194unsafe impl Sync for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'_> {}
39195impl ::core::default::Default for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'_> {
39196    #[inline]
39197    fn default() -> Self {
39198        Self {
39199            s_type: Self::STRUCTURE_TYPE,
39200            p_next: ::core::ptr::null_mut(),
39201            primitives_generated_query: Bool32::default(),
39202            primitives_generated_query_with_rasterizer_discard: Bool32::default(),
39203            primitives_generated_query_with_non_zero_streams: Bool32::default(),
39204            _marker: PhantomData,
39205        }
39206    }
39207}
39208unsafe impl<'a> TaggedStructure for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'a> {
39209    const STRUCTURE_TYPE: StructureType =
39210        StructureType::PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT;
39211}
39212unsafe impl ExtendsPhysicalDeviceFeatures2
39213    for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'_>
39214{
39215}
39216unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'_> {}
39217impl<'a> PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT<'a> {
39218    #[inline]
39219    pub fn primitives_generated_query(mut self, primitives_generated_query: bool) -> Self {
39220        self.primitives_generated_query = primitives_generated_query.into();
39221        self
39222    }
39223    #[inline]
39224    pub fn primitives_generated_query_with_rasterizer_discard(
39225        mut self,
39226        primitives_generated_query_with_rasterizer_discard: bool,
39227    ) -> Self {
39228        self.primitives_generated_query_with_rasterizer_discard =
39229            primitives_generated_query_with_rasterizer_discard.into();
39230        self
39231    }
39232    #[inline]
39233    pub fn primitives_generated_query_with_non_zero_streams(
39234        mut self,
39235        primitives_generated_query_with_non_zero_streams: bool,
39236    ) -> Self {
39237        self.primitives_generated_query_with_non_zero_streams =
39238            primitives_generated_query_with_non_zero_streams.into();
39239        self
39240    }
39241}
39242#[repr(C)]
39243#[cfg_attr(feature = "debug", derive(Debug))]
39244#[derive(Copy, Clone)]
39245#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLegacyDitheringFeaturesEXT.html>"]
39246#[must_use]
39247pub struct PhysicalDeviceLegacyDitheringFeaturesEXT<'a> {
39248    pub s_type: StructureType,
39249    pub p_next: *mut c_void,
39250    pub legacy_dithering: Bool32,
39251    pub _marker: PhantomData<&'a ()>,
39252}
39253unsafe impl Send for PhysicalDeviceLegacyDitheringFeaturesEXT<'_> {}
39254unsafe impl Sync for PhysicalDeviceLegacyDitheringFeaturesEXT<'_> {}
39255impl ::core::default::Default for PhysicalDeviceLegacyDitheringFeaturesEXT<'_> {
39256    #[inline]
39257    fn default() -> Self {
39258        Self {
39259            s_type: Self::STRUCTURE_TYPE,
39260            p_next: ::core::ptr::null_mut(),
39261            legacy_dithering: Bool32::default(),
39262            _marker: PhantomData,
39263        }
39264    }
39265}
39266unsafe impl<'a> TaggedStructure for PhysicalDeviceLegacyDitheringFeaturesEXT<'a> {
39267    const STRUCTURE_TYPE: StructureType =
39268        StructureType::PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT;
39269}
39270unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceLegacyDitheringFeaturesEXT<'_> {}
39271unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceLegacyDitheringFeaturesEXT<'_> {}
39272impl<'a> PhysicalDeviceLegacyDitheringFeaturesEXT<'a> {
39273    #[inline]
39274    pub fn legacy_dithering(mut self, legacy_dithering: bool) -> Self {
39275        self.legacy_dithering = legacy_dithering.into();
39276        self
39277    }
39278}
39279#[repr(C)]
39280#[cfg_attr(feature = "debug", derive(Debug))]
39281#[derive(Copy, Clone)]
39282#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT.html>"]
39283#[must_use]
39284pub struct PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'a> {
39285    pub s_type: StructureType,
39286    pub p_next: *mut c_void,
39287    pub multisampled_render_to_single_sampled: Bool32,
39288    pub _marker: PhantomData<&'a ()>,
39289}
39290unsafe impl Send for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'_> {}
39291unsafe impl Sync for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'_> {}
39292impl ::core::default::Default for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'_> {
39293    #[inline]
39294    fn default() -> Self {
39295        Self {
39296            s_type: Self::STRUCTURE_TYPE,
39297            p_next: ::core::ptr::null_mut(),
39298            multisampled_render_to_single_sampled: Bool32::default(),
39299            _marker: PhantomData,
39300        }
39301    }
39302}
39303unsafe impl<'a> TaggedStructure for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'a> {
39304    const STRUCTURE_TYPE: StructureType =
39305        StructureType::PHYSICAL_DEVICE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT;
39306}
39307unsafe impl ExtendsPhysicalDeviceFeatures2
39308    for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'_>
39309{
39310}
39311unsafe impl ExtendsDeviceCreateInfo
39312    for PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'_>
39313{
39314}
39315impl<'a> PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT<'a> {
39316    #[inline]
39317    pub fn multisampled_render_to_single_sampled(
39318        mut self,
39319        multisampled_render_to_single_sampled: bool,
39320    ) -> Self {
39321        self.multisampled_render_to_single_sampled = multisampled_render_to_single_sampled.into();
39322        self
39323    }
39324}
39325#[repr(C)]
39326#[cfg_attr(feature = "debug", derive(Debug))]
39327#[derive(Copy, Clone)]
39328#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubpassResolvePerformanceQueryEXT.html>"]
39329#[must_use]
39330pub struct SubpassResolvePerformanceQueryEXT<'a> {
39331    pub s_type: StructureType,
39332    pub p_next: *mut c_void,
39333    pub optimal: Bool32,
39334    pub _marker: PhantomData<&'a ()>,
39335}
39336unsafe impl Send for SubpassResolvePerformanceQueryEXT<'_> {}
39337unsafe impl Sync for SubpassResolvePerformanceQueryEXT<'_> {}
39338impl ::core::default::Default for SubpassResolvePerformanceQueryEXT<'_> {
39339    #[inline]
39340    fn default() -> Self {
39341        Self {
39342            s_type: Self::STRUCTURE_TYPE,
39343            p_next: ::core::ptr::null_mut(),
39344            optimal: Bool32::default(),
39345            _marker: PhantomData,
39346        }
39347    }
39348}
39349unsafe impl<'a> TaggedStructure for SubpassResolvePerformanceQueryEXT<'a> {
39350    const STRUCTURE_TYPE: StructureType = StructureType::SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT;
39351}
39352unsafe impl ExtendsFormatProperties2 for SubpassResolvePerformanceQueryEXT<'_> {}
39353impl<'a> SubpassResolvePerformanceQueryEXT<'a> {
39354    #[inline]
39355    pub fn optimal(mut self, optimal: bool) -> Self {
39356        self.optimal = optimal.into();
39357        self
39358    }
39359}
39360#[repr(C)]
39361#[cfg_attr(feature = "debug", derive(Debug))]
39362#[derive(Copy, Clone)]
39363#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultisampledRenderToSingleSampledInfoEXT.html>"]
39364#[must_use]
39365pub struct MultisampledRenderToSingleSampledInfoEXT<'a> {
39366    pub s_type: StructureType,
39367    pub p_next: *const c_void,
39368    pub multisampled_render_to_single_sampled_enable: Bool32,
39369    pub rasterization_samples: SampleCountFlags,
39370    pub _marker: PhantomData<&'a ()>,
39371}
39372unsafe impl Send for MultisampledRenderToSingleSampledInfoEXT<'_> {}
39373unsafe impl Sync for MultisampledRenderToSingleSampledInfoEXT<'_> {}
39374impl ::core::default::Default for MultisampledRenderToSingleSampledInfoEXT<'_> {
39375    #[inline]
39376    fn default() -> Self {
39377        Self {
39378            s_type: Self::STRUCTURE_TYPE,
39379            p_next: ::core::ptr::null(),
39380            multisampled_render_to_single_sampled_enable: Bool32::default(),
39381            rasterization_samples: SampleCountFlags::default(),
39382            _marker: PhantomData,
39383        }
39384    }
39385}
39386unsafe impl<'a> TaggedStructure for MultisampledRenderToSingleSampledInfoEXT<'a> {
39387    const STRUCTURE_TYPE: StructureType =
39388        StructureType::MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_INFO_EXT;
39389}
39390unsafe impl ExtendsSubpassDescription2 for MultisampledRenderToSingleSampledInfoEXT<'_> {}
39391unsafe impl ExtendsRenderingInfo for MultisampledRenderToSingleSampledInfoEXT<'_> {}
39392impl<'a> MultisampledRenderToSingleSampledInfoEXT<'a> {
39393    #[inline]
39394    pub fn multisampled_render_to_single_sampled_enable(
39395        mut self,
39396        multisampled_render_to_single_sampled_enable: bool,
39397    ) -> Self {
39398        self.multisampled_render_to_single_sampled_enable =
39399            multisampled_render_to_single_sampled_enable.into();
39400        self
39401    }
39402    #[inline]
39403    pub fn rasterization_samples(mut self, rasterization_samples: SampleCountFlags) -> Self {
39404        self.rasterization_samples = rasterization_samples;
39405        self
39406    }
39407}
39408#[repr(C)]
39409#[cfg_attr(feature = "debug", derive(Debug))]
39410#[derive(Copy, Clone)]
39411#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineProtectedAccessFeaturesEXT.html>"]
39412#[must_use]
39413pub struct PhysicalDevicePipelineProtectedAccessFeaturesEXT<'a> {
39414    pub s_type: StructureType,
39415    pub p_next: *mut c_void,
39416    pub pipeline_protected_access: Bool32,
39417    pub _marker: PhantomData<&'a ()>,
39418}
39419unsafe impl Send for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'_> {}
39420unsafe impl Sync for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'_> {}
39421impl ::core::default::Default for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'_> {
39422    #[inline]
39423    fn default() -> Self {
39424        Self {
39425            s_type: Self::STRUCTURE_TYPE,
39426            p_next: ::core::ptr::null_mut(),
39427            pipeline_protected_access: Bool32::default(),
39428            _marker: PhantomData,
39429        }
39430    }
39431}
39432unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'a> {
39433    const STRUCTURE_TYPE: StructureType =
39434        StructureType::PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT;
39435}
39436unsafe impl ExtendsPhysicalDeviceFeatures2
39437    for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'_>
39438{
39439}
39440unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelineProtectedAccessFeaturesEXT<'_> {}
39441impl<'a> PhysicalDevicePipelineProtectedAccessFeaturesEXT<'a> {
39442    #[inline]
39443    pub fn pipeline_protected_access(mut self, pipeline_protected_access: bool) -> Self {
39444        self.pipeline_protected_access = pipeline_protected_access.into();
39445        self
39446    }
39447}
39448#[repr(C)]
39449#[cfg_attr(feature = "debug", derive(Debug))]
39450#[derive(Copy, Clone)]
39451#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyVideoPropertiesKHR.html>"]
39452#[must_use]
39453pub struct QueueFamilyVideoPropertiesKHR<'a> {
39454    pub s_type: StructureType,
39455    pub p_next: *mut c_void,
39456    pub video_codec_operations: VideoCodecOperationFlagsKHR,
39457    pub _marker: PhantomData<&'a ()>,
39458}
39459unsafe impl Send for QueueFamilyVideoPropertiesKHR<'_> {}
39460unsafe impl Sync for QueueFamilyVideoPropertiesKHR<'_> {}
39461impl ::core::default::Default for QueueFamilyVideoPropertiesKHR<'_> {
39462    #[inline]
39463    fn default() -> Self {
39464        Self {
39465            s_type: Self::STRUCTURE_TYPE,
39466            p_next: ::core::ptr::null_mut(),
39467            video_codec_operations: VideoCodecOperationFlagsKHR::default(),
39468            _marker: PhantomData,
39469        }
39470    }
39471}
39472unsafe impl<'a> TaggedStructure for QueueFamilyVideoPropertiesKHR<'a> {
39473    const STRUCTURE_TYPE: StructureType = StructureType::QUEUE_FAMILY_VIDEO_PROPERTIES_KHR;
39474}
39475unsafe impl ExtendsQueueFamilyProperties2 for QueueFamilyVideoPropertiesKHR<'_> {}
39476impl<'a> QueueFamilyVideoPropertiesKHR<'a> {
39477    #[inline]
39478    pub fn video_codec_operations(
39479        mut self,
39480        video_codec_operations: VideoCodecOperationFlagsKHR,
39481    ) -> Self {
39482        self.video_codec_operations = video_codec_operations;
39483        self
39484    }
39485}
39486#[repr(C)]
39487#[cfg_attr(feature = "debug", derive(Debug))]
39488#[derive(Copy, Clone)]
39489#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueueFamilyQueryResultStatusPropertiesKHR.html>"]
39490#[must_use]
39491pub struct QueueFamilyQueryResultStatusPropertiesKHR<'a> {
39492    pub s_type: StructureType,
39493    pub p_next: *mut c_void,
39494    pub query_result_status_support: Bool32,
39495    pub _marker: PhantomData<&'a ()>,
39496}
39497unsafe impl Send for QueueFamilyQueryResultStatusPropertiesKHR<'_> {}
39498unsafe impl Sync for QueueFamilyQueryResultStatusPropertiesKHR<'_> {}
39499impl ::core::default::Default for QueueFamilyQueryResultStatusPropertiesKHR<'_> {
39500    #[inline]
39501    fn default() -> Self {
39502        Self {
39503            s_type: Self::STRUCTURE_TYPE,
39504            p_next: ::core::ptr::null_mut(),
39505            query_result_status_support: Bool32::default(),
39506            _marker: PhantomData,
39507        }
39508    }
39509}
39510unsafe impl<'a> TaggedStructure for QueueFamilyQueryResultStatusPropertiesKHR<'a> {
39511    const STRUCTURE_TYPE: StructureType =
39512        StructureType::QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_KHR;
39513}
39514unsafe impl ExtendsQueueFamilyProperties2 for QueueFamilyQueryResultStatusPropertiesKHR<'_> {}
39515impl<'a> QueueFamilyQueryResultStatusPropertiesKHR<'a> {
39516    #[inline]
39517    pub fn query_result_status_support(mut self, query_result_status_support: bool) -> Self {
39518        self.query_result_status_support = query_result_status_support.into();
39519        self
39520    }
39521}
39522#[repr(C)]
39523#[cfg_attr(feature = "debug", derive(Debug))]
39524#[derive(Copy, Clone)]
39525#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoProfileListInfoKHR.html>"]
39526#[must_use]
39527pub struct VideoProfileListInfoKHR<'a> {
39528    pub s_type: StructureType,
39529    pub p_next: *const c_void,
39530    pub profile_count: u32,
39531    pub p_profiles: *const VideoProfileInfoKHR<'a>,
39532    pub _marker: PhantomData<&'a ()>,
39533}
39534unsafe impl Send for VideoProfileListInfoKHR<'_> {}
39535unsafe impl Sync for VideoProfileListInfoKHR<'_> {}
39536impl ::core::default::Default for VideoProfileListInfoKHR<'_> {
39537    #[inline]
39538    fn default() -> Self {
39539        Self {
39540            s_type: Self::STRUCTURE_TYPE,
39541            p_next: ::core::ptr::null(),
39542            profile_count: u32::default(),
39543            p_profiles: ::core::ptr::null(),
39544            _marker: PhantomData,
39545        }
39546    }
39547}
39548unsafe impl<'a> TaggedStructure for VideoProfileListInfoKHR<'a> {
39549    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_PROFILE_LIST_INFO_KHR;
39550}
39551unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for VideoProfileListInfoKHR<'_> {}
39552unsafe impl ExtendsPhysicalDeviceVideoFormatInfoKHR for VideoProfileListInfoKHR<'_> {}
39553unsafe impl ExtendsImageCreateInfo for VideoProfileListInfoKHR<'_> {}
39554unsafe impl ExtendsBufferCreateInfo for VideoProfileListInfoKHR<'_> {}
39555impl<'a> VideoProfileListInfoKHR<'a> {
39556    #[inline]
39557    pub fn profiles(mut self, profiles: &'a [VideoProfileInfoKHR<'a>]) -> Self {
39558        self.profile_count = profiles.len() as _;
39559        self.p_profiles = profiles.as_ptr();
39560        self
39561    }
39562}
39563#[repr(C)]
39564#[cfg_attr(feature = "debug", derive(Debug))]
39565#[derive(Copy, Clone)]
39566#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVideoFormatInfoKHR.html>"]
39567#[must_use]
39568pub struct PhysicalDeviceVideoFormatInfoKHR<'a> {
39569    pub s_type: StructureType,
39570    pub p_next: *const c_void,
39571    pub image_usage: ImageUsageFlags,
39572    pub _marker: PhantomData<&'a ()>,
39573}
39574unsafe impl Send for PhysicalDeviceVideoFormatInfoKHR<'_> {}
39575unsafe impl Sync for PhysicalDeviceVideoFormatInfoKHR<'_> {}
39576impl ::core::default::Default for PhysicalDeviceVideoFormatInfoKHR<'_> {
39577    #[inline]
39578    fn default() -> Self {
39579        Self {
39580            s_type: Self::STRUCTURE_TYPE,
39581            p_next: ::core::ptr::null(),
39582            image_usage: ImageUsageFlags::default(),
39583            _marker: PhantomData,
39584        }
39585    }
39586}
39587unsafe impl<'a> TaggedStructure for PhysicalDeviceVideoFormatInfoKHR<'a> {
39588    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR;
39589}
39590pub unsafe trait ExtendsPhysicalDeviceVideoFormatInfoKHR {}
39591impl<'a> PhysicalDeviceVideoFormatInfoKHR<'a> {
39592    #[inline]
39593    pub fn image_usage(mut self, image_usage: ImageUsageFlags) -> Self {
39594        self.image_usage = image_usage;
39595        self
39596    }
39597    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
39598    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
39599    #[doc = r" valid extension structs can be pushed into the chain."]
39600    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
39601    #[doc = r" chain will look like `A -> D -> B -> C`."]
39602    pub fn push_next<T: ExtendsPhysicalDeviceVideoFormatInfoKHR + ?Sized>(
39603        mut self,
39604        next: &'a mut T,
39605    ) -> Self {
39606        unsafe {
39607            let next_ptr = <*const T>::cast(next);
39608            let last_next = ptr_chain_iter(next).last().unwrap();
39609            (*last_next).p_next = self.p_next as _;
39610            self.p_next = next_ptr;
39611        }
39612        self
39613    }
39614}
39615#[repr(C)]
39616#[cfg_attr(feature = "debug", derive(Debug))]
39617#[derive(Copy, Clone)]
39618#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoFormatPropertiesKHR.html>"]
39619#[must_use]
39620pub struct VideoFormatPropertiesKHR<'a> {
39621    pub s_type: StructureType,
39622    pub p_next: *mut c_void,
39623    pub format: Format,
39624    pub component_mapping: ComponentMapping,
39625    pub image_create_flags: ImageCreateFlags,
39626    pub image_type: ImageType,
39627    pub image_tiling: ImageTiling,
39628    pub image_usage_flags: ImageUsageFlags,
39629    pub _marker: PhantomData<&'a ()>,
39630}
39631unsafe impl Send for VideoFormatPropertiesKHR<'_> {}
39632unsafe impl Sync for VideoFormatPropertiesKHR<'_> {}
39633impl ::core::default::Default for VideoFormatPropertiesKHR<'_> {
39634    #[inline]
39635    fn default() -> Self {
39636        Self {
39637            s_type: Self::STRUCTURE_TYPE,
39638            p_next: ::core::ptr::null_mut(),
39639            format: Format::default(),
39640            component_mapping: ComponentMapping::default(),
39641            image_create_flags: ImageCreateFlags::default(),
39642            image_type: ImageType::default(),
39643            image_tiling: ImageTiling::default(),
39644            image_usage_flags: ImageUsageFlags::default(),
39645            _marker: PhantomData,
39646        }
39647    }
39648}
39649unsafe impl<'a> TaggedStructure for VideoFormatPropertiesKHR<'a> {
39650    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_FORMAT_PROPERTIES_KHR;
39651}
39652impl<'a> VideoFormatPropertiesKHR<'a> {
39653    #[inline]
39654    pub fn format(mut self, format: Format) -> Self {
39655        self.format = format;
39656        self
39657    }
39658    #[inline]
39659    pub fn component_mapping(mut self, component_mapping: ComponentMapping) -> Self {
39660        self.component_mapping = component_mapping;
39661        self
39662    }
39663    #[inline]
39664    pub fn image_create_flags(mut self, image_create_flags: ImageCreateFlags) -> Self {
39665        self.image_create_flags = image_create_flags;
39666        self
39667    }
39668    #[inline]
39669    pub fn image_type(mut self, image_type: ImageType) -> Self {
39670        self.image_type = image_type;
39671        self
39672    }
39673    #[inline]
39674    pub fn image_tiling(mut self, image_tiling: ImageTiling) -> Self {
39675        self.image_tiling = image_tiling;
39676        self
39677    }
39678    #[inline]
39679    pub fn image_usage_flags(mut self, image_usage_flags: ImageUsageFlags) -> Self {
39680        self.image_usage_flags = image_usage_flags;
39681        self
39682    }
39683}
39684#[repr(C)]
39685#[cfg_attr(feature = "debug", derive(Debug))]
39686#[derive(Copy, Clone)]
39687#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoProfileInfoKHR.html>"]
39688#[must_use]
39689pub struct VideoProfileInfoKHR<'a> {
39690    pub s_type: StructureType,
39691    pub p_next: *const c_void,
39692    pub video_codec_operation: VideoCodecOperationFlagsKHR,
39693    pub chroma_subsampling: VideoChromaSubsamplingFlagsKHR,
39694    pub luma_bit_depth: VideoComponentBitDepthFlagsKHR,
39695    pub chroma_bit_depth: VideoComponentBitDepthFlagsKHR,
39696    pub _marker: PhantomData<&'a ()>,
39697}
39698unsafe impl Send for VideoProfileInfoKHR<'_> {}
39699unsafe impl Sync for VideoProfileInfoKHR<'_> {}
39700impl ::core::default::Default for VideoProfileInfoKHR<'_> {
39701    #[inline]
39702    fn default() -> Self {
39703        Self {
39704            s_type: Self::STRUCTURE_TYPE,
39705            p_next: ::core::ptr::null(),
39706            video_codec_operation: VideoCodecOperationFlagsKHR::default(),
39707            chroma_subsampling: VideoChromaSubsamplingFlagsKHR::default(),
39708            luma_bit_depth: VideoComponentBitDepthFlagsKHR::default(),
39709            chroma_bit_depth: VideoComponentBitDepthFlagsKHR::default(),
39710            _marker: PhantomData,
39711        }
39712    }
39713}
39714unsafe impl<'a> TaggedStructure for VideoProfileInfoKHR<'a> {
39715    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_PROFILE_INFO_KHR;
39716}
39717unsafe impl ExtendsQueryPoolCreateInfo for VideoProfileInfoKHR<'_> {}
39718pub unsafe trait ExtendsVideoProfileInfoKHR {}
39719impl<'a> VideoProfileInfoKHR<'a> {
39720    #[inline]
39721    pub fn video_codec_operation(
39722        mut self,
39723        video_codec_operation: VideoCodecOperationFlagsKHR,
39724    ) -> Self {
39725        self.video_codec_operation = video_codec_operation;
39726        self
39727    }
39728    #[inline]
39729    pub fn chroma_subsampling(
39730        mut self,
39731        chroma_subsampling: VideoChromaSubsamplingFlagsKHR,
39732    ) -> Self {
39733        self.chroma_subsampling = chroma_subsampling;
39734        self
39735    }
39736    #[inline]
39737    pub fn luma_bit_depth(mut self, luma_bit_depth: VideoComponentBitDepthFlagsKHR) -> Self {
39738        self.luma_bit_depth = luma_bit_depth;
39739        self
39740    }
39741    #[inline]
39742    pub fn chroma_bit_depth(mut self, chroma_bit_depth: VideoComponentBitDepthFlagsKHR) -> Self {
39743        self.chroma_bit_depth = chroma_bit_depth;
39744        self
39745    }
39746    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
39747    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
39748    #[doc = r" valid extension structs can be pushed into the chain."]
39749    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
39750    #[doc = r" chain will look like `A -> D -> B -> C`."]
39751    pub fn push_next<T: ExtendsVideoProfileInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
39752        unsafe {
39753            let next_ptr = <*const T>::cast(next);
39754            let last_next = ptr_chain_iter(next).last().unwrap();
39755            (*last_next).p_next = self.p_next as _;
39756            self.p_next = next_ptr;
39757        }
39758        self
39759    }
39760}
39761#[repr(C)]
39762#[cfg_attr(feature = "debug", derive(Debug))]
39763#[derive(Copy, Clone)]
39764#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoCapabilitiesKHR.html>"]
39765#[must_use]
39766pub struct VideoCapabilitiesKHR<'a> {
39767    pub s_type: StructureType,
39768    pub p_next: *mut c_void,
39769    pub flags: VideoCapabilityFlagsKHR,
39770    pub min_bitstream_buffer_offset_alignment: DeviceSize,
39771    pub min_bitstream_buffer_size_alignment: DeviceSize,
39772    pub picture_access_granularity: Extent2D,
39773    pub min_coded_extent: Extent2D,
39774    pub max_coded_extent: Extent2D,
39775    pub max_dpb_slots: u32,
39776    pub max_active_reference_pictures: u32,
39777    pub std_header_version: ExtensionProperties,
39778    pub _marker: PhantomData<&'a ()>,
39779}
39780unsafe impl Send for VideoCapabilitiesKHR<'_> {}
39781unsafe impl Sync for VideoCapabilitiesKHR<'_> {}
39782impl ::core::default::Default for VideoCapabilitiesKHR<'_> {
39783    #[inline]
39784    fn default() -> Self {
39785        Self {
39786            s_type: Self::STRUCTURE_TYPE,
39787            p_next: ::core::ptr::null_mut(),
39788            flags: VideoCapabilityFlagsKHR::default(),
39789            min_bitstream_buffer_offset_alignment: DeviceSize::default(),
39790            min_bitstream_buffer_size_alignment: DeviceSize::default(),
39791            picture_access_granularity: Extent2D::default(),
39792            min_coded_extent: Extent2D::default(),
39793            max_coded_extent: Extent2D::default(),
39794            max_dpb_slots: u32::default(),
39795            max_active_reference_pictures: u32::default(),
39796            std_header_version: ExtensionProperties::default(),
39797            _marker: PhantomData,
39798        }
39799    }
39800}
39801unsafe impl<'a> TaggedStructure for VideoCapabilitiesKHR<'a> {
39802    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_CAPABILITIES_KHR;
39803}
39804pub unsafe trait ExtendsVideoCapabilitiesKHR {}
39805impl<'a> VideoCapabilitiesKHR<'a> {
39806    #[inline]
39807    pub fn flags(mut self, flags: VideoCapabilityFlagsKHR) -> Self {
39808        self.flags = flags;
39809        self
39810    }
39811    #[inline]
39812    pub fn min_bitstream_buffer_offset_alignment(
39813        mut self,
39814        min_bitstream_buffer_offset_alignment: DeviceSize,
39815    ) -> Self {
39816        self.min_bitstream_buffer_offset_alignment = min_bitstream_buffer_offset_alignment;
39817        self
39818    }
39819    #[inline]
39820    pub fn min_bitstream_buffer_size_alignment(
39821        mut self,
39822        min_bitstream_buffer_size_alignment: DeviceSize,
39823    ) -> Self {
39824        self.min_bitstream_buffer_size_alignment = min_bitstream_buffer_size_alignment;
39825        self
39826    }
39827    #[inline]
39828    pub fn picture_access_granularity(mut self, picture_access_granularity: Extent2D) -> Self {
39829        self.picture_access_granularity = picture_access_granularity;
39830        self
39831    }
39832    #[inline]
39833    pub fn min_coded_extent(mut self, min_coded_extent: Extent2D) -> Self {
39834        self.min_coded_extent = min_coded_extent;
39835        self
39836    }
39837    #[inline]
39838    pub fn max_coded_extent(mut self, max_coded_extent: Extent2D) -> Self {
39839        self.max_coded_extent = max_coded_extent;
39840        self
39841    }
39842    #[inline]
39843    pub fn max_dpb_slots(mut self, max_dpb_slots: u32) -> Self {
39844        self.max_dpb_slots = max_dpb_slots;
39845        self
39846    }
39847    #[inline]
39848    pub fn max_active_reference_pictures(mut self, max_active_reference_pictures: u32) -> Self {
39849        self.max_active_reference_pictures = max_active_reference_pictures;
39850        self
39851    }
39852    #[inline]
39853    pub fn std_header_version(mut self, std_header_version: ExtensionProperties) -> Self {
39854        self.std_header_version = std_header_version;
39855        self
39856    }
39857    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
39858    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
39859    #[doc = r" valid extension structs can be pushed into the chain."]
39860    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
39861    #[doc = r" chain will look like `A -> D -> B -> C`."]
39862    pub fn push_next<T: ExtendsVideoCapabilitiesKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
39863        unsafe {
39864            let next_ptr = <*mut T>::cast(next);
39865            let last_next = ptr_chain_iter(next).last().unwrap();
39866            (*last_next).p_next = self.p_next as _;
39867            self.p_next = next_ptr;
39868        }
39869        self
39870    }
39871}
39872#[repr(C)]
39873#[cfg_attr(feature = "debug", derive(Debug))]
39874#[derive(Copy, Clone)]
39875#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionMemoryRequirementsKHR.html>"]
39876#[must_use]
39877pub struct VideoSessionMemoryRequirementsKHR<'a> {
39878    pub s_type: StructureType,
39879    pub p_next: *mut c_void,
39880    pub memory_bind_index: u32,
39881    pub memory_requirements: MemoryRequirements,
39882    pub _marker: PhantomData<&'a ()>,
39883}
39884unsafe impl Send for VideoSessionMemoryRequirementsKHR<'_> {}
39885unsafe impl Sync for VideoSessionMemoryRequirementsKHR<'_> {}
39886impl ::core::default::Default for VideoSessionMemoryRequirementsKHR<'_> {
39887    #[inline]
39888    fn default() -> Self {
39889        Self {
39890            s_type: Self::STRUCTURE_TYPE,
39891            p_next: ::core::ptr::null_mut(),
39892            memory_bind_index: u32::default(),
39893            memory_requirements: MemoryRequirements::default(),
39894            _marker: PhantomData,
39895        }
39896    }
39897}
39898unsafe impl<'a> TaggedStructure for VideoSessionMemoryRequirementsKHR<'a> {
39899    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_SESSION_MEMORY_REQUIREMENTS_KHR;
39900}
39901impl<'a> VideoSessionMemoryRequirementsKHR<'a> {
39902    #[inline]
39903    pub fn memory_bind_index(mut self, memory_bind_index: u32) -> Self {
39904        self.memory_bind_index = memory_bind_index;
39905        self
39906    }
39907    #[inline]
39908    pub fn memory_requirements(mut self, memory_requirements: MemoryRequirements) -> Self {
39909        self.memory_requirements = memory_requirements;
39910        self
39911    }
39912}
39913#[repr(C)]
39914#[cfg_attr(feature = "debug", derive(Debug))]
39915#[derive(Copy, Clone)]
39916#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindVideoSessionMemoryInfoKHR.html>"]
39917#[must_use]
39918pub struct BindVideoSessionMemoryInfoKHR<'a> {
39919    pub s_type: StructureType,
39920    pub p_next: *const c_void,
39921    pub memory_bind_index: u32,
39922    pub memory: DeviceMemory,
39923    pub memory_offset: DeviceSize,
39924    pub memory_size: DeviceSize,
39925    pub _marker: PhantomData<&'a ()>,
39926}
39927unsafe impl Send for BindVideoSessionMemoryInfoKHR<'_> {}
39928unsafe impl Sync for BindVideoSessionMemoryInfoKHR<'_> {}
39929impl ::core::default::Default for BindVideoSessionMemoryInfoKHR<'_> {
39930    #[inline]
39931    fn default() -> Self {
39932        Self {
39933            s_type: Self::STRUCTURE_TYPE,
39934            p_next: ::core::ptr::null(),
39935            memory_bind_index: u32::default(),
39936            memory: DeviceMemory::default(),
39937            memory_offset: DeviceSize::default(),
39938            memory_size: DeviceSize::default(),
39939            _marker: PhantomData,
39940        }
39941    }
39942}
39943unsafe impl<'a> TaggedStructure for BindVideoSessionMemoryInfoKHR<'a> {
39944    const STRUCTURE_TYPE: StructureType = StructureType::BIND_VIDEO_SESSION_MEMORY_INFO_KHR;
39945}
39946impl<'a> BindVideoSessionMemoryInfoKHR<'a> {
39947    #[inline]
39948    pub fn memory_bind_index(mut self, memory_bind_index: u32) -> Self {
39949        self.memory_bind_index = memory_bind_index;
39950        self
39951    }
39952    #[inline]
39953    pub fn memory(mut self, memory: DeviceMemory) -> Self {
39954        self.memory = memory;
39955        self
39956    }
39957    #[inline]
39958    pub fn memory_offset(mut self, memory_offset: DeviceSize) -> Self {
39959        self.memory_offset = memory_offset;
39960        self
39961    }
39962    #[inline]
39963    pub fn memory_size(mut self, memory_size: DeviceSize) -> Self {
39964        self.memory_size = memory_size;
39965        self
39966    }
39967}
39968#[repr(C)]
39969#[cfg_attr(feature = "debug", derive(Debug))]
39970#[derive(Copy, Clone)]
39971#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoPictureResourceInfoKHR.html>"]
39972#[must_use]
39973pub struct VideoPictureResourceInfoKHR<'a> {
39974    pub s_type: StructureType,
39975    pub p_next: *const c_void,
39976    pub coded_offset: Offset2D,
39977    pub coded_extent: Extent2D,
39978    pub base_array_layer: u32,
39979    pub image_view_binding: ImageView,
39980    pub _marker: PhantomData<&'a ()>,
39981}
39982unsafe impl Send for VideoPictureResourceInfoKHR<'_> {}
39983unsafe impl Sync for VideoPictureResourceInfoKHR<'_> {}
39984impl ::core::default::Default for VideoPictureResourceInfoKHR<'_> {
39985    #[inline]
39986    fn default() -> Self {
39987        Self {
39988            s_type: Self::STRUCTURE_TYPE,
39989            p_next: ::core::ptr::null(),
39990            coded_offset: Offset2D::default(),
39991            coded_extent: Extent2D::default(),
39992            base_array_layer: u32::default(),
39993            image_view_binding: ImageView::default(),
39994            _marker: PhantomData,
39995        }
39996    }
39997}
39998unsafe impl<'a> TaggedStructure for VideoPictureResourceInfoKHR<'a> {
39999    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_PICTURE_RESOURCE_INFO_KHR;
40000}
40001impl<'a> VideoPictureResourceInfoKHR<'a> {
40002    #[inline]
40003    pub fn coded_offset(mut self, coded_offset: Offset2D) -> Self {
40004        self.coded_offset = coded_offset;
40005        self
40006    }
40007    #[inline]
40008    pub fn coded_extent(mut self, coded_extent: Extent2D) -> Self {
40009        self.coded_extent = coded_extent;
40010        self
40011    }
40012    #[inline]
40013    pub fn base_array_layer(mut self, base_array_layer: u32) -> Self {
40014        self.base_array_layer = base_array_layer;
40015        self
40016    }
40017    #[inline]
40018    pub fn image_view_binding(mut self, image_view_binding: ImageView) -> Self {
40019        self.image_view_binding = image_view_binding;
40020        self
40021    }
40022}
40023#[repr(C)]
40024#[cfg_attr(feature = "debug", derive(Debug))]
40025#[derive(Copy, Clone)]
40026#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoReferenceSlotInfoKHR.html>"]
40027#[must_use]
40028pub struct VideoReferenceSlotInfoKHR<'a> {
40029    pub s_type: StructureType,
40030    pub p_next: *const c_void,
40031    pub slot_index: i32,
40032    pub p_picture_resource: *const VideoPictureResourceInfoKHR<'a>,
40033    pub _marker: PhantomData<&'a ()>,
40034}
40035unsafe impl Send for VideoReferenceSlotInfoKHR<'_> {}
40036unsafe impl Sync for VideoReferenceSlotInfoKHR<'_> {}
40037impl ::core::default::Default for VideoReferenceSlotInfoKHR<'_> {
40038    #[inline]
40039    fn default() -> Self {
40040        Self {
40041            s_type: Self::STRUCTURE_TYPE,
40042            p_next: ::core::ptr::null(),
40043            slot_index: i32::default(),
40044            p_picture_resource: ::core::ptr::null(),
40045            _marker: PhantomData,
40046        }
40047    }
40048}
40049unsafe impl<'a> TaggedStructure for VideoReferenceSlotInfoKHR<'a> {
40050    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_REFERENCE_SLOT_INFO_KHR;
40051}
40052pub unsafe trait ExtendsVideoReferenceSlotInfoKHR {}
40053impl<'a> VideoReferenceSlotInfoKHR<'a> {
40054    #[inline]
40055    pub fn slot_index(mut self, slot_index: i32) -> Self {
40056        self.slot_index = slot_index;
40057        self
40058    }
40059    #[inline]
40060    pub fn picture_resource(
40061        mut self,
40062        picture_resource: &'a VideoPictureResourceInfoKHR<'a>,
40063    ) -> Self {
40064        self.p_picture_resource = picture_resource;
40065        self
40066    }
40067    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
40068    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
40069    #[doc = r" valid extension structs can be pushed into the chain."]
40070    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
40071    #[doc = r" chain will look like `A -> D -> B -> C`."]
40072    pub fn push_next<T: ExtendsVideoReferenceSlotInfoKHR + ?Sized>(
40073        mut self,
40074        next: &'a mut T,
40075    ) -> Self {
40076        unsafe {
40077            let next_ptr = <*const T>::cast(next);
40078            let last_next = ptr_chain_iter(next).last().unwrap();
40079            (*last_next).p_next = self.p_next as _;
40080            self.p_next = next_ptr;
40081        }
40082        self
40083    }
40084}
40085#[repr(C)]
40086#[cfg_attr(feature = "debug", derive(Debug))]
40087#[derive(Copy, Clone)]
40088#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeCapabilitiesKHR.html>"]
40089#[must_use]
40090pub struct VideoDecodeCapabilitiesKHR<'a> {
40091    pub s_type: StructureType,
40092    pub p_next: *mut c_void,
40093    pub flags: VideoDecodeCapabilityFlagsKHR,
40094    pub _marker: PhantomData<&'a ()>,
40095}
40096unsafe impl Send for VideoDecodeCapabilitiesKHR<'_> {}
40097unsafe impl Sync for VideoDecodeCapabilitiesKHR<'_> {}
40098impl ::core::default::Default for VideoDecodeCapabilitiesKHR<'_> {
40099    #[inline]
40100    fn default() -> Self {
40101        Self {
40102            s_type: Self::STRUCTURE_TYPE,
40103            p_next: ::core::ptr::null_mut(),
40104            flags: VideoDecodeCapabilityFlagsKHR::default(),
40105            _marker: PhantomData,
40106        }
40107    }
40108}
40109unsafe impl<'a> TaggedStructure for VideoDecodeCapabilitiesKHR<'a> {
40110    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_CAPABILITIES_KHR;
40111}
40112unsafe impl ExtendsVideoCapabilitiesKHR for VideoDecodeCapabilitiesKHR<'_> {}
40113impl<'a> VideoDecodeCapabilitiesKHR<'a> {
40114    #[inline]
40115    pub fn flags(mut self, flags: VideoDecodeCapabilityFlagsKHR) -> Self {
40116        self.flags = flags;
40117        self
40118    }
40119}
40120#[repr(C)]
40121#[cfg_attr(feature = "debug", derive(Debug))]
40122#[derive(Copy, Clone)]
40123#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeUsageInfoKHR.html>"]
40124#[must_use]
40125pub struct VideoDecodeUsageInfoKHR<'a> {
40126    pub s_type: StructureType,
40127    pub p_next: *const c_void,
40128    pub video_usage_hints: VideoDecodeUsageFlagsKHR,
40129    pub _marker: PhantomData<&'a ()>,
40130}
40131unsafe impl Send for VideoDecodeUsageInfoKHR<'_> {}
40132unsafe impl Sync for VideoDecodeUsageInfoKHR<'_> {}
40133impl ::core::default::Default for VideoDecodeUsageInfoKHR<'_> {
40134    #[inline]
40135    fn default() -> Self {
40136        Self {
40137            s_type: Self::STRUCTURE_TYPE,
40138            p_next: ::core::ptr::null(),
40139            video_usage_hints: VideoDecodeUsageFlagsKHR::default(),
40140            _marker: PhantomData,
40141        }
40142    }
40143}
40144unsafe impl<'a> TaggedStructure for VideoDecodeUsageInfoKHR<'a> {
40145    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_USAGE_INFO_KHR;
40146}
40147unsafe impl ExtendsVideoProfileInfoKHR for VideoDecodeUsageInfoKHR<'_> {}
40148unsafe impl ExtendsQueryPoolCreateInfo for VideoDecodeUsageInfoKHR<'_> {}
40149impl<'a> VideoDecodeUsageInfoKHR<'a> {
40150    #[inline]
40151    pub fn video_usage_hints(mut self, video_usage_hints: VideoDecodeUsageFlagsKHR) -> Self {
40152        self.video_usage_hints = video_usage_hints;
40153        self
40154    }
40155}
40156#[repr(C)]
40157#[cfg_attr(feature = "debug", derive(Debug))]
40158#[derive(Copy, Clone)]
40159#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeInfoKHR.html>"]
40160#[must_use]
40161pub struct VideoDecodeInfoKHR<'a> {
40162    pub s_type: StructureType,
40163    pub p_next: *const c_void,
40164    pub flags: VideoDecodeFlagsKHR,
40165    pub src_buffer: Buffer,
40166    pub src_buffer_offset: DeviceSize,
40167    pub src_buffer_range: DeviceSize,
40168    pub dst_picture_resource: VideoPictureResourceInfoKHR<'a>,
40169    pub p_setup_reference_slot: *const VideoReferenceSlotInfoKHR<'a>,
40170    pub reference_slot_count: u32,
40171    pub p_reference_slots: *const VideoReferenceSlotInfoKHR<'a>,
40172    pub _marker: PhantomData<&'a ()>,
40173}
40174unsafe impl Send for VideoDecodeInfoKHR<'_> {}
40175unsafe impl Sync for VideoDecodeInfoKHR<'_> {}
40176impl ::core::default::Default for VideoDecodeInfoKHR<'_> {
40177    #[inline]
40178    fn default() -> Self {
40179        Self {
40180            s_type: Self::STRUCTURE_TYPE,
40181            p_next: ::core::ptr::null(),
40182            flags: VideoDecodeFlagsKHR::default(),
40183            src_buffer: Buffer::default(),
40184            src_buffer_offset: DeviceSize::default(),
40185            src_buffer_range: DeviceSize::default(),
40186            dst_picture_resource: VideoPictureResourceInfoKHR::default(),
40187            p_setup_reference_slot: ::core::ptr::null(),
40188            reference_slot_count: u32::default(),
40189            p_reference_slots: ::core::ptr::null(),
40190            _marker: PhantomData,
40191        }
40192    }
40193}
40194unsafe impl<'a> TaggedStructure for VideoDecodeInfoKHR<'a> {
40195    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_INFO_KHR;
40196}
40197pub unsafe trait ExtendsVideoDecodeInfoKHR {}
40198impl<'a> VideoDecodeInfoKHR<'a> {
40199    #[inline]
40200    pub fn flags(mut self, flags: VideoDecodeFlagsKHR) -> Self {
40201        self.flags = flags;
40202        self
40203    }
40204    #[inline]
40205    pub fn src_buffer(mut self, src_buffer: Buffer) -> Self {
40206        self.src_buffer = src_buffer;
40207        self
40208    }
40209    #[inline]
40210    pub fn src_buffer_offset(mut self, src_buffer_offset: DeviceSize) -> Self {
40211        self.src_buffer_offset = src_buffer_offset;
40212        self
40213    }
40214    #[inline]
40215    pub fn src_buffer_range(mut self, src_buffer_range: DeviceSize) -> Self {
40216        self.src_buffer_range = src_buffer_range;
40217        self
40218    }
40219    #[inline]
40220    pub fn dst_picture_resource(
40221        mut self,
40222        dst_picture_resource: VideoPictureResourceInfoKHR<'a>,
40223    ) -> Self {
40224        self.dst_picture_resource = dst_picture_resource;
40225        self
40226    }
40227    #[inline]
40228    pub fn setup_reference_slot(
40229        mut self,
40230        setup_reference_slot: &'a VideoReferenceSlotInfoKHR<'a>,
40231    ) -> Self {
40232        self.p_setup_reference_slot = setup_reference_slot;
40233        self
40234    }
40235    #[inline]
40236    pub fn reference_slots(mut self, reference_slots: &'a [VideoReferenceSlotInfoKHR<'a>]) -> Self {
40237        self.reference_slot_count = reference_slots.len() as _;
40238        self.p_reference_slots = reference_slots.as_ptr();
40239        self
40240    }
40241    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
40242    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
40243    #[doc = r" valid extension structs can be pushed into the chain."]
40244    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
40245    #[doc = r" chain will look like `A -> D -> B -> C`."]
40246    pub fn push_next<T: ExtendsVideoDecodeInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
40247        unsafe {
40248            let next_ptr = <*const T>::cast(next);
40249            let last_next = ptr_chain_iter(next).last().unwrap();
40250            (*last_next).p_next = self.p_next as _;
40251            self.p_next = next_ptr;
40252        }
40253        self
40254    }
40255}
40256#[repr(C)]
40257#[cfg_attr(feature = "debug", derive(Debug))]
40258#[derive(Copy, Clone)]
40259#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVideoMaintenance1FeaturesKHR.html>"]
40260#[must_use]
40261pub struct PhysicalDeviceVideoMaintenance1FeaturesKHR<'a> {
40262    pub s_type: StructureType,
40263    pub p_next: *mut c_void,
40264    pub video_maintenance1: Bool32,
40265    pub _marker: PhantomData<&'a ()>,
40266}
40267unsafe impl Send for PhysicalDeviceVideoMaintenance1FeaturesKHR<'_> {}
40268unsafe impl Sync for PhysicalDeviceVideoMaintenance1FeaturesKHR<'_> {}
40269impl ::core::default::Default for PhysicalDeviceVideoMaintenance1FeaturesKHR<'_> {
40270    #[inline]
40271    fn default() -> Self {
40272        Self {
40273            s_type: Self::STRUCTURE_TYPE,
40274            p_next: ::core::ptr::null_mut(),
40275            video_maintenance1: Bool32::default(),
40276            _marker: PhantomData,
40277        }
40278    }
40279}
40280unsafe impl<'a> TaggedStructure for PhysicalDeviceVideoMaintenance1FeaturesKHR<'a> {
40281    const STRUCTURE_TYPE: StructureType =
40282        StructureType::PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR;
40283}
40284unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceVideoMaintenance1FeaturesKHR<'_> {}
40285unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceVideoMaintenance1FeaturesKHR<'_> {}
40286impl<'a> PhysicalDeviceVideoMaintenance1FeaturesKHR<'a> {
40287    #[inline]
40288    pub fn video_maintenance1(mut self, video_maintenance1: bool) -> Self {
40289        self.video_maintenance1 = video_maintenance1.into();
40290        self
40291    }
40292}
40293#[repr(C)]
40294#[cfg_attr(feature = "debug", derive(Debug))]
40295#[derive(Copy, Clone)]
40296#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoInlineQueryInfoKHR.html>"]
40297#[must_use]
40298pub struct VideoInlineQueryInfoKHR<'a> {
40299    pub s_type: StructureType,
40300    pub p_next: *const c_void,
40301    pub query_pool: QueryPool,
40302    pub first_query: u32,
40303    pub query_count: u32,
40304    pub _marker: PhantomData<&'a ()>,
40305}
40306unsafe impl Send for VideoInlineQueryInfoKHR<'_> {}
40307unsafe impl Sync for VideoInlineQueryInfoKHR<'_> {}
40308impl ::core::default::Default for VideoInlineQueryInfoKHR<'_> {
40309    #[inline]
40310    fn default() -> Self {
40311        Self {
40312            s_type: Self::STRUCTURE_TYPE,
40313            p_next: ::core::ptr::null(),
40314            query_pool: QueryPool::default(),
40315            first_query: u32::default(),
40316            query_count: u32::default(),
40317            _marker: PhantomData,
40318        }
40319    }
40320}
40321unsafe impl<'a> TaggedStructure for VideoInlineQueryInfoKHR<'a> {
40322    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_INLINE_QUERY_INFO_KHR;
40323}
40324unsafe impl ExtendsVideoDecodeInfoKHR for VideoInlineQueryInfoKHR<'_> {}
40325unsafe impl ExtendsVideoEncodeInfoKHR for VideoInlineQueryInfoKHR<'_> {}
40326impl<'a> VideoInlineQueryInfoKHR<'a> {
40327    #[inline]
40328    pub fn query_pool(mut self, query_pool: QueryPool) -> Self {
40329        self.query_pool = query_pool;
40330        self
40331    }
40332    #[inline]
40333    pub fn first_query(mut self, first_query: u32) -> Self {
40334        self.first_query = first_query;
40335        self
40336    }
40337    #[inline]
40338    pub fn query_count(mut self, query_count: u32) -> Self {
40339        self.query_count = query_count;
40340        self
40341    }
40342}
40343#[repr(C)]
40344#[cfg_attr(feature = "debug", derive(Debug))]
40345#[derive(Copy, Clone)]
40346#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264ProfileInfoKHR.html>"]
40347#[must_use]
40348pub struct VideoDecodeH264ProfileInfoKHR<'a> {
40349    pub s_type: StructureType,
40350    pub p_next: *const c_void,
40351    pub std_profile_idc: StdVideoH264ProfileIdc,
40352    pub picture_layout: VideoDecodeH264PictureLayoutFlagsKHR,
40353    pub _marker: PhantomData<&'a ()>,
40354}
40355unsafe impl Send for VideoDecodeH264ProfileInfoKHR<'_> {}
40356unsafe impl Sync for VideoDecodeH264ProfileInfoKHR<'_> {}
40357impl ::core::default::Default for VideoDecodeH264ProfileInfoKHR<'_> {
40358    #[inline]
40359    fn default() -> Self {
40360        Self {
40361            s_type: Self::STRUCTURE_TYPE,
40362            p_next: ::core::ptr::null(),
40363            std_profile_idc: StdVideoH264ProfileIdc::default(),
40364            picture_layout: VideoDecodeH264PictureLayoutFlagsKHR::default(),
40365            _marker: PhantomData,
40366        }
40367    }
40368}
40369unsafe impl<'a> TaggedStructure for VideoDecodeH264ProfileInfoKHR<'a> {
40370    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H264_PROFILE_INFO_KHR;
40371}
40372unsafe impl ExtendsVideoProfileInfoKHR for VideoDecodeH264ProfileInfoKHR<'_> {}
40373unsafe impl ExtendsQueryPoolCreateInfo for VideoDecodeH264ProfileInfoKHR<'_> {}
40374impl<'a> VideoDecodeH264ProfileInfoKHR<'a> {
40375    #[inline]
40376    pub fn std_profile_idc(mut self, std_profile_idc: StdVideoH264ProfileIdc) -> Self {
40377        self.std_profile_idc = std_profile_idc;
40378        self
40379    }
40380    #[inline]
40381    pub fn picture_layout(mut self, picture_layout: VideoDecodeH264PictureLayoutFlagsKHR) -> Self {
40382        self.picture_layout = picture_layout;
40383        self
40384    }
40385}
40386#[repr(C)]
40387#[cfg_attr(feature = "debug", derive(Debug))]
40388#[derive(Copy, Clone)]
40389#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264CapabilitiesKHR.html>"]
40390#[must_use]
40391pub struct VideoDecodeH264CapabilitiesKHR<'a> {
40392    pub s_type: StructureType,
40393    pub p_next: *mut c_void,
40394    pub max_level_idc: StdVideoH264LevelIdc,
40395    pub field_offset_granularity: Offset2D,
40396    pub _marker: PhantomData<&'a ()>,
40397}
40398unsafe impl Send for VideoDecodeH264CapabilitiesKHR<'_> {}
40399unsafe impl Sync for VideoDecodeH264CapabilitiesKHR<'_> {}
40400impl ::core::default::Default for VideoDecodeH264CapabilitiesKHR<'_> {
40401    #[inline]
40402    fn default() -> Self {
40403        Self {
40404            s_type: Self::STRUCTURE_TYPE,
40405            p_next: ::core::ptr::null_mut(),
40406            max_level_idc: StdVideoH264LevelIdc::default(),
40407            field_offset_granularity: Offset2D::default(),
40408            _marker: PhantomData,
40409        }
40410    }
40411}
40412unsafe impl<'a> TaggedStructure for VideoDecodeH264CapabilitiesKHR<'a> {
40413    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H264_CAPABILITIES_KHR;
40414}
40415unsafe impl ExtendsVideoCapabilitiesKHR for VideoDecodeH264CapabilitiesKHR<'_> {}
40416impl<'a> VideoDecodeH264CapabilitiesKHR<'a> {
40417    #[inline]
40418    pub fn max_level_idc(mut self, max_level_idc: StdVideoH264LevelIdc) -> Self {
40419        self.max_level_idc = max_level_idc;
40420        self
40421    }
40422    #[inline]
40423    pub fn field_offset_granularity(mut self, field_offset_granularity: Offset2D) -> Self {
40424        self.field_offset_granularity = field_offset_granularity;
40425        self
40426    }
40427}
40428#[repr(C)]
40429#[cfg_attr(feature = "debug", derive(Debug))]
40430#[derive(Copy, Clone)]
40431#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264SessionParametersAddInfoKHR.html>"]
40432#[must_use]
40433pub struct VideoDecodeH264SessionParametersAddInfoKHR<'a> {
40434    pub s_type: StructureType,
40435    pub p_next: *const c_void,
40436    pub std_sps_count: u32,
40437    pub p_std_sp_ss: *const StdVideoH264SequenceParameterSet,
40438    pub std_pps_count: u32,
40439    pub p_std_pp_ss: *const StdVideoH264PictureParameterSet,
40440    pub _marker: PhantomData<&'a ()>,
40441}
40442unsafe impl Send for VideoDecodeH264SessionParametersAddInfoKHR<'_> {}
40443unsafe impl Sync for VideoDecodeH264SessionParametersAddInfoKHR<'_> {}
40444impl ::core::default::Default for VideoDecodeH264SessionParametersAddInfoKHR<'_> {
40445    #[inline]
40446    fn default() -> Self {
40447        Self {
40448            s_type: Self::STRUCTURE_TYPE,
40449            p_next: ::core::ptr::null(),
40450            std_sps_count: u32::default(),
40451            p_std_sp_ss: ::core::ptr::null(),
40452            std_pps_count: u32::default(),
40453            p_std_pp_ss: ::core::ptr::null(),
40454            _marker: PhantomData,
40455        }
40456    }
40457}
40458unsafe impl<'a> TaggedStructure for VideoDecodeH264SessionParametersAddInfoKHR<'a> {
40459    const STRUCTURE_TYPE: StructureType =
40460        StructureType::VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR;
40461}
40462unsafe impl ExtendsVideoSessionParametersUpdateInfoKHR
40463    for VideoDecodeH264SessionParametersAddInfoKHR<'_>
40464{
40465}
40466impl<'a> VideoDecodeH264SessionParametersAddInfoKHR<'a> {
40467    #[inline]
40468    pub fn std_sp_ss(mut self, std_sp_ss: &'a [StdVideoH264SequenceParameterSet]) -> Self {
40469        self.std_sps_count = std_sp_ss.len() as _;
40470        self.p_std_sp_ss = std_sp_ss.as_ptr();
40471        self
40472    }
40473    #[inline]
40474    pub fn std_pp_ss(mut self, std_pp_ss: &'a [StdVideoH264PictureParameterSet]) -> Self {
40475        self.std_pps_count = std_pp_ss.len() as _;
40476        self.p_std_pp_ss = std_pp_ss.as_ptr();
40477        self
40478    }
40479}
40480#[repr(C)]
40481#[cfg_attr(feature = "debug", derive(Debug))]
40482#[derive(Copy, Clone)]
40483#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264SessionParametersCreateInfoKHR.html>"]
40484#[must_use]
40485pub struct VideoDecodeH264SessionParametersCreateInfoKHR<'a> {
40486    pub s_type: StructureType,
40487    pub p_next: *const c_void,
40488    pub max_std_sps_count: u32,
40489    pub max_std_pps_count: u32,
40490    pub p_parameters_add_info: *const VideoDecodeH264SessionParametersAddInfoKHR<'a>,
40491    pub _marker: PhantomData<&'a ()>,
40492}
40493unsafe impl Send for VideoDecodeH264SessionParametersCreateInfoKHR<'_> {}
40494unsafe impl Sync for VideoDecodeH264SessionParametersCreateInfoKHR<'_> {}
40495impl ::core::default::Default for VideoDecodeH264SessionParametersCreateInfoKHR<'_> {
40496    #[inline]
40497    fn default() -> Self {
40498        Self {
40499            s_type: Self::STRUCTURE_TYPE,
40500            p_next: ::core::ptr::null(),
40501            max_std_sps_count: u32::default(),
40502            max_std_pps_count: u32::default(),
40503            p_parameters_add_info: ::core::ptr::null(),
40504            _marker: PhantomData,
40505        }
40506    }
40507}
40508unsafe impl<'a> TaggedStructure for VideoDecodeH264SessionParametersCreateInfoKHR<'a> {
40509    const STRUCTURE_TYPE: StructureType =
40510        StructureType::VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR;
40511}
40512unsafe impl ExtendsVideoSessionParametersCreateInfoKHR
40513    for VideoDecodeH264SessionParametersCreateInfoKHR<'_>
40514{
40515}
40516impl<'a> VideoDecodeH264SessionParametersCreateInfoKHR<'a> {
40517    #[inline]
40518    pub fn max_std_sps_count(mut self, max_std_sps_count: u32) -> Self {
40519        self.max_std_sps_count = max_std_sps_count;
40520        self
40521    }
40522    #[inline]
40523    pub fn max_std_pps_count(mut self, max_std_pps_count: u32) -> Self {
40524        self.max_std_pps_count = max_std_pps_count;
40525        self
40526    }
40527    #[inline]
40528    pub fn parameters_add_info(
40529        mut self,
40530        parameters_add_info: &'a VideoDecodeH264SessionParametersAddInfoKHR<'a>,
40531    ) -> Self {
40532        self.p_parameters_add_info = parameters_add_info;
40533        self
40534    }
40535}
40536#[repr(C)]
40537#[cfg_attr(feature = "debug", derive(Debug))]
40538#[derive(Copy, Clone)]
40539#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264PictureInfoKHR.html>"]
40540#[must_use]
40541pub struct VideoDecodeH264PictureInfoKHR<'a> {
40542    pub s_type: StructureType,
40543    pub p_next: *const c_void,
40544    pub p_std_picture_info: *const StdVideoDecodeH264PictureInfo,
40545    pub slice_count: u32,
40546    pub p_slice_offsets: *const u32,
40547    pub _marker: PhantomData<&'a ()>,
40548}
40549unsafe impl Send for VideoDecodeH264PictureInfoKHR<'_> {}
40550unsafe impl Sync for VideoDecodeH264PictureInfoKHR<'_> {}
40551impl ::core::default::Default for VideoDecodeH264PictureInfoKHR<'_> {
40552    #[inline]
40553    fn default() -> Self {
40554        Self {
40555            s_type: Self::STRUCTURE_TYPE,
40556            p_next: ::core::ptr::null(),
40557            p_std_picture_info: ::core::ptr::null(),
40558            slice_count: u32::default(),
40559            p_slice_offsets: ::core::ptr::null(),
40560            _marker: PhantomData,
40561        }
40562    }
40563}
40564unsafe impl<'a> TaggedStructure for VideoDecodeH264PictureInfoKHR<'a> {
40565    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H264_PICTURE_INFO_KHR;
40566}
40567unsafe impl ExtendsVideoDecodeInfoKHR for VideoDecodeH264PictureInfoKHR<'_> {}
40568impl<'a> VideoDecodeH264PictureInfoKHR<'a> {
40569    #[inline]
40570    pub fn std_picture_info(mut self, std_picture_info: &'a StdVideoDecodeH264PictureInfo) -> Self {
40571        self.p_std_picture_info = std_picture_info;
40572        self
40573    }
40574    #[inline]
40575    pub fn slice_offsets(mut self, slice_offsets: &'a [u32]) -> Self {
40576        self.slice_count = slice_offsets.len() as _;
40577        self.p_slice_offsets = slice_offsets.as_ptr();
40578        self
40579    }
40580}
40581#[repr(C)]
40582#[cfg_attr(feature = "debug", derive(Debug))]
40583#[derive(Copy, Clone)]
40584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH264DpbSlotInfoKHR.html>"]
40585#[must_use]
40586pub struct VideoDecodeH264DpbSlotInfoKHR<'a> {
40587    pub s_type: StructureType,
40588    pub p_next: *const c_void,
40589    pub p_std_reference_info: *const StdVideoDecodeH264ReferenceInfo,
40590    pub _marker: PhantomData<&'a ()>,
40591}
40592unsafe impl Send for VideoDecodeH264DpbSlotInfoKHR<'_> {}
40593unsafe impl Sync for VideoDecodeH264DpbSlotInfoKHR<'_> {}
40594impl ::core::default::Default for VideoDecodeH264DpbSlotInfoKHR<'_> {
40595    #[inline]
40596    fn default() -> Self {
40597        Self {
40598            s_type: Self::STRUCTURE_TYPE,
40599            p_next: ::core::ptr::null(),
40600            p_std_reference_info: ::core::ptr::null(),
40601            _marker: PhantomData,
40602        }
40603    }
40604}
40605unsafe impl<'a> TaggedStructure for VideoDecodeH264DpbSlotInfoKHR<'a> {
40606    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H264_DPB_SLOT_INFO_KHR;
40607}
40608unsafe impl ExtendsVideoReferenceSlotInfoKHR for VideoDecodeH264DpbSlotInfoKHR<'_> {}
40609impl<'a> VideoDecodeH264DpbSlotInfoKHR<'a> {
40610    #[inline]
40611    pub fn std_reference_info(
40612        mut self,
40613        std_reference_info: &'a StdVideoDecodeH264ReferenceInfo,
40614    ) -> Self {
40615        self.p_std_reference_info = std_reference_info;
40616        self
40617    }
40618}
40619#[repr(C)]
40620#[cfg_attr(feature = "debug", derive(Debug))]
40621#[derive(Copy, Clone)]
40622#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265ProfileInfoKHR.html>"]
40623#[must_use]
40624pub struct VideoDecodeH265ProfileInfoKHR<'a> {
40625    pub s_type: StructureType,
40626    pub p_next: *const c_void,
40627    pub std_profile_idc: StdVideoH265ProfileIdc,
40628    pub _marker: PhantomData<&'a ()>,
40629}
40630unsafe impl Send for VideoDecodeH265ProfileInfoKHR<'_> {}
40631unsafe impl Sync for VideoDecodeH265ProfileInfoKHR<'_> {}
40632impl ::core::default::Default for VideoDecodeH265ProfileInfoKHR<'_> {
40633    #[inline]
40634    fn default() -> Self {
40635        Self {
40636            s_type: Self::STRUCTURE_TYPE,
40637            p_next: ::core::ptr::null(),
40638            std_profile_idc: StdVideoH265ProfileIdc::default(),
40639            _marker: PhantomData,
40640        }
40641    }
40642}
40643unsafe impl<'a> TaggedStructure for VideoDecodeH265ProfileInfoKHR<'a> {
40644    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H265_PROFILE_INFO_KHR;
40645}
40646unsafe impl ExtendsVideoProfileInfoKHR for VideoDecodeH265ProfileInfoKHR<'_> {}
40647unsafe impl ExtendsQueryPoolCreateInfo for VideoDecodeH265ProfileInfoKHR<'_> {}
40648impl<'a> VideoDecodeH265ProfileInfoKHR<'a> {
40649    #[inline]
40650    pub fn std_profile_idc(mut self, std_profile_idc: StdVideoH265ProfileIdc) -> Self {
40651        self.std_profile_idc = std_profile_idc;
40652        self
40653    }
40654}
40655#[repr(C)]
40656#[cfg_attr(feature = "debug", derive(Debug))]
40657#[derive(Copy, Clone)]
40658#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265CapabilitiesKHR.html>"]
40659#[must_use]
40660pub struct VideoDecodeH265CapabilitiesKHR<'a> {
40661    pub s_type: StructureType,
40662    pub p_next: *mut c_void,
40663    pub max_level_idc: StdVideoH265LevelIdc,
40664    pub _marker: PhantomData<&'a ()>,
40665}
40666unsafe impl Send for VideoDecodeH265CapabilitiesKHR<'_> {}
40667unsafe impl Sync for VideoDecodeH265CapabilitiesKHR<'_> {}
40668impl ::core::default::Default for VideoDecodeH265CapabilitiesKHR<'_> {
40669    #[inline]
40670    fn default() -> Self {
40671        Self {
40672            s_type: Self::STRUCTURE_TYPE,
40673            p_next: ::core::ptr::null_mut(),
40674            max_level_idc: StdVideoH265LevelIdc::default(),
40675            _marker: PhantomData,
40676        }
40677    }
40678}
40679unsafe impl<'a> TaggedStructure for VideoDecodeH265CapabilitiesKHR<'a> {
40680    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H265_CAPABILITIES_KHR;
40681}
40682unsafe impl ExtendsVideoCapabilitiesKHR for VideoDecodeH265CapabilitiesKHR<'_> {}
40683impl<'a> VideoDecodeH265CapabilitiesKHR<'a> {
40684    #[inline]
40685    pub fn max_level_idc(mut self, max_level_idc: StdVideoH265LevelIdc) -> Self {
40686        self.max_level_idc = max_level_idc;
40687        self
40688    }
40689}
40690#[repr(C)]
40691#[cfg_attr(feature = "debug", derive(Debug))]
40692#[derive(Copy, Clone)]
40693#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265SessionParametersAddInfoKHR.html>"]
40694#[must_use]
40695pub struct VideoDecodeH265SessionParametersAddInfoKHR<'a> {
40696    pub s_type: StructureType,
40697    pub p_next: *const c_void,
40698    pub std_vps_count: u32,
40699    pub p_std_vp_ss: *const StdVideoH265VideoParameterSet,
40700    pub std_sps_count: u32,
40701    pub p_std_sp_ss: *const StdVideoH265SequenceParameterSet,
40702    pub std_pps_count: u32,
40703    pub p_std_pp_ss: *const StdVideoH265PictureParameterSet,
40704    pub _marker: PhantomData<&'a ()>,
40705}
40706unsafe impl Send for VideoDecodeH265SessionParametersAddInfoKHR<'_> {}
40707unsafe impl Sync for VideoDecodeH265SessionParametersAddInfoKHR<'_> {}
40708impl ::core::default::Default for VideoDecodeH265SessionParametersAddInfoKHR<'_> {
40709    #[inline]
40710    fn default() -> Self {
40711        Self {
40712            s_type: Self::STRUCTURE_TYPE,
40713            p_next: ::core::ptr::null(),
40714            std_vps_count: u32::default(),
40715            p_std_vp_ss: ::core::ptr::null(),
40716            std_sps_count: u32::default(),
40717            p_std_sp_ss: ::core::ptr::null(),
40718            std_pps_count: u32::default(),
40719            p_std_pp_ss: ::core::ptr::null(),
40720            _marker: PhantomData,
40721        }
40722    }
40723}
40724unsafe impl<'a> TaggedStructure for VideoDecodeH265SessionParametersAddInfoKHR<'a> {
40725    const STRUCTURE_TYPE: StructureType =
40726        StructureType::VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR;
40727}
40728unsafe impl ExtendsVideoSessionParametersUpdateInfoKHR
40729    for VideoDecodeH265SessionParametersAddInfoKHR<'_>
40730{
40731}
40732impl<'a> VideoDecodeH265SessionParametersAddInfoKHR<'a> {
40733    #[inline]
40734    pub fn std_vp_ss(mut self, std_vp_ss: &'a [StdVideoH265VideoParameterSet]) -> Self {
40735        self.std_vps_count = std_vp_ss.len() as _;
40736        self.p_std_vp_ss = std_vp_ss.as_ptr();
40737        self
40738    }
40739    #[inline]
40740    pub fn std_sp_ss(mut self, std_sp_ss: &'a [StdVideoH265SequenceParameterSet]) -> Self {
40741        self.std_sps_count = std_sp_ss.len() as _;
40742        self.p_std_sp_ss = std_sp_ss.as_ptr();
40743        self
40744    }
40745    #[inline]
40746    pub fn std_pp_ss(mut self, std_pp_ss: &'a [StdVideoH265PictureParameterSet]) -> Self {
40747        self.std_pps_count = std_pp_ss.len() as _;
40748        self.p_std_pp_ss = std_pp_ss.as_ptr();
40749        self
40750    }
40751}
40752#[repr(C)]
40753#[cfg_attr(feature = "debug", derive(Debug))]
40754#[derive(Copy, Clone)]
40755#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265SessionParametersCreateInfoKHR.html>"]
40756#[must_use]
40757pub struct VideoDecodeH265SessionParametersCreateInfoKHR<'a> {
40758    pub s_type: StructureType,
40759    pub p_next: *const c_void,
40760    pub max_std_vps_count: u32,
40761    pub max_std_sps_count: u32,
40762    pub max_std_pps_count: u32,
40763    pub p_parameters_add_info: *const VideoDecodeH265SessionParametersAddInfoKHR<'a>,
40764    pub _marker: PhantomData<&'a ()>,
40765}
40766unsafe impl Send for VideoDecodeH265SessionParametersCreateInfoKHR<'_> {}
40767unsafe impl Sync for VideoDecodeH265SessionParametersCreateInfoKHR<'_> {}
40768impl ::core::default::Default for VideoDecodeH265SessionParametersCreateInfoKHR<'_> {
40769    #[inline]
40770    fn default() -> Self {
40771        Self {
40772            s_type: Self::STRUCTURE_TYPE,
40773            p_next: ::core::ptr::null(),
40774            max_std_vps_count: u32::default(),
40775            max_std_sps_count: u32::default(),
40776            max_std_pps_count: u32::default(),
40777            p_parameters_add_info: ::core::ptr::null(),
40778            _marker: PhantomData,
40779        }
40780    }
40781}
40782unsafe impl<'a> TaggedStructure for VideoDecodeH265SessionParametersCreateInfoKHR<'a> {
40783    const STRUCTURE_TYPE: StructureType =
40784        StructureType::VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR;
40785}
40786unsafe impl ExtendsVideoSessionParametersCreateInfoKHR
40787    for VideoDecodeH265SessionParametersCreateInfoKHR<'_>
40788{
40789}
40790impl<'a> VideoDecodeH265SessionParametersCreateInfoKHR<'a> {
40791    #[inline]
40792    pub fn max_std_vps_count(mut self, max_std_vps_count: u32) -> Self {
40793        self.max_std_vps_count = max_std_vps_count;
40794        self
40795    }
40796    #[inline]
40797    pub fn max_std_sps_count(mut self, max_std_sps_count: u32) -> Self {
40798        self.max_std_sps_count = max_std_sps_count;
40799        self
40800    }
40801    #[inline]
40802    pub fn max_std_pps_count(mut self, max_std_pps_count: u32) -> Self {
40803        self.max_std_pps_count = max_std_pps_count;
40804        self
40805    }
40806    #[inline]
40807    pub fn parameters_add_info(
40808        mut self,
40809        parameters_add_info: &'a VideoDecodeH265SessionParametersAddInfoKHR<'a>,
40810    ) -> Self {
40811        self.p_parameters_add_info = parameters_add_info;
40812        self
40813    }
40814}
40815#[repr(C)]
40816#[cfg_attr(feature = "debug", derive(Debug))]
40817#[derive(Copy, Clone)]
40818#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265PictureInfoKHR.html>"]
40819#[must_use]
40820pub struct VideoDecodeH265PictureInfoKHR<'a> {
40821    pub s_type: StructureType,
40822    pub p_next: *const c_void,
40823    pub p_std_picture_info: *const StdVideoDecodeH265PictureInfo,
40824    pub slice_segment_count: u32,
40825    pub p_slice_segment_offsets: *const u32,
40826    pub _marker: PhantomData<&'a ()>,
40827}
40828unsafe impl Send for VideoDecodeH265PictureInfoKHR<'_> {}
40829unsafe impl Sync for VideoDecodeH265PictureInfoKHR<'_> {}
40830impl ::core::default::Default for VideoDecodeH265PictureInfoKHR<'_> {
40831    #[inline]
40832    fn default() -> Self {
40833        Self {
40834            s_type: Self::STRUCTURE_TYPE,
40835            p_next: ::core::ptr::null(),
40836            p_std_picture_info: ::core::ptr::null(),
40837            slice_segment_count: u32::default(),
40838            p_slice_segment_offsets: ::core::ptr::null(),
40839            _marker: PhantomData,
40840        }
40841    }
40842}
40843unsafe impl<'a> TaggedStructure for VideoDecodeH265PictureInfoKHR<'a> {
40844    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H265_PICTURE_INFO_KHR;
40845}
40846unsafe impl ExtendsVideoDecodeInfoKHR for VideoDecodeH265PictureInfoKHR<'_> {}
40847impl<'a> VideoDecodeH265PictureInfoKHR<'a> {
40848    #[inline]
40849    pub fn std_picture_info(mut self, std_picture_info: &'a StdVideoDecodeH265PictureInfo) -> Self {
40850        self.p_std_picture_info = std_picture_info;
40851        self
40852    }
40853    #[inline]
40854    pub fn slice_segment_offsets(mut self, slice_segment_offsets: &'a [u32]) -> Self {
40855        self.slice_segment_count = slice_segment_offsets.len() as _;
40856        self.p_slice_segment_offsets = slice_segment_offsets.as_ptr();
40857        self
40858    }
40859}
40860#[repr(C)]
40861#[cfg_attr(feature = "debug", derive(Debug))]
40862#[derive(Copy, Clone)]
40863#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeH265DpbSlotInfoKHR.html>"]
40864#[must_use]
40865pub struct VideoDecodeH265DpbSlotInfoKHR<'a> {
40866    pub s_type: StructureType,
40867    pub p_next: *const c_void,
40868    pub p_std_reference_info: *const StdVideoDecodeH265ReferenceInfo,
40869    pub _marker: PhantomData<&'a ()>,
40870}
40871unsafe impl Send for VideoDecodeH265DpbSlotInfoKHR<'_> {}
40872unsafe impl Sync for VideoDecodeH265DpbSlotInfoKHR<'_> {}
40873impl ::core::default::Default for VideoDecodeH265DpbSlotInfoKHR<'_> {
40874    #[inline]
40875    fn default() -> Self {
40876        Self {
40877            s_type: Self::STRUCTURE_TYPE,
40878            p_next: ::core::ptr::null(),
40879            p_std_reference_info: ::core::ptr::null(),
40880            _marker: PhantomData,
40881        }
40882    }
40883}
40884unsafe impl<'a> TaggedStructure for VideoDecodeH265DpbSlotInfoKHR<'a> {
40885    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR;
40886}
40887unsafe impl ExtendsVideoReferenceSlotInfoKHR for VideoDecodeH265DpbSlotInfoKHR<'_> {}
40888impl<'a> VideoDecodeH265DpbSlotInfoKHR<'a> {
40889    #[inline]
40890    pub fn std_reference_info(
40891        mut self,
40892        std_reference_info: &'a StdVideoDecodeH265ReferenceInfo,
40893    ) -> Self {
40894        self.p_std_reference_info = std_reference_info;
40895        self
40896    }
40897}
40898#[repr(C)]
40899#[cfg_attr(feature = "debug", derive(Debug))]
40900#[derive(Copy, Clone)]
40901#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeAV1ProfileInfoKHR.html>"]
40902#[must_use]
40903pub struct VideoDecodeAV1ProfileInfoKHR<'a> {
40904    pub s_type: StructureType,
40905    pub p_next: *const c_void,
40906    pub std_profile: StdVideoAV1Profile,
40907    pub film_grain_support: Bool32,
40908    pub _marker: PhantomData<&'a ()>,
40909}
40910unsafe impl Send for VideoDecodeAV1ProfileInfoKHR<'_> {}
40911unsafe impl Sync for VideoDecodeAV1ProfileInfoKHR<'_> {}
40912impl ::core::default::Default for VideoDecodeAV1ProfileInfoKHR<'_> {
40913    #[inline]
40914    fn default() -> Self {
40915        Self {
40916            s_type: Self::STRUCTURE_TYPE,
40917            p_next: ::core::ptr::null(),
40918            std_profile: StdVideoAV1Profile::default(),
40919            film_grain_support: Bool32::default(),
40920            _marker: PhantomData,
40921        }
40922    }
40923}
40924unsafe impl<'a> TaggedStructure for VideoDecodeAV1ProfileInfoKHR<'a> {
40925    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_AV1_PROFILE_INFO_KHR;
40926}
40927unsafe impl ExtendsVideoProfileInfoKHR for VideoDecodeAV1ProfileInfoKHR<'_> {}
40928unsafe impl ExtendsQueryPoolCreateInfo for VideoDecodeAV1ProfileInfoKHR<'_> {}
40929impl<'a> VideoDecodeAV1ProfileInfoKHR<'a> {
40930    #[inline]
40931    pub fn std_profile(mut self, std_profile: StdVideoAV1Profile) -> Self {
40932        self.std_profile = std_profile;
40933        self
40934    }
40935    #[inline]
40936    pub fn film_grain_support(mut self, film_grain_support: bool) -> Self {
40937        self.film_grain_support = film_grain_support.into();
40938        self
40939    }
40940}
40941#[repr(C)]
40942#[cfg_attr(feature = "debug", derive(Debug))]
40943#[derive(Copy, Clone)]
40944#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeAV1CapabilitiesKHR.html>"]
40945#[must_use]
40946pub struct VideoDecodeAV1CapabilitiesKHR<'a> {
40947    pub s_type: StructureType,
40948    pub p_next: *mut c_void,
40949    pub max_level: StdVideoAV1Level,
40950    pub _marker: PhantomData<&'a ()>,
40951}
40952unsafe impl Send for VideoDecodeAV1CapabilitiesKHR<'_> {}
40953unsafe impl Sync for VideoDecodeAV1CapabilitiesKHR<'_> {}
40954impl ::core::default::Default for VideoDecodeAV1CapabilitiesKHR<'_> {
40955    #[inline]
40956    fn default() -> Self {
40957        Self {
40958            s_type: Self::STRUCTURE_TYPE,
40959            p_next: ::core::ptr::null_mut(),
40960            max_level: StdVideoAV1Level::default(),
40961            _marker: PhantomData,
40962        }
40963    }
40964}
40965unsafe impl<'a> TaggedStructure for VideoDecodeAV1CapabilitiesKHR<'a> {
40966    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_AV1_CAPABILITIES_KHR;
40967}
40968unsafe impl ExtendsVideoCapabilitiesKHR for VideoDecodeAV1CapabilitiesKHR<'_> {}
40969impl<'a> VideoDecodeAV1CapabilitiesKHR<'a> {
40970    #[inline]
40971    pub fn max_level(mut self, max_level: StdVideoAV1Level) -> Self {
40972        self.max_level = max_level;
40973        self
40974    }
40975}
40976#[repr(C)]
40977#[cfg_attr(feature = "debug", derive(Debug))]
40978#[derive(Copy, Clone)]
40979#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeAV1SessionParametersCreateInfoKHR.html>"]
40980#[must_use]
40981pub struct VideoDecodeAV1SessionParametersCreateInfoKHR<'a> {
40982    pub s_type: StructureType,
40983    pub p_next: *const c_void,
40984    pub p_std_sequence_header: *const StdVideoAV1SequenceHeader,
40985    pub _marker: PhantomData<&'a ()>,
40986}
40987unsafe impl Send for VideoDecodeAV1SessionParametersCreateInfoKHR<'_> {}
40988unsafe impl Sync for VideoDecodeAV1SessionParametersCreateInfoKHR<'_> {}
40989impl ::core::default::Default for VideoDecodeAV1SessionParametersCreateInfoKHR<'_> {
40990    #[inline]
40991    fn default() -> Self {
40992        Self {
40993            s_type: Self::STRUCTURE_TYPE,
40994            p_next: ::core::ptr::null(),
40995            p_std_sequence_header: ::core::ptr::null(),
40996            _marker: PhantomData,
40997        }
40998    }
40999}
41000unsafe impl<'a> TaggedStructure for VideoDecodeAV1SessionParametersCreateInfoKHR<'a> {
41001    const STRUCTURE_TYPE: StructureType =
41002        StructureType::VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR;
41003}
41004unsafe impl ExtendsVideoSessionParametersCreateInfoKHR
41005    for VideoDecodeAV1SessionParametersCreateInfoKHR<'_>
41006{
41007}
41008impl<'a> VideoDecodeAV1SessionParametersCreateInfoKHR<'a> {
41009    #[inline]
41010    pub fn std_sequence_header(
41011        mut self,
41012        std_sequence_header: &'a StdVideoAV1SequenceHeader,
41013    ) -> Self {
41014        self.p_std_sequence_header = std_sequence_header;
41015        self
41016    }
41017}
41018#[repr(C)]
41019#[cfg_attr(feature = "debug", derive(Debug))]
41020#[derive(Copy, Clone)]
41021#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeAV1PictureInfoKHR.html>"]
41022#[must_use]
41023pub struct VideoDecodeAV1PictureInfoKHR<'a> {
41024    pub s_type: StructureType,
41025    pub p_next: *const c_void,
41026    pub p_std_picture_info: *const StdVideoDecodeAV1PictureInfo,
41027    pub reference_name_slot_indices: [i32; MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR],
41028    pub frame_header_offset: u32,
41029    pub tile_count: u32,
41030    pub p_tile_offsets: *const u32,
41031    pub p_tile_sizes: *const u32,
41032    pub _marker: PhantomData<&'a ()>,
41033}
41034unsafe impl Send for VideoDecodeAV1PictureInfoKHR<'_> {}
41035unsafe impl Sync for VideoDecodeAV1PictureInfoKHR<'_> {}
41036impl ::core::default::Default for VideoDecodeAV1PictureInfoKHR<'_> {
41037    #[inline]
41038    fn default() -> Self {
41039        Self {
41040            s_type: Self::STRUCTURE_TYPE,
41041            p_next: ::core::ptr::null(),
41042            p_std_picture_info: ::core::ptr::null(),
41043            reference_name_slot_indices: unsafe { ::core::mem::zeroed() },
41044            frame_header_offset: u32::default(),
41045            tile_count: u32::default(),
41046            p_tile_offsets: ::core::ptr::null(),
41047            p_tile_sizes: ::core::ptr::null(),
41048            _marker: PhantomData,
41049        }
41050    }
41051}
41052unsafe impl<'a> TaggedStructure for VideoDecodeAV1PictureInfoKHR<'a> {
41053    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_AV1_PICTURE_INFO_KHR;
41054}
41055unsafe impl ExtendsVideoDecodeInfoKHR for VideoDecodeAV1PictureInfoKHR<'_> {}
41056impl<'a> VideoDecodeAV1PictureInfoKHR<'a> {
41057    #[inline]
41058    pub fn std_picture_info(mut self, std_picture_info: &'a StdVideoDecodeAV1PictureInfo) -> Self {
41059        self.p_std_picture_info = std_picture_info;
41060        self
41061    }
41062    #[inline]
41063    pub fn reference_name_slot_indices(
41064        mut self,
41065        reference_name_slot_indices: [i32; MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR],
41066    ) -> Self {
41067        self.reference_name_slot_indices = reference_name_slot_indices;
41068        self
41069    }
41070    #[inline]
41071    pub fn frame_header_offset(mut self, frame_header_offset: u32) -> Self {
41072        self.frame_header_offset = frame_header_offset;
41073        self
41074    }
41075    #[inline]
41076    pub fn tile_offsets(mut self, tile_offsets: &'a [u32]) -> Self {
41077        self.tile_count = tile_offsets.len() as _;
41078        self.p_tile_offsets = tile_offsets.as_ptr();
41079        self
41080    }
41081    #[inline]
41082    pub fn tile_sizes(mut self, tile_sizes: &'a [u32]) -> Self {
41083        self.tile_count = tile_sizes.len() as _;
41084        self.p_tile_sizes = tile_sizes.as_ptr();
41085        self
41086    }
41087}
41088#[repr(C)]
41089#[cfg_attr(feature = "debug", derive(Debug))]
41090#[derive(Copy, Clone)]
41091#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoDecodeAV1DpbSlotInfoKHR.html>"]
41092#[must_use]
41093pub struct VideoDecodeAV1DpbSlotInfoKHR<'a> {
41094    pub s_type: StructureType,
41095    pub p_next: *const c_void,
41096    pub p_std_reference_info: *const StdVideoDecodeAV1ReferenceInfo,
41097    pub _marker: PhantomData<&'a ()>,
41098}
41099unsafe impl Send for VideoDecodeAV1DpbSlotInfoKHR<'_> {}
41100unsafe impl Sync for VideoDecodeAV1DpbSlotInfoKHR<'_> {}
41101impl ::core::default::Default for VideoDecodeAV1DpbSlotInfoKHR<'_> {
41102    #[inline]
41103    fn default() -> Self {
41104        Self {
41105            s_type: Self::STRUCTURE_TYPE,
41106            p_next: ::core::ptr::null(),
41107            p_std_reference_info: ::core::ptr::null(),
41108            _marker: PhantomData,
41109        }
41110    }
41111}
41112unsafe impl<'a> TaggedStructure for VideoDecodeAV1DpbSlotInfoKHR<'a> {
41113    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR;
41114}
41115unsafe impl ExtendsVideoReferenceSlotInfoKHR for VideoDecodeAV1DpbSlotInfoKHR<'_> {}
41116impl<'a> VideoDecodeAV1DpbSlotInfoKHR<'a> {
41117    #[inline]
41118    pub fn std_reference_info(
41119        mut self,
41120        std_reference_info: &'a StdVideoDecodeAV1ReferenceInfo,
41121    ) -> Self {
41122        self.p_std_reference_info = std_reference_info;
41123        self
41124    }
41125}
41126#[repr(C)]
41127#[cfg_attr(feature = "debug", derive(Debug))]
41128#[derive(Copy, Clone)]
41129#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionCreateInfoKHR.html>"]
41130#[must_use]
41131pub struct VideoSessionCreateInfoKHR<'a> {
41132    pub s_type: StructureType,
41133    pub p_next: *const c_void,
41134    pub queue_family_index: u32,
41135    pub flags: VideoSessionCreateFlagsKHR,
41136    pub p_video_profile: *const VideoProfileInfoKHR<'a>,
41137    pub picture_format: Format,
41138    pub max_coded_extent: Extent2D,
41139    pub reference_picture_format: Format,
41140    pub max_dpb_slots: u32,
41141    pub max_active_reference_pictures: u32,
41142    pub p_std_header_version: *const ExtensionProperties,
41143    pub _marker: PhantomData<&'a ()>,
41144}
41145unsafe impl Send for VideoSessionCreateInfoKHR<'_> {}
41146unsafe impl Sync for VideoSessionCreateInfoKHR<'_> {}
41147impl ::core::default::Default for VideoSessionCreateInfoKHR<'_> {
41148    #[inline]
41149    fn default() -> Self {
41150        Self {
41151            s_type: Self::STRUCTURE_TYPE,
41152            p_next: ::core::ptr::null(),
41153            queue_family_index: u32::default(),
41154            flags: VideoSessionCreateFlagsKHR::default(),
41155            p_video_profile: ::core::ptr::null(),
41156            picture_format: Format::default(),
41157            max_coded_extent: Extent2D::default(),
41158            reference_picture_format: Format::default(),
41159            max_dpb_slots: u32::default(),
41160            max_active_reference_pictures: u32::default(),
41161            p_std_header_version: ::core::ptr::null(),
41162            _marker: PhantomData,
41163        }
41164    }
41165}
41166unsafe impl<'a> TaggedStructure for VideoSessionCreateInfoKHR<'a> {
41167    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_SESSION_CREATE_INFO_KHR;
41168}
41169pub unsafe trait ExtendsVideoSessionCreateInfoKHR {}
41170impl<'a> VideoSessionCreateInfoKHR<'a> {
41171    #[inline]
41172    pub fn queue_family_index(mut self, queue_family_index: u32) -> Self {
41173        self.queue_family_index = queue_family_index;
41174        self
41175    }
41176    #[inline]
41177    pub fn flags(mut self, flags: VideoSessionCreateFlagsKHR) -> Self {
41178        self.flags = flags;
41179        self
41180    }
41181    #[inline]
41182    pub fn video_profile(mut self, video_profile: &'a VideoProfileInfoKHR<'a>) -> Self {
41183        self.p_video_profile = video_profile;
41184        self
41185    }
41186    #[inline]
41187    pub fn picture_format(mut self, picture_format: Format) -> Self {
41188        self.picture_format = picture_format;
41189        self
41190    }
41191    #[inline]
41192    pub fn max_coded_extent(mut self, max_coded_extent: Extent2D) -> Self {
41193        self.max_coded_extent = max_coded_extent;
41194        self
41195    }
41196    #[inline]
41197    pub fn reference_picture_format(mut self, reference_picture_format: Format) -> Self {
41198        self.reference_picture_format = reference_picture_format;
41199        self
41200    }
41201    #[inline]
41202    pub fn max_dpb_slots(mut self, max_dpb_slots: u32) -> Self {
41203        self.max_dpb_slots = max_dpb_slots;
41204        self
41205    }
41206    #[inline]
41207    pub fn max_active_reference_pictures(mut self, max_active_reference_pictures: u32) -> Self {
41208        self.max_active_reference_pictures = max_active_reference_pictures;
41209        self
41210    }
41211    #[inline]
41212    pub fn std_header_version(mut self, std_header_version: &'a ExtensionProperties) -> Self {
41213        self.p_std_header_version = std_header_version;
41214        self
41215    }
41216    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41217    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41218    #[doc = r" valid extension structs can be pushed into the chain."]
41219    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41220    #[doc = r" chain will look like `A -> D -> B -> C`."]
41221    pub fn push_next<T: ExtendsVideoSessionCreateInfoKHR + ?Sized>(
41222        mut self,
41223        next: &'a mut T,
41224    ) -> Self {
41225        unsafe {
41226            let next_ptr = <*const T>::cast(next);
41227            let last_next = ptr_chain_iter(next).last().unwrap();
41228            (*last_next).p_next = self.p_next as _;
41229            self.p_next = next_ptr;
41230        }
41231        self
41232    }
41233}
41234#[repr(C)]
41235#[cfg_attr(feature = "debug", derive(Debug))]
41236#[derive(Copy, Clone)]
41237#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionParametersCreateInfoKHR.html>"]
41238#[must_use]
41239pub struct VideoSessionParametersCreateInfoKHR<'a> {
41240    pub s_type: StructureType,
41241    pub p_next: *const c_void,
41242    pub flags: VideoSessionParametersCreateFlagsKHR,
41243    pub video_session_parameters_template: VideoSessionParametersKHR,
41244    pub video_session: VideoSessionKHR,
41245    pub _marker: PhantomData<&'a ()>,
41246}
41247unsafe impl Send for VideoSessionParametersCreateInfoKHR<'_> {}
41248unsafe impl Sync for VideoSessionParametersCreateInfoKHR<'_> {}
41249impl ::core::default::Default for VideoSessionParametersCreateInfoKHR<'_> {
41250    #[inline]
41251    fn default() -> Self {
41252        Self {
41253            s_type: Self::STRUCTURE_TYPE,
41254            p_next: ::core::ptr::null(),
41255            flags: VideoSessionParametersCreateFlagsKHR::default(),
41256            video_session_parameters_template: VideoSessionParametersKHR::default(),
41257            video_session: VideoSessionKHR::default(),
41258            _marker: PhantomData,
41259        }
41260    }
41261}
41262unsafe impl<'a> TaggedStructure for VideoSessionParametersCreateInfoKHR<'a> {
41263    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR;
41264}
41265pub unsafe trait ExtendsVideoSessionParametersCreateInfoKHR {}
41266impl<'a> VideoSessionParametersCreateInfoKHR<'a> {
41267    #[inline]
41268    pub fn flags(mut self, flags: VideoSessionParametersCreateFlagsKHR) -> Self {
41269        self.flags = flags;
41270        self
41271    }
41272    #[inline]
41273    pub fn video_session_parameters_template(
41274        mut self,
41275        video_session_parameters_template: VideoSessionParametersKHR,
41276    ) -> Self {
41277        self.video_session_parameters_template = video_session_parameters_template;
41278        self
41279    }
41280    #[inline]
41281    pub fn video_session(mut self, video_session: VideoSessionKHR) -> Self {
41282        self.video_session = video_session;
41283        self
41284    }
41285    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41286    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41287    #[doc = r" valid extension structs can be pushed into the chain."]
41288    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41289    #[doc = r" chain will look like `A -> D -> B -> C`."]
41290    pub fn push_next<T: ExtendsVideoSessionParametersCreateInfoKHR + ?Sized>(
41291        mut self,
41292        next: &'a mut T,
41293    ) -> Self {
41294        unsafe {
41295            let next_ptr = <*const T>::cast(next);
41296            let last_next = ptr_chain_iter(next).last().unwrap();
41297            (*last_next).p_next = self.p_next as _;
41298            self.p_next = next_ptr;
41299        }
41300        self
41301    }
41302}
41303#[repr(C)]
41304#[cfg_attr(feature = "debug", derive(Debug))]
41305#[derive(Copy, Clone)]
41306#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoSessionParametersUpdateInfoKHR.html>"]
41307#[must_use]
41308pub struct VideoSessionParametersUpdateInfoKHR<'a> {
41309    pub s_type: StructureType,
41310    pub p_next: *const c_void,
41311    pub update_sequence_count: u32,
41312    pub _marker: PhantomData<&'a ()>,
41313}
41314unsafe impl Send for VideoSessionParametersUpdateInfoKHR<'_> {}
41315unsafe impl Sync for VideoSessionParametersUpdateInfoKHR<'_> {}
41316impl ::core::default::Default for VideoSessionParametersUpdateInfoKHR<'_> {
41317    #[inline]
41318    fn default() -> Self {
41319        Self {
41320            s_type: Self::STRUCTURE_TYPE,
41321            p_next: ::core::ptr::null(),
41322            update_sequence_count: u32::default(),
41323            _marker: PhantomData,
41324        }
41325    }
41326}
41327unsafe impl<'a> TaggedStructure for VideoSessionParametersUpdateInfoKHR<'a> {
41328    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR;
41329}
41330pub unsafe trait ExtendsVideoSessionParametersUpdateInfoKHR {}
41331impl<'a> VideoSessionParametersUpdateInfoKHR<'a> {
41332    #[inline]
41333    pub fn update_sequence_count(mut self, update_sequence_count: u32) -> Self {
41334        self.update_sequence_count = update_sequence_count;
41335        self
41336    }
41337    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41338    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41339    #[doc = r" valid extension structs can be pushed into the chain."]
41340    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41341    #[doc = r" chain will look like `A -> D -> B -> C`."]
41342    pub fn push_next<T: ExtendsVideoSessionParametersUpdateInfoKHR + ?Sized>(
41343        mut self,
41344        next: &'a mut T,
41345    ) -> Self {
41346        unsafe {
41347            let next_ptr = <*const T>::cast(next);
41348            let last_next = ptr_chain_iter(next).last().unwrap();
41349            (*last_next).p_next = self.p_next as _;
41350            self.p_next = next_ptr;
41351        }
41352        self
41353    }
41354}
41355#[repr(C)]
41356#[cfg_attr(feature = "debug", derive(Debug))]
41357#[derive(Copy, Clone)]
41358#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeSessionParametersGetInfoKHR.html>"]
41359#[must_use]
41360pub struct VideoEncodeSessionParametersGetInfoKHR<'a> {
41361    pub s_type: StructureType,
41362    pub p_next: *const c_void,
41363    pub video_session_parameters: VideoSessionParametersKHR,
41364    pub _marker: PhantomData<&'a ()>,
41365}
41366unsafe impl Send for VideoEncodeSessionParametersGetInfoKHR<'_> {}
41367unsafe impl Sync for VideoEncodeSessionParametersGetInfoKHR<'_> {}
41368impl ::core::default::Default for VideoEncodeSessionParametersGetInfoKHR<'_> {
41369    #[inline]
41370    fn default() -> Self {
41371        Self {
41372            s_type: Self::STRUCTURE_TYPE,
41373            p_next: ::core::ptr::null(),
41374            video_session_parameters: VideoSessionParametersKHR::default(),
41375            _marker: PhantomData,
41376        }
41377    }
41378}
41379unsafe impl<'a> TaggedStructure for VideoEncodeSessionParametersGetInfoKHR<'a> {
41380    const STRUCTURE_TYPE: StructureType =
41381        StructureType::VIDEO_ENCODE_SESSION_PARAMETERS_GET_INFO_KHR;
41382}
41383pub unsafe trait ExtendsVideoEncodeSessionParametersGetInfoKHR {}
41384impl<'a> VideoEncodeSessionParametersGetInfoKHR<'a> {
41385    #[inline]
41386    pub fn video_session_parameters(
41387        mut self,
41388        video_session_parameters: VideoSessionParametersKHR,
41389    ) -> Self {
41390        self.video_session_parameters = video_session_parameters;
41391        self
41392    }
41393    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41394    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41395    #[doc = r" valid extension structs can be pushed into the chain."]
41396    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41397    #[doc = r" chain will look like `A -> D -> B -> C`."]
41398    pub fn push_next<T: ExtendsVideoEncodeSessionParametersGetInfoKHR + ?Sized>(
41399        mut self,
41400        next: &'a mut T,
41401    ) -> Self {
41402        unsafe {
41403            let next_ptr = <*const T>::cast(next);
41404            let last_next = ptr_chain_iter(next).last().unwrap();
41405            (*last_next).p_next = self.p_next as _;
41406            self.p_next = next_ptr;
41407        }
41408        self
41409    }
41410}
41411#[repr(C)]
41412#[cfg_attr(feature = "debug", derive(Debug))]
41413#[derive(Copy, Clone)]
41414#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeSessionParametersFeedbackInfoKHR.html>"]
41415#[must_use]
41416pub struct VideoEncodeSessionParametersFeedbackInfoKHR<'a> {
41417    pub s_type: StructureType,
41418    pub p_next: *mut c_void,
41419    pub has_overrides: Bool32,
41420    pub _marker: PhantomData<&'a ()>,
41421}
41422unsafe impl Send for VideoEncodeSessionParametersFeedbackInfoKHR<'_> {}
41423unsafe impl Sync for VideoEncodeSessionParametersFeedbackInfoKHR<'_> {}
41424impl ::core::default::Default for VideoEncodeSessionParametersFeedbackInfoKHR<'_> {
41425    #[inline]
41426    fn default() -> Self {
41427        Self {
41428            s_type: Self::STRUCTURE_TYPE,
41429            p_next: ::core::ptr::null_mut(),
41430            has_overrides: Bool32::default(),
41431            _marker: PhantomData,
41432        }
41433    }
41434}
41435unsafe impl<'a> TaggedStructure for VideoEncodeSessionParametersFeedbackInfoKHR<'a> {
41436    const STRUCTURE_TYPE: StructureType =
41437        StructureType::VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR;
41438}
41439pub unsafe trait ExtendsVideoEncodeSessionParametersFeedbackInfoKHR {}
41440impl<'a> VideoEncodeSessionParametersFeedbackInfoKHR<'a> {
41441    #[inline]
41442    pub fn has_overrides(mut self, has_overrides: bool) -> Self {
41443        self.has_overrides = has_overrides.into();
41444        self
41445    }
41446    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41447    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41448    #[doc = r" valid extension structs can be pushed into the chain."]
41449    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41450    #[doc = r" chain will look like `A -> D -> B -> C`."]
41451    pub fn push_next<T: ExtendsVideoEncodeSessionParametersFeedbackInfoKHR + ?Sized>(
41452        mut self,
41453        next: &'a mut T,
41454    ) -> Self {
41455        unsafe {
41456            let next_ptr = <*mut T>::cast(next);
41457            let last_next = ptr_chain_iter(next).last().unwrap();
41458            (*last_next).p_next = self.p_next as _;
41459            self.p_next = next_ptr;
41460        }
41461        self
41462    }
41463}
41464#[repr(C)]
41465#[cfg_attr(feature = "debug", derive(Debug))]
41466#[derive(Copy, Clone)]
41467#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoBeginCodingInfoKHR.html>"]
41468#[must_use]
41469pub struct VideoBeginCodingInfoKHR<'a> {
41470    pub s_type: StructureType,
41471    pub p_next: *const c_void,
41472    pub flags: VideoBeginCodingFlagsKHR,
41473    pub video_session: VideoSessionKHR,
41474    pub video_session_parameters: VideoSessionParametersKHR,
41475    pub reference_slot_count: u32,
41476    pub p_reference_slots: *const VideoReferenceSlotInfoKHR<'a>,
41477    pub _marker: PhantomData<&'a ()>,
41478}
41479unsafe impl Send for VideoBeginCodingInfoKHR<'_> {}
41480unsafe impl Sync for VideoBeginCodingInfoKHR<'_> {}
41481impl ::core::default::Default for VideoBeginCodingInfoKHR<'_> {
41482    #[inline]
41483    fn default() -> Self {
41484        Self {
41485            s_type: Self::STRUCTURE_TYPE,
41486            p_next: ::core::ptr::null(),
41487            flags: VideoBeginCodingFlagsKHR::default(),
41488            video_session: VideoSessionKHR::default(),
41489            video_session_parameters: VideoSessionParametersKHR::default(),
41490            reference_slot_count: u32::default(),
41491            p_reference_slots: ::core::ptr::null(),
41492            _marker: PhantomData,
41493        }
41494    }
41495}
41496unsafe impl<'a> TaggedStructure for VideoBeginCodingInfoKHR<'a> {
41497    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_BEGIN_CODING_INFO_KHR;
41498}
41499pub unsafe trait ExtendsVideoBeginCodingInfoKHR {}
41500impl<'a> VideoBeginCodingInfoKHR<'a> {
41501    #[inline]
41502    pub fn flags(mut self, flags: VideoBeginCodingFlagsKHR) -> Self {
41503        self.flags = flags;
41504        self
41505    }
41506    #[inline]
41507    pub fn video_session(mut self, video_session: VideoSessionKHR) -> Self {
41508        self.video_session = video_session;
41509        self
41510    }
41511    #[inline]
41512    pub fn video_session_parameters(
41513        mut self,
41514        video_session_parameters: VideoSessionParametersKHR,
41515    ) -> Self {
41516        self.video_session_parameters = video_session_parameters;
41517        self
41518    }
41519    #[inline]
41520    pub fn reference_slots(mut self, reference_slots: &'a [VideoReferenceSlotInfoKHR<'a>]) -> Self {
41521        self.reference_slot_count = reference_slots.len() as _;
41522        self.p_reference_slots = reference_slots.as_ptr();
41523        self
41524    }
41525    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41526    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41527    #[doc = r" valid extension structs can be pushed into the chain."]
41528    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41529    #[doc = r" chain will look like `A -> D -> B -> C`."]
41530    pub fn push_next<T: ExtendsVideoBeginCodingInfoKHR + ?Sized>(
41531        mut self,
41532        next: &'a mut T,
41533    ) -> Self {
41534        unsafe {
41535            let next_ptr = <*const T>::cast(next);
41536            let last_next = ptr_chain_iter(next).last().unwrap();
41537            (*last_next).p_next = self.p_next as _;
41538            self.p_next = next_ptr;
41539        }
41540        self
41541    }
41542}
41543#[repr(C)]
41544#[cfg_attr(feature = "debug", derive(Debug))]
41545#[derive(Copy, Clone)]
41546#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEndCodingInfoKHR.html>"]
41547#[must_use]
41548pub struct VideoEndCodingInfoKHR<'a> {
41549    pub s_type: StructureType,
41550    pub p_next: *const c_void,
41551    pub flags: VideoEndCodingFlagsKHR,
41552    pub _marker: PhantomData<&'a ()>,
41553}
41554unsafe impl Send for VideoEndCodingInfoKHR<'_> {}
41555unsafe impl Sync for VideoEndCodingInfoKHR<'_> {}
41556impl ::core::default::Default for VideoEndCodingInfoKHR<'_> {
41557    #[inline]
41558    fn default() -> Self {
41559        Self {
41560            s_type: Self::STRUCTURE_TYPE,
41561            p_next: ::core::ptr::null(),
41562            flags: VideoEndCodingFlagsKHR::default(),
41563            _marker: PhantomData,
41564        }
41565    }
41566}
41567unsafe impl<'a> TaggedStructure for VideoEndCodingInfoKHR<'a> {
41568    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_END_CODING_INFO_KHR;
41569}
41570impl<'a> VideoEndCodingInfoKHR<'a> {
41571    #[inline]
41572    pub fn flags(mut self, flags: VideoEndCodingFlagsKHR) -> Self {
41573        self.flags = flags;
41574        self
41575    }
41576}
41577#[repr(C)]
41578#[cfg_attr(feature = "debug", derive(Debug))]
41579#[derive(Copy, Clone)]
41580#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoCodingControlInfoKHR.html>"]
41581#[must_use]
41582pub struct VideoCodingControlInfoKHR<'a> {
41583    pub s_type: StructureType,
41584    pub p_next: *const c_void,
41585    pub flags: VideoCodingControlFlagsKHR,
41586    pub _marker: PhantomData<&'a ()>,
41587}
41588unsafe impl Send for VideoCodingControlInfoKHR<'_> {}
41589unsafe impl Sync for VideoCodingControlInfoKHR<'_> {}
41590impl ::core::default::Default for VideoCodingControlInfoKHR<'_> {
41591    #[inline]
41592    fn default() -> Self {
41593        Self {
41594            s_type: Self::STRUCTURE_TYPE,
41595            p_next: ::core::ptr::null(),
41596            flags: VideoCodingControlFlagsKHR::default(),
41597            _marker: PhantomData,
41598        }
41599    }
41600}
41601unsafe impl<'a> TaggedStructure for VideoCodingControlInfoKHR<'a> {
41602    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_CODING_CONTROL_INFO_KHR;
41603}
41604pub unsafe trait ExtendsVideoCodingControlInfoKHR {}
41605impl<'a> VideoCodingControlInfoKHR<'a> {
41606    #[inline]
41607    pub fn flags(mut self, flags: VideoCodingControlFlagsKHR) -> Self {
41608        self.flags = flags;
41609        self
41610    }
41611    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41612    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41613    #[doc = r" valid extension structs can be pushed into the chain."]
41614    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41615    #[doc = r" chain will look like `A -> D -> B -> C`."]
41616    pub fn push_next<T: ExtendsVideoCodingControlInfoKHR + ?Sized>(
41617        mut self,
41618        next: &'a mut T,
41619    ) -> Self {
41620        unsafe {
41621            let next_ptr = <*const T>::cast(next);
41622            let last_next = ptr_chain_iter(next).last().unwrap();
41623            (*last_next).p_next = self.p_next as _;
41624            self.p_next = next_ptr;
41625        }
41626        self
41627    }
41628}
41629#[repr(C)]
41630#[cfg_attr(feature = "debug", derive(Debug))]
41631#[derive(Copy, Clone)]
41632#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeUsageInfoKHR.html>"]
41633#[must_use]
41634pub struct VideoEncodeUsageInfoKHR<'a> {
41635    pub s_type: StructureType,
41636    pub p_next: *const c_void,
41637    pub video_usage_hints: VideoEncodeUsageFlagsKHR,
41638    pub video_content_hints: VideoEncodeContentFlagsKHR,
41639    pub tuning_mode: VideoEncodeTuningModeKHR,
41640    pub _marker: PhantomData<&'a ()>,
41641}
41642unsafe impl Send for VideoEncodeUsageInfoKHR<'_> {}
41643unsafe impl Sync for VideoEncodeUsageInfoKHR<'_> {}
41644impl ::core::default::Default for VideoEncodeUsageInfoKHR<'_> {
41645    #[inline]
41646    fn default() -> Self {
41647        Self {
41648            s_type: Self::STRUCTURE_TYPE,
41649            p_next: ::core::ptr::null(),
41650            video_usage_hints: VideoEncodeUsageFlagsKHR::default(),
41651            video_content_hints: VideoEncodeContentFlagsKHR::default(),
41652            tuning_mode: VideoEncodeTuningModeKHR::default(),
41653            _marker: PhantomData,
41654        }
41655    }
41656}
41657unsafe impl<'a> TaggedStructure for VideoEncodeUsageInfoKHR<'a> {
41658    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_USAGE_INFO_KHR;
41659}
41660unsafe impl ExtendsVideoProfileInfoKHR for VideoEncodeUsageInfoKHR<'_> {}
41661unsafe impl ExtendsQueryPoolCreateInfo for VideoEncodeUsageInfoKHR<'_> {}
41662impl<'a> VideoEncodeUsageInfoKHR<'a> {
41663    #[inline]
41664    pub fn video_usage_hints(mut self, video_usage_hints: VideoEncodeUsageFlagsKHR) -> Self {
41665        self.video_usage_hints = video_usage_hints;
41666        self
41667    }
41668    #[inline]
41669    pub fn video_content_hints(mut self, video_content_hints: VideoEncodeContentFlagsKHR) -> Self {
41670        self.video_content_hints = video_content_hints;
41671        self
41672    }
41673    #[inline]
41674    pub fn tuning_mode(mut self, tuning_mode: VideoEncodeTuningModeKHR) -> Self {
41675        self.tuning_mode = tuning_mode;
41676        self
41677    }
41678}
41679#[repr(C)]
41680#[cfg_attr(feature = "debug", derive(Debug))]
41681#[derive(Copy, Clone)]
41682#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeInfoKHR.html>"]
41683#[must_use]
41684pub struct VideoEncodeInfoKHR<'a> {
41685    pub s_type: StructureType,
41686    pub p_next: *const c_void,
41687    pub flags: VideoEncodeFlagsKHR,
41688    pub dst_buffer: Buffer,
41689    pub dst_buffer_offset: DeviceSize,
41690    pub dst_buffer_range: DeviceSize,
41691    pub src_picture_resource: VideoPictureResourceInfoKHR<'a>,
41692    pub p_setup_reference_slot: *const VideoReferenceSlotInfoKHR<'a>,
41693    pub reference_slot_count: u32,
41694    pub p_reference_slots: *const VideoReferenceSlotInfoKHR<'a>,
41695    pub preceding_externally_encoded_bytes: u32,
41696    pub _marker: PhantomData<&'a ()>,
41697}
41698unsafe impl Send for VideoEncodeInfoKHR<'_> {}
41699unsafe impl Sync for VideoEncodeInfoKHR<'_> {}
41700impl ::core::default::Default for VideoEncodeInfoKHR<'_> {
41701    #[inline]
41702    fn default() -> Self {
41703        Self {
41704            s_type: Self::STRUCTURE_TYPE,
41705            p_next: ::core::ptr::null(),
41706            flags: VideoEncodeFlagsKHR::default(),
41707            dst_buffer: Buffer::default(),
41708            dst_buffer_offset: DeviceSize::default(),
41709            dst_buffer_range: DeviceSize::default(),
41710            src_picture_resource: VideoPictureResourceInfoKHR::default(),
41711            p_setup_reference_slot: ::core::ptr::null(),
41712            reference_slot_count: u32::default(),
41713            p_reference_slots: ::core::ptr::null(),
41714            preceding_externally_encoded_bytes: u32::default(),
41715            _marker: PhantomData,
41716        }
41717    }
41718}
41719unsafe impl<'a> TaggedStructure for VideoEncodeInfoKHR<'a> {
41720    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_INFO_KHR;
41721}
41722pub unsafe trait ExtendsVideoEncodeInfoKHR {}
41723impl<'a> VideoEncodeInfoKHR<'a> {
41724    #[inline]
41725    pub fn flags(mut self, flags: VideoEncodeFlagsKHR) -> Self {
41726        self.flags = flags;
41727        self
41728    }
41729    #[inline]
41730    pub fn dst_buffer(mut self, dst_buffer: Buffer) -> Self {
41731        self.dst_buffer = dst_buffer;
41732        self
41733    }
41734    #[inline]
41735    pub fn dst_buffer_offset(mut self, dst_buffer_offset: DeviceSize) -> Self {
41736        self.dst_buffer_offset = dst_buffer_offset;
41737        self
41738    }
41739    #[inline]
41740    pub fn dst_buffer_range(mut self, dst_buffer_range: DeviceSize) -> Self {
41741        self.dst_buffer_range = dst_buffer_range;
41742        self
41743    }
41744    #[inline]
41745    pub fn src_picture_resource(
41746        mut self,
41747        src_picture_resource: VideoPictureResourceInfoKHR<'a>,
41748    ) -> Self {
41749        self.src_picture_resource = src_picture_resource;
41750        self
41751    }
41752    #[inline]
41753    pub fn setup_reference_slot(
41754        mut self,
41755        setup_reference_slot: &'a VideoReferenceSlotInfoKHR<'a>,
41756    ) -> Self {
41757        self.p_setup_reference_slot = setup_reference_slot;
41758        self
41759    }
41760    #[inline]
41761    pub fn reference_slots(mut self, reference_slots: &'a [VideoReferenceSlotInfoKHR<'a>]) -> Self {
41762        self.reference_slot_count = reference_slots.len() as _;
41763        self.p_reference_slots = reference_slots.as_ptr();
41764        self
41765    }
41766    #[inline]
41767    pub fn preceding_externally_encoded_bytes(
41768        mut self,
41769        preceding_externally_encoded_bytes: u32,
41770    ) -> Self {
41771        self.preceding_externally_encoded_bytes = preceding_externally_encoded_bytes;
41772        self
41773    }
41774    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41775    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41776    #[doc = r" valid extension structs can be pushed into the chain."]
41777    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41778    #[doc = r" chain will look like `A -> D -> B -> C`."]
41779    pub fn push_next<T: ExtendsVideoEncodeInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
41780        unsafe {
41781            let next_ptr = <*const T>::cast(next);
41782            let last_next = ptr_chain_iter(next).last().unwrap();
41783            (*last_next).p_next = self.p_next as _;
41784            self.p_next = next_ptr;
41785        }
41786        self
41787    }
41788}
41789#[repr(C)]
41790#[cfg_attr(feature = "debug", derive(Debug))]
41791#[derive(Copy, Clone)]
41792#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryPoolVideoEncodeFeedbackCreateInfoKHR.html>"]
41793#[must_use]
41794pub struct QueryPoolVideoEncodeFeedbackCreateInfoKHR<'a> {
41795    pub s_type: StructureType,
41796    pub p_next: *const c_void,
41797    pub encode_feedback_flags: VideoEncodeFeedbackFlagsKHR,
41798    pub _marker: PhantomData<&'a ()>,
41799}
41800unsafe impl Send for QueryPoolVideoEncodeFeedbackCreateInfoKHR<'_> {}
41801unsafe impl Sync for QueryPoolVideoEncodeFeedbackCreateInfoKHR<'_> {}
41802impl ::core::default::Default for QueryPoolVideoEncodeFeedbackCreateInfoKHR<'_> {
41803    #[inline]
41804    fn default() -> Self {
41805        Self {
41806            s_type: Self::STRUCTURE_TYPE,
41807            p_next: ::core::ptr::null(),
41808            encode_feedback_flags: VideoEncodeFeedbackFlagsKHR::default(),
41809            _marker: PhantomData,
41810        }
41811    }
41812}
41813unsafe impl<'a> TaggedStructure for QueryPoolVideoEncodeFeedbackCreateInfoKHR<'a> {
41814    const STRUCTURE_TYPE: StructureType =
41815        StructureType::QUERY_POOL_VIDEO_ENCODE_FEEDBACK_CREATE_INFO_KHR;
41816}
41817unsafe impl ExtendsQueryPoolCreateInfo for QueryPoolVideoEncodeFeedbackCreateInfoKHR<'_> {}
41818impl<'a> QueryPoolVideoEncodeFeedbackCreateInfoKHR<'a> {
41819    #[inline]
41820    pub fn encode_feedback_flags(
41821        mut self,
41822        encode_feedback_flags: VideoEncodeFeedbackFlagsKHR,
41823    ) -> Self {
41824        self.encode_feedback_flags = encode_feedback_flags;
41825        self
41826    }
41827}
41828#[repr(C)]
41829#[cfg_attr(feature = "debug", derive(Debug))]
41830#[derive(Copy, Clone)]
41831#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeQualityLevelInfoKHR.html>"]
41832#[must_use]
41833pub struct VideoEncodeQualityLevelInfoKHR<'a> {
41834    pub s_type: StructureType,
41835    pub p_next: *const c_void,
41836    pub quality_level: u32,
41837    pub _marker: PhantomData<&'a ()>,
41838}
41839unsafe impl Send for VideoEncodeQualityLevelInfoKHR<'_> {}
41840unsafe impl Sync for VideoEncodeQualityLevelInfoKHR<'_> {}
41841impl ::core::default::Default for VideoEncodeQualityLevelInfoKHR<'_> {
41842    #[inline]
41843    fn default() -> Self {
41844        Self {
41845            s_type: Self::STRUCTURE_TYPE,
41846            p_next: ::core::ptr::null(),
41847            quality_level: u32::default(),
41848            _marker: PhantomData,
41849        }
41850    }
41851}
41852unsafe impl<'a> TaggedStructure for VideoEncodeQualityLevelInfoKHR<'a> {
41853    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR;
41854}
41855unsafe impl ExtendsVideoCodingControlInfoKHR for VideoEncodeQualityLevelInfoKHR<'_> {}
41856unsafe impl ExtendsVideoSessionParametersCreateInfoKHR for VideoEncodeQualityLevelInfoKHR<'_> {}
41857impl<'a> VideoEncodeQualityLevelInfoKHR<'a> {
41858    #[inline]
41859    pub fn quality_level(mut self, quality_level: u32) -> Self {
41860        self.quality_level = quality_level;
41861        self
41862    }
41863}
41864#[repr(C)]
41865#[cfg_attr(feature = "debug", derive(Debug))]
41866#[derive(Copy, Clone)]
41867#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceVideoEncodeQualityLevelInfoKHR.html>"]
41868#[must_use]
41869pub struct PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'a> {
41870    pub s_type: StructureType,
41871    pub p_next: *const c_void,
41872    pub p_video_profile: *const VideoProfileInfoKHR<'a>,
41873    pub quality_level: u32,
41874    pub _marker: PhantomData<&'a ()>,
41875}
41876unsafe impl Send for PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'_> {}
41877unsafe impl Sync for PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'_> {}
41878impl ::core::default::Default for PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'_> {
41879    #[inline]
41880    fn default() -> Self {
41881        Self {
41882            s_type: Self::STRUCTURE_TYPE,
41883            p_next: ::core::ptr::null(),
41884            p_video_profile: ::core::ptr::null(),
41885            quality_level: u32::default(),
41886            _marker: PhantomData,
41887        }
41888    }
41889}
41890unsafe impl<'a> TaggedStructure for PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'a> {
41891    const STRUCTURE_TYPE: StructureType =
41892        StructureType::PHYSICAL_DEVICE_VIDEO_ENCODE_QUALITY_LEVEL_INFO_KHR;
41893}
41894impl<'a> PhysicalDeviceVideoEncodeQualityLevelInfoKHR<'a> {
41895    #[inline]
41896    pub fn video_profile(mut self, video_profile: &'a VideoProfileInfoKHR<'a>) -> Self {
41897        self.p_video_profile = video_profile;
41898        self
41899    }
41900    #[inline]
41901    pub fn quality_level(mut self, quality_level: u32) -> Self {
41902        self.quality_level = quality_level;
41903        self
41904    }
41905}
41906#[repr(C)]
41907#[cfg_attr(feature = "debug", derive(Debug))]
41908#[derive(Copy, Clone)]
41909#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeQualityLevelPropertiesKHR.html>"]
41910#[must_use]
41911pub struct VideoEncodeQualityLevelPropertiesKHR<'a> {
41912    pub s_type: StructureType,
41913    pub p_next: *mut c_void,
41914    pub preferred_rate_control_mode: VideoEncodeRateControlModeFlagsKHR,
41915    pub preferred_rate_control_layer_count: u32,
41916    pub _marker: PhantomData<&'a ()>,
41917}
41918unsafe impl Send for VideoEncodeQualityLevelPropertiesKHR<'_> {}
41919unsafe impl Sync for VideoEncodeQualityLevelPropertiesKHR<'_> {}
41920impl ::core::default::Default for VideoEncodeQualityLevelPropertiesKHR<'_> {
41921    #[inline]
41922    fn default() -> Self {
41923        Self {
41924            s_type: Self::STRUCTURE_TYPE,
41925            p_next: ::core::ptr::null_mut(),
41926            preferred_rate_control_mode: VideoEncodeRateControlModeFlagsKHR::default(),
41927            preferred_rate_control_layer_count: u32::default(),
41928            _marker: PhantomData,
41929        }
41930    }
41931}
41932unsafe impl<'a> TaggedStructure for VideoEncodeQualityLevelPropertiesKHR<'a> {
41933    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_QUALITY_LEVEL_PROPERTIES_KHR;
41934}
41935pub unsafe trait ExtendsVideoEncodeQualityLevelPropertiesKHR {}
41936impl<'a> VideoEncodeQualityLevelPropertiesKHR<'a> {
41937    #[inline]
41938    pub fn preferred_rate_control_mode(
41939        mut self,
41940        preferred_rate_control_mode: VideoEncodeRateControlModeFlagsKHR,
41941    ) -> Self {
41942        self.preferred_rate_control_mode = preferred_rate_control_mode;
41943        self
41944    }
41945    #[inline]
41946    pub fn preferred_rate_control_layer_count(
41947        mut self,
41948        preferred_rate_control_layer_count: u32,
41949    ) -> Self {
41950        self.preferred_rate_control_layer_count = preferred_rate_control_layer_count;
41951        self
41952    }
41953    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
41954    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
41955    #[doc = r" valid extension structs can be pushed into the chain."]
41956    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
41957    #[doc = r" chain will look like `A -> D -> B -> C`."]
41958    pub fn push_next<T: ExtendsVideoEncodeQualityLevelPropertiesKHR + ?Sized>(
41959        mut self,
41960        next: &'a mut T,
41961    ) -> Self {
41962        unsafe {
41963            let next_ptr = <*mut T>::cast(next);
41964            let last_next = ptr_chain_iter(next).last().unwrap();
41965            (*last_next).p_next = self.p_next as _;
41966            self.p_next = next_ptr;
41967        }
41968        self
41969    }
41970}
41971#[repr(C)]
41972#[cfg_attr(feature = "debug", derive(Debug))]
41973#[derive(Copy, Clone)]
41974#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeRateControlInfoKHR.html>"]
41975#[must_use]
41976pub struct VideoEncodeRateControlInfoKHR<'a> {
41977    pub s_type: StructureType,
41978    pub p_next: *const c_void,
41979    pub flags: VideoEncodeRateControlFlagsKHR,
41980    pub rate_control_mode: VideoEncodeRateControlModeFlagsKHR,
41981    pub layer_count: u32,
41982    pub p_layers: *const VideoEncodeRateControlLayerInfoKHR<'a>,
41983    pub virtual_buffer_size_in_ms: u32,
41984    pub initial_virtual_buffer_size_in_ms: u32,
41985    pub _marker: PhantomData<&'a ()>,
41986}
41987unsafe impl Send for VideoEncodeRateControlInfoKHR<'_> {}
41988unsafe impl Sync for VideoEncodeRateControlInfoKHR<'_> {}
41989impl ::core::default::Default for VideoEncodeRateControlInfoKHR<'_> {
41990    #[inline]
41991    fn default() -> Self {
41992        Self {
41993            s_type: Self::STRUCTURE_TYPE,
41994            p_next: ::core::ptr::null(),
41995            flags: VideoEncodeRateControlFlagsKHR::default(),
41996            rate_control_mode: VideoEncodeRateControlModeFlagsKHR::default(),
41997            layer_count: u32::default(),
41998            p_layers: ::core::ptr::null(),
41999            virtual_buffer_size_in_ms: u32::default(),
42000            initial_virtual_buffer_size_in_ms: u32::default(),
42001            _marker: PhantomData,
42002        }
42003    }
42004}
42005unsafe impl<'a> TaggedStructure for VideoEncodeRateControlInfoKHR<'a> {
42006    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_RATE_CONTROL_INFO_KHR;
42007}
42008unsafe impl ExtendsVideoCodingControlInfoKHR for VideoEncodeRateControlInfoKHR<'_> {}
42009unsafe impl ExtendsVideoBeginCodingInfoKHR for VideoEncodeRateControlInfoKHR<'_> {}
42010impl<'a> VideoEncodeRateControlInfoKHR<'a> {
42011    #[inline]
42012    pub fn flags(mut self, flags: VideoEncodeRateControlFlagsKHR) -> Self {
42013        self.flags = flags;
42014        self
42015    }
42016    #[inline]
42017    pub fn rate_control_mode(
42018        mut self,
42019        rate_control_mode: VideoEncodeRateControlModeFlagsKHR,
42020    ) -> Self {
42021        self.rate_control_mode = rate_control_mode;
42022        self
42023    }
42024    #[inline]
42025    pub fn layers(mut self, layers: &'a [VideoEncodeRateControlLayerInfoKHR<'a>]) -> Self {
42026        self.layer_count = layers.len() as _;
42027        self.p_layers = layers.as_ptr();
42028        self
42029    }
42030    #[inline]
42031    pub fn virtual_buffer_size_in_ms(mut self, virtual_buffer_size_in_ms: u32) -> Self {
42032        self.virtual_buffer_size_in_ms = virtual_buffer_size_in_ms;
42033        self
42034    }
42035    #[inline]
42036    pub fn initial_virtual_buffer_size_in_ms(
42037        mut self,
42038        initial_virtual_buffer_size_in_ms: u32,
42039    ) -> Self {
42040        self.initial_virtual_buffer_size_in_ms = initial_virtual_buffer_size_in_ms;
42041        self
42042    }
42043}
42044#[repr(C)]
42045#[cfg_attr(feature = "debug", derive(Debug))]
42046#[derive(Copy, Clone)]
42047#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeRateControlLayerInfoKHR.html>"]
42048#[must_use]
42049pub struct VideoEncodeRateControlLayerInfoKHR<'a> {
42050    pub s_type: StructureType,
42051    pub p_next: *const c_void,
42052    pub average_bitrate: u64,
42053    pub max_bitrate: u64,
42054    pub frame_rate_numerator: u32,
42055    pub frame_rate_denominator: u32,
42056    pub _marker: PhantomData<&'a ()>,
42057}
42058unsafe impl Send for VideoEncodeRateControlLayerInfoKHR<'_> {}
42059unsafe impl Sync for VideoEncodeRateControlLayerInfoKHR<'_> {}
42060impl ::core::default::Default for VideoEncodeRateControlLayerInfoKHR<'_> {
42061    #[inline]
42062    fn default() -> Self {
42063        Self {
42064            s_type: Self::STRUCTURE_TYPE,
42065            p_next: ::core::ptr::null(),
42066            average_bitrate: u64::default(),
42067            max_bitrate: u64::default(),
42068            frame_rate_numerator: u32::default(),
42069            frame_rate_denominator: u32::default(),
42070            _marker: PhantomData,
42071        }
42072    }
42073}
42074unsafe impl<'a> TaggedStructure for VideoEncodeRateControlLayerInfoKHR<'a> {
42075    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR;
42076}
42077pub unsafe trait ExtendsVideoEncodeRateControlLayerInfoKHR {}
42078impl<'a> VideoEncodeRateControlLayerInfoKHR<'a> {
42079    #[inline]
42080    pub fn average_bitrate(mut self, average_bitrate: u64) -> Self {
42081        self.average_bitrate = average_bitrate;
42082        self
42083    }
42084    #[inline]
42085    pub fn max_bitrate(mut self, max_bitrate: u64) -> Self {
42086        self.max_bitrate = max_bitrate;
42087        self
42088    }
42089    #[inline]
42090    pub fn frame_rate_numerator(mut self, frame_rate_numerator: u32) -> Self {
42091        self.frame_rate_numerator = frame_rate_numerator;
42092        self
42093    }
42094    #[inline]
42095    pub fn frame_rate_denominator(mut self, frame_rate_denominator: u32) -> Self {
42096        self.frame_rate_denominator = frame_rate_denominator;
42097        self
42098    }
42099    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
42100    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
42101    #[doc = r" valid extension structs can be pushed into the chain."]
42102    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
42103    #[doc = r" chain will look like `A -> D -> B -> C`."]
42104    pub fn push_next<T: ExtendsVideoEncodeRateControlLayerInfoKHR + ?Sized>(
42105        mut self,
42106        next: &'a mut T,
42107    ) -> Self {
42108        unsafe {
42109            let next_ptr = <*const T>::cast(next);
42110            let last_next = ptr_chain_iter(next).last().unwrap();
42111            (*last_next).p_next = self.p_next as _;
42112            self.p_next = next_ptr;
42113        }
42114        self
42115    }
42116}
42117#[repr(C)]
42118#[cfg_attr(feature = "debug", derive(Debug))]
42119#[derive(Copy, Clone)]
42120#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeCapabilitiesKHR.html>"]
42121#[must_use]
42122pub struct VideoEncodeCapabilitiesKHR<'a> {
42123    pub s_type: StructureType,
42124    pub p_next: *mut c_void,
42125    pub flags: VideoEncodeCapabilityFlagsKHR,
42126    pub rate_control_modes: VideoEncodeRateControlModeFlagsKHR,
42127    pub max_rate_control_layers: u32,
42128    pub max_bitrate: u64,
42129    pub max_quality_levels: u32,
42130    pub encode_input_picture_granularity: Extent2D,
42131    pub supported_encode_feedback_flags: VideoEncodeFeedbackFlagsKHR,
42132    pub _marker: PhantomData<&'a ()>,
42133}
42134unsafe impl Send for VideoEncodeCapabilitiesKHR<'_> {}
42135unsafe impl Sync for VideoEncodeCapabilitiesKHR<'_> {}
42136impl ::core::default::Default for VideoEncodeCapabilitiesKHR<'_> {
42137    #[inline]
42138    fn default() -> Self {
42139        Self {
42140            s_type: Self::STRUCTURE_TYPE,
42141            p_next: ::core::ptr::null_mut(),
42142            flags: VideoEncodeCapabilityFlagsKHR::default(),
42143            rate_control_modes: VideoEncodeRateControlModeFlagsKHR::default(),
42144            max_rate_control_layers: u32::default(),
42145            max_bitrate: u64::default(),
42146            max_quality_levels: u32::default(),
42147            encode_input_picture_granularity: Extent2D::default(),
42148            supported_encode_feedback_flags: VideoEncodeFeedbackFlagsKHR::default(),
42149            _marker: PhantomData,
42150        }
42151    }
42152}
42153unsafe impl<'a> TaggedStructure for VideoEncodeCapabilitiesKHR<'a> {
42154    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_CAPABILITIES_KHR;
42155}
42156unsafe impl ExtendsVideoCapabilitiesKHR for VideoEncodeCapabilitiesKHR<'_> {}
42157impl<'a> VideoEncodeCapabilitiesKHR<'a> {
42158    #[inline]
42159    pub fn flags(mut self, flags: VideoEncodeCapabilityFlagsKHR) -> Self {
42160        self.flags = flags;
42161        self
42162    }
42163    #[inline]
42164    pub fn rate_control_modes(
42165        mut self,
42166        rate_control_modes: VideoEncodeRateControlModeFlagsKHR,
42167    ) -> Self {
42168        self.rate_control_modes = rate_control_modes;
42169        self
42170    }
42171    #[inline]
42172    pub fn max_rate_control_layers(mut self, max_rate_control_layers: u32) -> Self {
42173        self.max_rate_control_layers = max_rate_control_layers;
42174        self
42175    }
42176    #[inline]
42177    pub fn max_bitrate(mut self, max_bitrate: u64) -> Self {
42178        self.max_bitrate = max_bitrate;
42179        self
42180    }
42181    #[inline]
42182    pub fn max_quality_levels(mut self, max_quality_levels: u32) -> Self {
42183        self.max_quality_levels = max_quality_levels;
42184        self
42185    }
42186    #[inline]
42187    pub fn encode_input_picture_granularity(
42188        mut self,
42189        encode_input_picture_granularity: Extent2D,
42190    ) -> Self {
42191        self.encode_input_picture_granularity = encode_input_picture_granularity;
42192        self
42193    }
42194    #[inline]
42195    pub fn supported_encode_feedback_flags(
42196        mut self,
42197        supported_encode_feedback_flags: VideoEncodeFeedbackFlagsKHR,
42198    ) -> Self {
42199        self.supported_encode_feedback_flags = supported_encode_feedback_flags;
42200        self
42201    }
42202}
42203#[repr(C)]
42204#[cfg_attr(feature = "debug", derive(Debug))]
42205#[derive(Copy, Clone)]
42206#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264CapabilitiesKHR.html>"]
42207#[must_use]
42208pub struct VideoEncodeH264CapabilitiesKHR<'a> {
42209    pub s_type: StructureType,
42210    pub p_next: *mut c_void,
42211    pub flags: VideoEncodeH264CapabilityFlagsKHR,
42212    pub max_level_idc: StdVideoH264LevelIdc,
42213    pub max_slice_count: u32,
42214    pub max_p_picture_l0_reference_count: u32,
42215    pub max_b_picture_l0_reference_count: u32,
42216    pub max_l1_reference_count: u32,
42217    pub max_temporal_layer_count: u32,
42218    pub expect_dyadic_temporal_layer_pattern: Bool32,
42219    pub min_qp: i32,
42220    pub max_qp: i32,
42221    pub prefers_gop_remaining_frames: Bool32,
42222    pub requires_gop_remaining_frames: Bool32,
42223    pub std_syntax_flags: VideoEncodeH264StdFlagsKHR,
42224    pub _marker: PhantomData<&'a ()>,
42225}
42226unsafe impl Send for VideoEncodeH264CapabilitiesKHR<'_> {}
42227unsafe impl Sync for VideoEncodeH264CapabilitiesKHR<'_> {}
42228impl ::core::default::Default for VideoEncodeH264CapabilitiesKHR<'_> {
42229    #[inline]
42230    fn default() -> Self {
42231        Self {
42232            s_type: Self::STRUCTURE_TYPE,
42233            p_next: ::core::ptr::null_mut(),
42234            flags: VideoEncodeH264CapabilityFlagsKHR::default(),
42235            max_level_idc: StdVideoH264LevelIdc::default(),
42236            max_slice_count: u32::default(),
42237            max_p_picture_l0_reference_count: u32::default(),
42238            max_b_picture_l0_reference_count: u32::default(),
42239            max_l1_reference_count: u32::default(),
42240            max_temporal_layer_count: u32::default(),
42241            expect_dyadic_temporal_layer_pattern: Bool32::default(),
42242            min_qp: i32::default(),
42243            max_qp: i32::default(),
42244            prefers_gop_remaining_frames: Bool32::default(),
42245            requires_gop_remaining_frames: Bool32::default(),
42246            std_syntax_flags: VideoEncodeH264StdFlagsKHR::default(),
42247            _marker: PhantomData,
42248        }
42249    }
42250}
42251unsafe impl<'a> TaggedStructure for VideoEncodeH264CapabilitiesKHR<'a> {
42252    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_CAPABILITIES_KHR;
42253}
42254unsafe impl ExtendsVideoCapabilitiesKHR for VideoEncodeH264CapabilitiesKHR<'_> {}
42255impl<'a> VideoEncodeH264CapabilitiesKHR<'a> {
42256    #[inline]
42257    pub fn flags(mut self, flags: VideoEncodeH264CapabilityFlagsKHR) -> Self {
42258        self.flags = flags;
42259        self
42260    }
42261    #[inline]
42262    pub fn max_level_idc(mut self, max_level_idc: StdVideoH264LevelIdc) -> Self {
42263        self.max_level_idc = max_level_idc;
42264        self
42265    }
42266    #[inline]
42267    pub fn max_slice_count(mut self, max_slice_count: u32) -> Self {
42268        self.max_slice_count = max_slice_count;
42269        self
42270    }
42271    #[inline]
42272    pub fn max_p_picture_l0_reference_count(
42273        mut self,
42274        max_p_picture_l0_reference_count: u32,
42275    ) -> Self {
42276        self.max_p_picture_l0_reference_count = max_p_picture_l0_reference_count;
42277        self
42278    }
42279    #[inline]
42280    pub fn max_b_picture_l0_reference_count(
42281        mut self,
42282        max_b_picture_l0_reference_count: u32,
42283    ) -> Self {
42284        self.max_b_picture_l0_reference_count = max_b_picture_l0_reference_count;
42285        self
42286    }
42287    #[inline]
42288    pub fn max_l1_reference_count(mut self, max_l1_reference_count: u32) -> Self {
42289        self.max_l1_reference_count = max_l1_reference_count;
42290        self
42291    }
42292    #[inline]
42293    pub fn max_temporal_layer_count(mut self, max_temporal_layer_count: u32) -> Self {
42294        self.max_temporal_layer_count = max_temporal_layer_count;
42295        self
42296    }
42297    #[inline]
42298    pub fn expect_dyadic_temporal_layer_pattern(
42299        mut self,
42300        expect_dyadic_temporal_layer_pattern: bool,
42301    ) -> Self {
42302        self.expect_dyadic_temporal_layer_pattern = expect_dyadic_temporal_layer_pattern.into();
42303        self
42304    }
42305    #[inline]
42306    pub fn min_qp(mut self, min_qp: i32) -> Self {
42307        self.min_qp = min_qp;
42308        self
42309    }
42310    #[inline]
42311    pub fn max_qp(mut self, max_qp: i32) -> Self {
42312        self.max_qp = max_qp;
42313        self
42314    }
42315    #[inline]
42316    pub fn prefers_gop_remaining_frames(mut self, prefers_gop_remaining_frames: bool) -> Self {
42317        self.prefers_gop_remaining_frames = prefers_gop_remaining_frames.into();
42318        self
42319    }
42320    #[inline]
42321    pub fn requires_gop_remaining_frames(mut self, requires_gop_remaining_frames: bool) -> Self {
42322        self.requires_gop_remaining_frames = requires_gop_remaining_frames.into();
42323        self
42324    }
42325    #[inline]
42326    pub fn std_syntax_flags(mut self, std_syntax_flags: VideoEncodeH264StdFlagsKHR) -> Self {
42327        self.std_syntax_flags = std_syntax_flags;
42328        self
42329    }
42330}
42331#[repr(C)]
42332#[cfg_attr(feature = "debug", derive(Debug))]
42333#[derive(Copy, Clone)]
42334#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264QualityLevelPropertiesKHR.html>"]
42335#[must_use]
42336pub struct VideoEncodeH264QualityLevelPropertiesKHR<'a> {
42337    pub s_type: StructureType,
42338    pub p_next: *mut c_void,
42339    pub preferred_rate_control_flags: VideoEncodeH264RateControlFlagsKHR,
42340    pub preferred_gop_frame_count: u32,
42341    pub preferred_idr_period: u32,
42342    pub preferred_consecutive_b_frame_count: u32,
42343    pub preferred_temporal_layer_count: u32,
42344    pub preferred_constant_qp: VideoEncodeH264QpKHR,
42345    pub preferred_max_l0_reference_count: u32,
42346    pub preferred_max_l1_reference_count: u32,
42347    pub preferred_std_entropy_coding_mode_flag: Bool32,
42348    pub _marker: PhantomData<&'a ()>,
42349}
42350unsafe impl Send for VideoEncodeH264QualityLevelPropertiesKHR<'_> {}
42351unsafe impl Sync for VideoEncodeH264QualityLevelPropertiesKHR<'_> {}
42352impl ::core::default::Default for VideoEncodeH264QualityLevelPropertiesKHR<'_> {
42353    #[inline]
42354    fn default() -> Self {
42355        Self {
42356            s_type: Self::STRUCTURE_TYPE,
42357            p_next: ::core::ptr::null_mut(),
42358            preferred_rate_control_flags: VideoEncodeH264RateControlFlagsKHR::default(),
42359            preferred_gop_frame_count: u32::default(),
42360            preferred_idr_period: u32::default(),
42361            preferred_consecutive_b_frame_count: u32::default(),
42362            preferred_temporal_layer_count: u32::default(),
42363            preferred_constant_qp: VideoEncodeH264QpKHR::default(),
42364            preferred_max_l0_reference_count: u32::default(),
42365            preferred_max_l1_reference_count: u32::default(),
42366            preferred_std_entropy_coding_mode_flag: Bool32::default(),
42367            _marker: PhantomData,
42368        }
42369    }
42370}
42371unsafe impl<'a> TaggedStructure for VideoEncodeH264QualityLevelPropertiesKHR<'a> {
42372    const STRUCTURE_TYPE: StructureType =
42373        StructureType::VIDEO_ENCODE_H264_QUALITY_LEVEL_PROPERTIES_KHR;
42374}
42375unsafe impl ExtendsVideoEncodeQualityLevelPropertiesKHR
42376    for VideoEncodeH264QualityLevelPropertiesKHR<'_>
42377{
42378}
42379impl<'a> VideoEncodeH264QualityLevelPropertiesKHR<'a> {
42380    #[inline]
42381    pub fn preferred_rate_control_flags(
42382        mut self,
42383        preferred_rate_control_flags: VideoEncodeH264RateControlFlagsKHR,
42384    ) -> Self {
42385        self.preferred_rate_control_flags = preferred_rate_control_flags;
42386        self
42387    }
42388    #[inline]
42389    pub fn preferred_gop_frame_count(mut self, preferred_gop_frame_count: u32) -> Self {
42390        self.preferred_gop_frame_count = preferred_gop_frame_count;
42391        self
42392    }
42393    #[inline]
42394    pub fn preferred_idr_period(mut self, preferred_idr_period: u32) -> Self {
42395        self.preferred_idr_period = preferred_idr_period;
42396        self
42397    }
42398    #[inline]
42399    pub fn preferred_consecutive_b_frame_count(
42400        mut self,
42401        preferred_consecutive_b_frame_count: u32,
42402    ) -> Self {
42403        self.preferred_consecutive_b_frame_count = preferred_consecutive_b_frame_count;
42404        self
42405    }
42406    #[inline]
42407    pub fn preferred_temporal_layer_count(mut self, preferred_temporal_layer_count: u32) -> Self {
42408        self.preferred_temporal_layer_count = preferred_temporal_layer_count;
42409        self
42410    }
42411    #[inline]
42412    pub fn preferred_constant_qp(mut self, preferred_constant_qp: VideoEncodeH264QpKHR) -> Self {
42413        self.preferred_constant_qp = preferred_constant_qp;
42414        self
42415    }
42416    #[inline]
42417    pub fn preferred_max_l0_reference_count(
42418        mut self,
42419        preferred_max_l0_reference_count: u32,
42420    ) -> Self {
42421        self.preferred_max_l0_reference_count = preferred_max_l0_reference_count;
42422        self
42423    }
42424    #[inline]
42425    pub fn preferred_max_l1_reference_count(
42426        mut self,
42427        preferred_max_l1_reference_count: u32,
42428    ) -> Self {
42429        self.preferred_max_l1_reference_count = preferred_max_l1_reference_count;
42430        self
42431    }
42432    #[inline]
42433    pub fn preferred_std_entropy_coding_mode_flag(
42434        mut self,
42435        preferred_std_entropy_coding_mode_flag: bool,
42436    ) -> Self {
42437        self.preferred_std_entropy_coding_mode_flag = preferred_std_entropy_coding_mode_flag.into();
42438        self
42439    }
42440}
42441#[repr(C)]
42442#[cfg_attr(feature = "debug", derive(Debug))]
42443#[derive(Copy, Clone)]
42444#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264SessionCreateInfoKHR.html>"]
42445#[must_use]
42446pub struct VideoEncodeH264SessionCreateInfoKHR<'a> {
42447    pub s_type: StructureType,
42448    pub p_next: *const c_void,
42449    pub use_max_level_idc: Bool32,
42450    pub max_level_idc: StdVideoH264LevelIdc,
42451    pub _marker: PhantomData<&'a ()>,
42452}
42453unsafe impl Send for VideoEncodeH264SessionCreateInfoKHR<'_> {}
42454unsafe impl Sync for VideoEncodeH264SessionCreateInfoKHR<'_> {}
42455impl ::core::default::Default for VideoEncodeH264SessionCreateInfoKHR<'_> {
42456    #[inline]
42457    fn default() -> Self {
42458        Self {
42459            s_type: Self::STRUCTURE_TYPE,
42460            p_next: ::core::ptr::null(),
42461            use_max_level_idc: Bool32::default(),
42462            max_level_idc: StdVideoH264LevelIdc::default(),
42463            _marker: PhantomData,
42464        }
42465    }
42466}
42467unsafe impl<'a> TaggedStructure for VideoEncodeH264SessionCreateInfoKHR<'a> {
42468    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_SESSION_CREATE_INFO_KHR;
42469}
42470unsafe impl ExtendsVideoSessionCreateInfoKHR for VideoEncodeH264SessionCreateInfoKHR<'_> {}
42471impl<'a> VideoEncodeH264SessionCreateInfoKHR<'a> {
42472    #[inline]
42473    pub fn use_max_level_idc(mut self, use_max_level_idc: bool) -> Self {
42474        self.use_max_level_idc = use_max_level_idc.into();
42475        self
42476    }
42477    #[inline]
42478    pub fn max_level_idc(mut self, max_level_idc: StdVideoH264LevelIdc) -> Self {
42479        self.max_level_idc = max_level_idc;
42480        self
42481    }
42482}
42483#[repr(C)]
42484#[cfg_attr(feature = "debug", derive(Debug))]
42485#[derive(Copy, Clone)]
42486#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264SessionParametersAddInfoKHR.html>"]
42487#[must_use]
42488pub struct VideoEncodeH264SessionParametersAddInfoKHR<'a> {
42489    pub s_type: StructureType,
42490    pub p_next: *const c_void,
42491    pub std_sps_count: u32,
42492    pub p_std_sp_ss: *const StdVideoH264SequenceParameterSet,
42493    pub std_pps_count: u32,
42494    pub p_std_pp_ss: *const StdVideoH264PictureParameterSet,
42495    pub _marker: PhantomData<&'a ()>,
42496}
42497unsafe impl Send for VideoEncodeH264SessionParametersAddInfoKHR<'_> {}
42498unsafe impl Sync for VideoEncodeH264SessionParametersAddInfoKHR<'_> {}
42499impl ::core::default::Default for VideoEncodeH264SessionParametersAddInfoKHR<'_> {
42500    #[inline]
42501    fn default() -> Self {
42502        Self {
42503            s_type: Self::STRUCTURE_TYPE,
42504            p_next: ::core::ptr::null(),
42505            std_sps_count: u32::default(),
42506            p_std_sp_ss: ::core::ptr::null(),
42507            std_pps_count: u32::default(),
42508            p_std_pp_ss: ::core::ptr::null(),
42509            _marker: PhantomData,
42510        }
42511    }
42512}
42513unsafe impl<'a> TaggedStructure for VideoEncodeH264SessionParametersAddInfoKHR<'a> {
42514    const STRUCTURE_TYPE: StructureType =
42515        StructureType::VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_KHR;
42516}
42517unsafe impl ExtendsVideoSessionParametersUpdateInfoKHR
42518    for VideoEncodeH264SessionParametersAddInfoKHR<'_>
42519{
42520}
42521impl<'a> VideoEncodeH264SessionParametersAddInfoKHR<'a> {
42522    #[inline]
42523    pub fn std_sp_ss(mut self, std_sp_ss: &'a [StdVideoH264SequenceParameterSet]) -> Self {
42524        self.std_sps_count = std_sp_ss.len() as _;
42525        self.p_std_sp_ss = std_sp_ss.as_ptr();
42526        self
42527    }
42528    #[inline]
42529    pub fn std_pp_ss(mut self, std_pp_ss: &'a [StdVideoH264PictureParameterSet]) -> Self {
42530        self.std_pps_count = std_pp_ss.len() as _;
42531        self.p_std_pp_ss = std_pp_ss.as_ptr();
42532        self
42533    }
42534}
42535#[repr(C)]
42536#[cfg_attr(feature = "debug", derive(Debug))]
42537#[derive(Copy, Clone)]
42538#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264SessionParametersCreateInfoKHR.html>"]
42539#[must_use]
42540pub struct VideoEncodeH264SessionParametersCreateInfoKHR<'a> {
42541    pub s_type: StructureType,
42542    pub p_next: *const c_void,
42543    pub max_std_sps_count: u32,
42544    pub max_std_pps_count: u32,
42545    pub p_parameters_add_info: *const VideoEncodeH264SessionParametersAddInfoKHR<'a>,
42546    pub _marker: PhantomData<&'a ()>,
42547}
42548unsafe impl Send for VideoEncodeH264SessionParametersCreateInfoKHR<'_> {}
42549unsafe impl Sync for VideoEncodeH264SessionParametersCreateInfoKHR<'_> {}
42550impl ::core::default::Default for VideoEncodeH264SessionParametersCreateInfoKHR<'_> {
42551    #[inline]
42552    fn default() -> Self {
42553        Self {
42554            s_type: Self::STRUCTURE_TYPE,
42555            p_next: ::core::ptr::null(),
42556            max_std_sps_count: u32::default(),
42557            max_std_pps_count: u32::default(),
42558            p_parameters_add_info: ::core::ptr::null(),
42559            _marker: PhantomData,
42560        }
42561    }
42562}
42563unsafe impl<'a> TaggedStructure for VideoEncodeH264SessionParametersCreateInfoKHR<'a> {
42564    const STRUCTURE_TYPE: StructureType =
42565        StructureType::VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_KHR;
42566}
42567unsafe impl ExtendsVideoSessionParametersCreateInfoKHR
42568    for VideoEncodeH264SessionParametersCreateInfoKHR<'_>
42569{
42570}
42571impl<'a> VideoEncodeH264SessionParametersCreateInfoKHR<'a> {
42572    #[inline]
42573    pub fn max_std_sps_count(mut self, max_std_sps_count: u32) -> Self {
42574        self.max_std_sps_count = max_std_sps_count;
42575        self
42576    }
42577    #[inline]
42578    pub fn max_std_pps_count(mut self, max_std_pps_count: u32) -> Self {
42579        self.max_std_pps_count = max_std_pps_count;
42580        self
42581    }
42582    #[inline]
42583    pub fn parameters_add_info(
42584        mut self,
42585        parameters_add_info: &'a VideoEncodeH264SessionParametersAddInfoKHR<'a>,
42586    ) -> Self {
42587        self.p_parameters_add_info = parameters_add_info;
42588        self
42589    }
42590}
42591#[repr(C)]
42592#[cfg_attr(feature = "debug", derive(Debug))]
42593#[derive(Copy, Clone)]
42594#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264SessionParametersGetInfoKHR.html>"]
42595#[must_use]
42596pub struct VideoEncodeH264SessionParametersGetInfoKHR<'a> {
42597    pub s_type: StructureType,
42598    pub p_next: *const c_void,
42599    pub write_std_sps: Bool32,
42600    pub write_std_pps: Bool32,
42601    pub std_sps_id: u32,
42602    pub std_pps_id: u32,
42603    pub _marker: PhantomData<&'a ()>,
42604}
42605unsafe impl Send for VideoEncodeH264SessionParametersGetInfoKHR<'_> {}
42606unsafe impl Sync for VideoEncodeH264SessionParametersGetInfoKHR<'_> {}
42607impl ::core::default::Default for VideoEncodeH264SessionParametersGetInfoKHR<'_> {
42608    #[inline]
42609    fn default() -> Self {
42610        Self {
42611            s_type: Self::STRUCTURE_TYPE,
42612            p_next: ::core::ptr::null(),
42613            write_std_sps: Bool32::default(),
42614            write_std_pps: Bool32::default(),
42615            std_sps_id: u32::default(),
42616            std_pps_id: u32::default(),
42617            _marker: PhantomData,
42618        }
42619    }
42620}
42621unsafe impl<'a> TaggedStructure for VideoEncodeH264SessionParametersGetInfoKHR<'a> {
42622    const STRUCTURE_TYPE: StructureType =
42623        StructureType::VIDEO_ENCODE_H264_SESSION_PARAMETERS_GET_INFO_KHR;
42624}
42625unsafe impl ExtendsVideoEncodeSessionParametersGetInfoKHR
42626    for VideoEncodeH264SessionParametersGetInfoKHR<'_>
42627{
42628}
42629impl<'a> VideoEncodeH264SessionParametersGetInfoKHR<'a> {
42630    #[inline]
42631    pub fn write_std_sps(mut self, write_std_sps: bool) -> Self {
42632        self.write_std_sps = write_std_sps.into();
42633        self
42634    }
42635    #[inline]
42636    pub fn write_std_pps(mut self, write_std_pps: bool) -> Self {
42637        self.write_std_pps = write_std_pps.into();
42638        self
42639    }
42640    #[inline]
42641    pub fn std_sps_id(mut self, std_sps_id: u32) -> Self {
42642        self.std_sps_id = std_sps_id;
42643        self
42644    }
42645    #[inline]
42646    pub fn std_pps_id(mut self, std_pps_id: u32) -> Self {
42647        self.std_pps_id = std_pps_id;
42648        self
42649    }
42650}
42651#[repr(C)]
42652#[cfg_attr(feature = "debug", derive(Debug))]
42653#[derive(Copy, Clone)]
42654#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264SessionParametersFeedbackInfoKHR.html>"]
42655#[must_use]
42656pub struct VideoEncodeH264SessionParametersFeedbackInfoKHR<'a> {
42657    pub s_type: StructureType,
42658    pub p_next: *mut c_void,
42659    pub has_std_sps_overrides: Bool32,
42660    pub has_std_pps_overrides: Bool32,
42661    pub _marker: PhantomData<&'a ()>,
42662}
42663unsafe impl Send for VideoEncodeH264SessionParametersFeedbackInfoKHR<'_> {}
42664unsafe impl Sync for VideoEncodeH264SessionParametersFeedbackInfoKHR<'_> {}
42665impl ::core::default::Default for VideoEncodeH264SessionParametersFeedbackInfoKHR<'_> {
42666    #[inline]
42667    fn default() -> Self {
42668        Self {
42669            s_type: Self::STRUCTURE_TYPE,
42670            p_next: ::core::ptr::null_mut(),
42671            has_std_sps_overrides: Bool32::default(),
42672            has_std_pps_overrides: Bool32::default(),
42673            _marker: PhantomData,
42674        }
42675    }
42676}
42677unsafe impl<'a> TaggedStructure for VideoEncodeH264SessionParametersFeedbackInfoKHR<'a> {
42678    const STRUCTURE_TYPE: StructureType =
42679        StructureType::VIDEO_ENCODE_H264_SESSION_PARAMETERS_FEEDBACK_INFO_KHR;
42680}
42681unsafe impl ExtendsVideoEncodeSessionParametersFeedbackInfoKHR
42682    for VideoEncodeH264SessionParametersFeedbackInfoKHR<'_>
42683{
42684}
42685impl<'a> VideoEncodeH264SessionParametersFeedbackInfoKHR<'a> {
42686    #[inline]
42687    pub fn has_std_sps_overrides(mut self, has_std_sps_overrides: bool) -> Self {
42688        self.has_std_sps_overrides = has_std_sps_overrides.into();
42689        self
42690    }
42691    #[inline]
42692    pub fn has_std_pps_overrides(mut self, has_std_pps_overrides: bool) -> Self {
42693        self.has_std_pps_overrides = has_std_pps_overrides.into();
42694        self
42695    }
42696}
42697#[repr(C)]
42698#[cfg_attr(feature = "debug", derive(Debug))]
42699#[derive(Copy, Clone)]
42700#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264DpbSlotInfoKHR.html>"]
42701#[must_use]
42702pub struct VideoEncodeH264DpbSlotInfoKHR<'a> {
42703    pub s_type: StructureType,
42704    pub p_next: *const c_void,
42705    pub p_std_reference_info: *const StdVideoEncodeH264ReferenceInfo,
42706    pub _marker: PhantomData<&'a ()>,
42707}
42708unsafe impl Send for VideoEncodeH264DpbSlotInfoKHR<'_> {}
42709unsafe impl Sync for VideoEncodeH264DpbSlotInfoKHR<'_> {}
42710impl ::core::default::Default for VideoEncodeH264DpbSlotInfoKHR<'_> {
42711    #[inline]
42712    fn default() -> Self {
42713        Self {
42714            s_type: Self::STRUCTURE_TYPE,
42715            p_next: ::core::ptr::null(),
42716            p_std_reference_info: ::core::ptr::null(),
42717            _marker: PhantomData,
42718        }
42719    }
42720}
42721unsafe impl<'a> TaggedStructure for VideoEncodeH264DpbSlotInfoKHR<'a> {
42722    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR;
42723}
42724unsafe impl ExtendsVideoReferenceSlotInfoKHR for VideoEncodeH264DpbSlotInfoKHR<'_> {}
42725impl<'a> VideoEncodeH264DpbSlotInfoKHR<'a> {
42726    #[inline]
42727    pub fn std_reference_info(
42728        mut self,
42729        std_reference_info: &'a StdVideoEncodeH264ReferenceInfo,
42730    ) -> Self {
42731        self.p_std_reference_info = std_reference_info;
42732        self
42733    }
42734}
42735#[repr(C)]
42736#[cfg_attr(feature = "debug", derive(Debug))]
42737#[derive(Copy, Clone)]
42738#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264PictureInfoKHR.html>"]
42739#[must_use]
42740pub struct VideoEncodeH264PictureInfoKHR<'a> {
42741    pub s_type: StructureType,
42742    pub p_next: *const c_void,
42743    pub nalu_slice_entry_count: u32,
42744    pub p_nalu_slice_entries: *const VideoEncodeH264NaluSliceInfoKHR<'a>,
42745    pub p_std_picture_info: *const StdVideoEncodeH264PictureInfo,
42746    pub generate_prefix_nalu: Bool32,
42747    pub _marker: PhantomData<&'a ()>,
42748}
42749unsafe impl Send for VideoEncodeH264PictureInfoKHR<'_> {}
42750unsafe impl Sync for VideoEncodeH264PictureInfoKHR<'_> {}
42751impl ::core::default::Default for VideoEncodeH264PictureInfoKHR<'_> {
42752    #[inline]
42753    fn default() -> Self {
42754        Self {
42755            s_type: Self::STRUCTURE_TYPE,
42756            p_next: ::core::ptr::null(),
42757            nalu_slice_entry_count: u32::default(),
42758            p_nalu_slice_entries: ::core::ptr::null(),
42759            p_std_picture_info: ::core::ptr::null(),
42760            generate_prefix_nalu: Bool32::default(),
42761            _marker: PhantomData,
42762        }
42763    }
42764}
42765unsafe impl<'a> TaggedStructure for VideoEncodeH264PictureInfoKHR<'a> {
42766    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_PICTURE_INFO_KHR;
42767}
42768unsafe impl ExtendsVideoEncodeInfoKHR for VideoEncodeH264PictureInfoKHR<'_> {}
42769impl<'a> VideoEncodeH264PictureInfoKHR<'a> {
42770    #[inline]
42771    pub fn nalu_slice_entries(
42772        mut self,
42773        nalu_slice_entries: &'a [VideoEncodeH264NaluSliceInfoKHR<'a>],
42774    ) -> Self {
42775        self.nalu_slice_entry_count = nalu_slice_entries.len() as _;
42776        self.p_nalu_slice_entries = nalu_slice_entries.as_ptr();
42777        self
42778    }
42779    #[inline]
42780    pub fn std_picture_info(mut self, std_picture_info: &'a StdVideoEncodeH264PictureInfo) -> Self {
42781        self.p_std_picture_info = std_picture_info;
42782        self
42783    }
42784    #[inline]
42785    pub fn generate_prefix_nalu(mut self, generate_prefix_nalu: bool) -> Self {
42786        self.generate_prefix_nalu = generate_prefix_nalu.into();
42787        self
42788    }
42789}
42790#[repr(C)]
42791#[cfg_attr(feature = "debug", derive(Debug))]
42792#[derive(Copy, Clone)]
42793#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264ProfileInfoKHR.html>"]
42794#[must_use]
42795pub struct VideoEncodeH264ProfileInfoKHR<'a> {
42796    pub s_type: StructureType,
42797    pub p_next: *const c_void,
42798    pub std_profile_idc: StdVideoH264ProfileIdc,
42799    pub _marker: PhantomData<&'a ()>,
42800}
42801unsafe impl Send for VideoEncodeH264ProfileInfoKHR<'_> {}
42802unsafe impl Sync for VideoEncodeH264ProfileInfoKHR<'_> {}
42803impl ::core::default::Default for VideoEncodeH264ProfileInfoKHR<'_> {
42804    #[inline]
42805    fn default() -> Self {
42806        Self {
42807            s_type: Self::STRUCTURE_TYPE,
42808            p_next: ::core::ptr::null(),
42809            std_profile_idc: StdVideoH264ProfileIdc::default(),
42810            _marker: PhantomData,
42811        }
42812    }
42813}
42814unsafe impl<'a> TaggedStructure for VideoEncodeH264ProfileInfoKHR<'a> {
42815    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_PROFILE_INFO_KHR;
42816}
42817unsafe impl ExtendsVideoProfileInfoKHR for VideoEncodeH264ProfileInfoKHR<'_> {}
42818unsafe impl ExtendsQueryPoolCreateInfo for VideoEncodeH264ProfileInfoKHR<'_> {}
42819impl<'a> VideoEncodeH264ProfileInfoKHR<'a> {
42820    #[inline]
42821    pub fn std_profile_idc(mut self, std_profile_idc: StdVideoH264ProfileIdc) -> Self {
42822        self.std_profile_idc = std_profile_idc;
42823        self
42824    }
42825}
42826#[repr(C)]
42827#[cfg_attr(feature = "debug", derive(Debug))]
42828#[derive(Copy, Clone)]
42829#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264NaluSliceInfoKHR.html>"]
42830#[must_use]
42831pub struct VideoEncodeH264NaluSliceInfoKHR<'a> {
42832    pub s_type: StructureType,
42833    pub p_next: *const c_void,
42834    pub constant_qp: i32,
42835    pub p_std_slice_header: *const StdVideoEncodeH264SliceHeader,
42836    pub _marker: PhantomData<&'a ()>,
42837}
42838unsafe impl Send for VideoEncodeH264NaluSliceInfoKHR<'_> {}
42839unsafe impl Sync for VideoEncodeH264NaluSliceInfoKHR<'_> {}
42840impl ::core::default::Default for VideoEncodeH264NaluSliceInfoKHR<'_> {
42841    #[inline]
42842    fn default() -> Self {
42843        Self {
42844            s_type: Self::STRUCTURE_TYPE,
42845            p_next: ::core::ptr::null(),
42846            constant_qp: i32::default(),
42847            p_std_slice_header: ::core::ptr::null(),
42848            _marker: PhantomData,
42849        }
42850    }
42851}
42852unsafe impl<'a> TaggedStructure for VideoEncodeH264NaluSliceInfoKHR<'a> {
42853    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_NALU_SLICE_INFO_KHR;
42854}
42855impl<'a> VideoEncodeH264NaluSliceInfoKHR<'a> {
42856    #[inline]
42857    pub fn constant_qp(mut self, constant_qp: i32) -> Self {
42858        self.constant_qp = constant_qp;
42859        self
42860    }
42861    #[inline]
42862    pub fn std_slice_header(mut self, std_slice_header: &'a StdVideoEncodeH264SliceHeader) -> Self {
42863        self.p_std_slice_header = std_slice_header;
42864        self
42865    }
42866}
42867#[repr(C)]
42868#[cfg_attr(feature = "debug", derive(Debug))]
42869#[derive(Copy, Clone)]
42870#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264RateControlInfoKHR.html>"]
42871#[must_use]
42872pub struct VideoEncodeH264RateControlInfoKHR<'a> {
42873    pub s_type: StructureType,
42874    pub p_next: *const c_void,
42875    pub flags: VideoEncodeH264RateControlFlagsKHR,
42876    pub gop_frame_count: u32,
42877    pub idr_period: u32,
42878    pub consecutive_b_frame_count: u32,
42879    pub temporal_layer_count: u32,
42880    pub _marker: PhantomData<&'a ()>,
42881}
42882unsafe impl Send for VideoEncodeH264RateControlInfoKHR<'_> {}
42883unsafe impl Sync for VideoEncodeH264RateControlInfoKHR<'_> {}
42884impl ::core::default::Default for VideoEncodeH264RateControlInfoKHR<'_> {
42885    #[inline]
42886    fn default() -> Self {
42887        Self {
42888            s_type: Self::STRUCTURE_TYPE,
42889            p_next: ::core::ptr::null(),
42890            flags: VideoEncodeH264RateControlFlagsKHR::default(),
42891            gop_frame_count: u32::default(),
42892            idr_period: u32::default(),
42893            consecutive_b_frame_count: u32::default(),
42894            temporal_layer_count: u32::default(),
42895            _marker: PhantomData,
42896        }
42897    }
42898}
42899unsafe impl<'a> TaggedStructure for VideoEncodeH264RateControlInfoKHR<'a> {
42900    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H264_RATE_CONTROL_INFO_KHR;
42901}
42902unsafe impl ExtendsVideoCodingControlInfoKHR for VideoEncodeH264RateControlInfoKHR<'_> {}
42903unsafe impl ExtendsVideoBeginCodingInfoKHR for VideoEncodeH264RateControlInfoKHR<'_> {}
42904impl<'a> VideoEncodeH264RateControlInfoKHR<'a> {
42905    #[inline]
42906    pub fn flags(mut self, flags: VideoEncodeH264RateControlFlagsKHR) -> Self {
42907        self.flags = flags;
42908        self
42909    }
42910    #[inline]
42911    pub fn gop_frame_count(mut self, gop_frame_count: u32) -> Self {
42912        self.gop_frame_count = gop_frame_count;
42913        self
42914    }
42915    #[inline]
42916    pub fn idr_period(mut self, idr_period: u32) -> Self {
42917        self.idr_period = idr_period;
42918        self
42919    }
42920    #[inline]
42921    pub fn consecutive_b_frame_count(mut self, consecutive_b_frame_count: u32) -> Self {
42922        self.consecutive_b_frame_count = consecutive_b_frame_count;
42923        self
42924    }
42925    #[inline]
42926    pub fn temporal_layer_count(mut self, temporal_layer_count: u32) -> Self {
42927        self.temporal_layer_count = temporal_layer_count;
42928        self
42929    }
42930}
42931#[repr(C)]
42932#[cfg_attr(feature = "debug", derive(Debug))]
42933#[derive(Copy, Clone, Default)]
42934#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264QpKHR.html>"]
42935#[must_use]
42936pub struct VideoEncodeH264QpKHR {
42937    pub qp_i: i32,
42938    pub qp_p: i32,
42939    pub qp_b: i32,
42940}
42941impl VideoEncodeH264QpKHR {
42942    #[inline]
42943    pub fn qp_i(mut self, qp_i: i32) -> Self {
42944        self.qp_i = qp_i;
42945        self
42946    }
42947    #[inline]
42948    pub fn qp_p(mut self, qp_p: i32) -> Self {
42949        self.qp_p = qp_p;
42950        self
42951    }
42952    #[inline]
42953    pub fn qp_b(mut self, qp_b: i32) -> Self {
42954        self.qp_b = qp_b;
42955        self
42956    }
42957}
42958#[repr(C)]
42959#[cfg_attr(feature = "debug", derive(Debug))]
42960#[derive(Copy, Clone, Default)]
42961#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264FrameSizeKHR.html>"]
42962#[must_use]
42963pub struct VideoEncodeH264FrameSizeKHR {
42964    pub frame_i_size: u32,
42965    pub frame_p_size: u32,
42966    pub frame_b_size: u32,
42967}
42968impl VideoEncodeH264FrameSizeKHR {
42969    #[inline]
42970    pub fn frame_i_size(mut self, frame_i_size: u32) -> Self {
42971        self.frame_i_size = frame_i_size;
42972        self
42973    }
42974    #[inline]
42975    pub fn frame_p_size(mut self, frame_p_size: u32) -> Self {
42976        self.frame_p_size = frame_p_size;
42977        self
42978    }
42979    #[inline]
42980    pub fn frame_b_size(mut self, frame_b_size: u32) -> Self {
42981        self.frame_b_size = frame_b_size;
42982        self
42983    }
42984}
42985#[repr(C)]
42986#[cfg_attr(feature = "debug", derive(Debug))]
42987#[derive(Copy, Clone)]
42988#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264GopRemainingFrameInfoKHR.html>"]
42989#[must_use]
42990pub struct VideoEncodeH264GopRemainingFrameInfoKHR<'a> {
42991    pub s_type: StructureType,
42992    pub p_next: *const c_void,
42993    pub use_gop_remaining_frames: Bool32,
42994    pub gop_remaining_i: u32,
42995    pub gop_remaining_p: u32,
42996    pub gop_remaining_b: u32,
42997    pub _marker: PhantomData<&'a ()>,
42998}
42999unsafe impl Send for VideoEncodeH264GopRemainingFrameInfoKHR<'_> {}
43000unsafe impl Sync for VideoEncodeH264GopRemainingFrameInfoKHR<'_> {}
43001impl ::core::default::Default for VideoEncodeH264GopRemainingFrameInfoKHR<'_> {
43002    #[inline]
43003    fn default() -> Self {
43004        Self {
43005            s_type: Self::STRUCTURE_TYPE,
43006            p_next: ::core::ptr::null(),
43007            use_gop_remaining_frames: Bool32::default(),
43008            gop_remaining_i: u32::default(),
43009            gop_remaining_p: u32::default(),
43010            gop_remaining_b: u32::default(),
43011            _marker: PhantomData,
43012        }
43013    }
43014}
43015unsafe impl<'a> TaggedStructure for VideoEncodeH264GopRemainingFrameInfoKHR<'a> {
43016    const STRUCTURE_TYPE: StructureType =
43017        StructureType::VIDEO_ENCODE_H264_GOP_REMAINING_FRAME_INFO_KHR;
43018}
43019unsafe impl ExtendsVideoBeginCodingInfoKHR for VideoEncodeH264GopRemainingFrameInfoKHR<'_> {}
43020impl<'a> VideoEncodeH264GopRemainingFrameInfoKHR<'a> {
43021    #[inline]
43022    pub fn use_gop_remaining_frames(mut self, use_gop_remaining_frames: bool) -> Self {
43023        self.use_gop_remaining_frames = use_gop_remaining_frames.into();
43024        self
43025    }
43026    #[inline]
43027    pub fn gop_remaining_i(mut self, gop_remaining_i: u32) -> Self {
43028        self.gop_remaining_i = gop_remaining_i;
43029        self
43030    }
43031    #[inline]
43032    pub fn gop_remaining_p(mut self, gop_remaining_p: u32) -> Self {
43033        self.gop_remaining_p = gop_remaining_p;
43034        self
43035    }
43036    #[inline]
43037    pub fn gop_remaining_b(mut self, gop_remaining_b: u32) -> Self {
43038        self.gop_remaining_b = gop_remaining_b;
43039        self
43040    }
43041}
43042#[repr(C)]
43043#[cfg_attr(feature = "debug", derive(Debug))]
43044#[derive(Copy, Clone)]
43045#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH264RateControlLayerInfoKHR.html>"]
43046#[must_use]
43047pub struct VideoEncodeH264RateControlLayerInfoKHR<'a> {
43048    pub s_type: StructureType,
43049    pub p_next: *const c_void,
43050    pub use_min_qp: Bool32,
43051    pub min_qp: VideoEncodeH264QpKHR,
43052    pub use_max_qp: Bool32,
43053    pub max_qp: VideoEncodeH264QpKHR,
43054    pub use_max_frame_size: Bool32,
43055    pub max_frame_size: VideoEncodeH264FrameSizeKHR,
43056    pub _marker: PhantomData<&'a ()>,
43057}
43058unsafe impl Send for VideoEncodeH264RateControlLayerInfoKHR<'_> {}
43059unsafe impl Sync for VideoEncodeH264RateControlLayerInfoKHR<'_> {}
43060impl ::core::default::Default for VideoEncodeH264RateControlLayerInfoKHR<'_> {
43061    #[inline]
43062    fn default() -> Self {
43063        Self {
43064            s_type: Self::STRUCTURE_TYPE,
43065            p_next: ::core::ptr::null(),
43066            use_min_qp: Bool32::default(),
43067            min_qp: VideoEncodeH264QpKHR::default(),
43068            use_max_qp: Bool32::default(),
43069            max_qp: VideoEncodeH264QpKHR::default(),
43070            use_max_frame_size: Bool32::default(),
43071            max_frame_size: VideoEncodeH264FrameSizeKHR::default(),
43072            _marker: PhantomData,
43073        }
43074    }
43075}
43076unsafe impl<'a> TaggedStructure for VideoEncodeH264RateControlLayerInfoKHR<'a> {
43077    const STRUCTURE_TYPE: StructureType =
43078        StructureType::VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_KHR;
43079}
43080unsafe impl ExtendsVideoEncodeRateControlLayerInfoKHR
43081    for VideoEncodeH264RateControlLayerInfoKHR<'_>
43082{
43083}
43084impl<'a> VideoEncodeH264RateControlLayerInfoKHR<'a> {
43085    #[inline]
43086    pub fn use_min_qp(mut self, use_min_qp: bool) -> Self {
43087        self.use_min_qp = use_min_qp.into();
43088        self
43089    }
43090    #[inline]
43091    pub fn min_qp(mut self, min_qp: VideoEncodeH264QpKHR) -> Self {
43092        self.min_qp = min_qp;
43093        self
43094    }
43095    #[inline]
43096    pub fn use_max_qp(mut self, use_max_qp: bool) -> Self {
43097        self.use_max_qp = use_max_qp.into();
43098        self
43099    }
43100    #[inline]
43101    pub fn max_qp(mut self, max_qp: VideoEncodeH264QpKHR) -> Self {
43102        self.max_qp = max_qp;
43103        self
43104    }
43105    #[inline]
43106    pub fn use_max_frame_size(mut self, use_max_frame_size: bool) -> Self {
43107        self.use_max_frame_size = use_max_frame_size.into();
43108        self
43109    }
43110    #[inline]
43111    pub fn max_frame_size(mut self, max_frame_size: VideoEncodeH264FrameSizeKHR) -> Self {
43112        self.max_frame_size = max_frame_size;
43113        self
43114    }
43115}
43116#[repr(C)]
43117#[cfg_attr(feature = "debug", derive(Debug))]
43118#[derive(Copy, Clone)]
43119#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265CapabilitiesKHR.html>"]
43120#[must_use]
43121pub struct VideoEncodeH265CapabilitiesKHR<'a> {
43122    pub s_type: StructureType,
43123    pub p_next: *mut c_void,
43124    pub flags: VideoEncodeH265CapabilityFlagsKHR,
43125    pub max_level_idc: StdVideoH265LevelIdc,
43126    pub max_slice_segment_count: u32,
43127    pub max_tiles: Extent2D,
43128    pub ctb_sizes: VideoEncodeH265CtbSizeFlagsKHR,
43129    pub transform_block_sizes: VideoEncodeH265TransformBlockSizeFlagsKHR,
43130    pub max_p_picture_l0_reference_count: u32,
43131    pub max_b_picture_l0_reference_count: u32,
43132    pub max_l1_reference_count: u32,
43133    pub max_sub_layer_count: u32,
43134    pub expect_dyadic_temporal_sub_layer_pattern: Bool32,
43135    pub min_qp: i32,
43136    pub max_qp: i32,
43137    pub prefers_gop_remaining_frames: Bool32,
43138    pub requires_gop_remaining_frames: Bool32,
43139    pub std_syntax_flags: VideoEncodeH265StdFlagsKHR,
43140    pub _marker: PhantomData<&'a ()>,
43141}
43142unsafe impl Send for VideoEncodeH265CapabilitiesKHR<'_> {}
43143unsafe impl Sync for VideoEncodeH265CapabilitiesKHR<'_> {}
43144impl ::core::default::Default for VideoEncodeH265CapabilitiesKHR<'_> {
43145    #[inline]
43146    fn default() -> Self {
43147        Self {
43148            s_type: Self::STRUCTURE_TYPE,
43149            p_next: ::core::ptr::null_mut(),
43150            flags: VideoEncodeH265CapabilityFlagsKHR::default(),
43151            max_level_idc: StdVideoH265LevelIdc::default(),
43152            max_slice_segment_count: u32::default(),
43153            max_tiles: Extent2D::default(),
43154            ctb_sizes: VideoEncodeH265CtbSizeFlagsKHR::default(),
43155            transform_block_sizes: VideoEncodeH265TransformBlockSizeFlagsKHR::default(),
43156            max_p_picture_l0_reference_count: u32::default(),
43157            max_b_picture_l0_reference_count: u32::default(),
43158            max_l1_reference_count: u32::default(),
43159            max_sub_layer_count: u32::default(),
43160            expect_dyadic_temporal_sub_layer_pattern: Bool32::default(),
43161            min_qp: i32::default(),
43162            max_qp: i32::default(),
43163            prefers_gop_remaining_frames: Bool32::default(),
43164            requires_gop_remaining_frames: Bool32::default(),
43165            std_syntax_flags: VideoEncodeH265StdFlagsKHR::default(),
43166            _marker: PhantomData,
43167        }
43168    }
43169}
43170unsafe impl<'a> TaggedStructure for VideoEncodeH265CapabilitiesKHR<'a> {
43171    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_CAPABILITIES_KHR;
43172}
43173unsafe impl ExtendsVideoCapabilitiesKHR for VideoEncodeH265CapabilitiesKHR<'_> {}
43174impl<'a> VideoEncodeH265CapabilitiesKHR<'a> {
43175    #[inline]
43176    pub fn flags(mut self, flags: VideoEncodeH265CapabilityFlagsKHR) -> Self {
43177        self.flags = flags;
43178        self
43179    }
43180    #[inline]
43181    pub fn max_level_idc(mut self, max_level_idc: StdVideoH265LevelIdc) -> Self {
43182        self.max_level_idc = max_level_idc;
43183        self
43184    }
43185    #[inline]
43186    pub fn max_slice_segment_count(mut self, max_slice_segment_count: u32) -> Self {
43187        self.max_slice_segment_count = max_slice_segment_count;
43188        self
43189    }
43190    #[inline]
43191    pub fn max_tiles(mut self, max_tiles: Extent2D) -> Self {
43192        self.max_tiles = max_tiles;
43193        self
43194    }
43195    #[inline]
43196    pub fn ctb_sizes(mut self, ctb_sizes: VideoEncodeH265CtbSizeFlagsKHR) -> Self {
43197        self.ctb_sizes = ctb_sizes;
43198        self
43199    }
43200    #[inline]
43201    pub fn transform_block_sizes(
43202        mut self,
43203        transform_block_sizes: VideoEncodeH265TransformBlockSizeFlagsKHR,
43204    ) -> Self {
43205        self.transform_block_sizes = transform_block_sizes;
43206        self
43207    }
43208    #[inline]
43209    pub fn max_p_picture_l0_reference_count(
43210        mut self,
43211        max_p_picture_l0_reference_count: u32,
43212    ) -> Self {
43213        self.max_p_picture_l0_reference_count = max_p_picture_l0_reference_count;
43214        self
43215    }
43216    #[inline]
43217    pub fn max_b_picture_l0_reference_count(
43218        mut self,
43219        max_b_picture_l0_reference_count: u32,
43220    ) -> Self {
43221        self.max_b_picture_l0_reference_count = max_b_picture_l0_reference_count;
43222        self
43223    }
43224    #[inline]
43225    pub fn max_l1_reference_count(mut self, max_l1_reference_count: u32) -> Self {
43226        self.max_l1_reference_count = max_l1_reference_count;
43227        self
43228    }
43229    #[inline]
43230    pub fn max_sub_layer_count(mut self, max_sub_layer_count: u32) -> Self {
43231        self.max_sub_layer_count = max_sub_layer_count;
43232        self
43233    }
43234    #[inline]
43235    pub fn expect_dyadic_temporal_sub_layer_pattern(
43236        mut self,
43237        expect_dyadic_temporal_sub_layer_pattern: bool,
43238    ) -> Self {
43239        self.expect_dyadic_temporal_sub_layer_pattern =
43240            expect_dyadic_temporal_sub_layer_pattern.into();
43241        self
43242    }
43243    #[inline]
43244    pub fn min_qp(mut self, min_qp: i32) -> Self {
43245        self.min_qp = min_qp;
43246        self
43247    }
43248    #[inline]
43249    pub fn max_qp(mut self, max_qp: i32) -> Self {
43250        self.max_qp = max_qp;
43251        self
43252    }
43253    #[inline]
43254    pub fn prefers_gop_remaining_frames(mut self, prefers_gop_remaining_frames: bool) -> Self {
43255        self.prefers_gop_remaining_frames = prefers_gop_remaining_frames.into();
43256        self
43257    }
43258    #[inline]
43259    pub fn requires_gop_remaining_frames(mut self, requires_gop_remaining_frames: bool) -> Self {
43260        self.requires_gop_remaining_frames = requires_gop_remaining_frames.into();
43261        self
43262    }
43263    #[inline]
43264    pub fn std_syntax_flags(mut self, std_syntax_flags: VideoEncodeH265StdFlagsKHR) -> Self {
43265        self.std_syntax_flags = std_syntax_flags;
43266        self
43267    }
43268}
43269#[repr(C)]
43270#[cfg_attr(feature = "debug", derive(Debug))]
43271#[derive(Copy, Clone)]
43272#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265QualityLevelPropertiesKHR.html>"]
43273#[must_use]
43274pub struct VideoEncodeH265QualityLevelPropertiesKHR<'a> {
43275    pub s_type: StructureType,
43276    pub p_next: *mut c_void,
43277    pub preferred_rate_control_flags: VideoEncodeH265RateControlFlagsKHR,
43278    pub preferred_gop_frame_count: u32,
43279    pub preferred_idr_period: u32,
43280    pub preferred_consecutive_b_frame_count: u32,
43281    pub preferred_sub_layer_count: u32,
43282    pub preferred_constant_qp: VideoEncodeH265QpKHR,
43283    pub preferred_max_l0_reference_count: u32,
43284    pub preferred_max_l1_reference_count: u32,
43285    pub _marker: PhantomData<&'a ()>,
43286}
43287unsafe impl Send for VideoEncodeH265QualityLevelPropertiesKHR<'_> {}
43288unsafe impl Sync for VideoEncodeH265QualityLevelPropertiesKHR<'_> {}
43289impl ::core::default::Default for VideoEncodeH265QualityLevelPropertiesKHR<'_> {
43290    #[inline]
43291    fn default() -> Self {
43292        Self {
43293            s_type: Self::STRUCTURE_TYPE,
43294            p_next: ::core::ptr::null_mut(),
43295            preferred_rate_control_flags: VideoEncodeH265RateControlFlagsKHR::default(),
43296            preferred_gop_frame_count: u32::default(),
43297            preferred_idr_period: u32::default(),
43298            preferred_consecutive_b_frame_count: u32::default(),
43299            preferred_sub_layer_count: u32::default(),
43300            preferred_constant_qp: VideoEncodeH265QpKHR::default(),
43301            preferred_max_l0_reference_count: u32::default(),
43302            preferred_max_l1_reference_count: u32::default(),
43303            _marker: PhantomData,
43304        }
43305    }
43306}
43307unsafe impl<'a> TaggedStructure for VideoEncodeH265QualityLevelPropertiesKHR<'a> {
43308    const STRUCTURE_TYPE: StructureType =
43309        StructureType::VIDEO_ENCODE_H265_QUALITY_LEVEL_PROPERTIES_KHR;
43310}
43311unsafe impl ExtendsVideoEncodeQualityLevelPropertiesKHR
43312    for VideoEncodeH265QualityLevelPropertiesKHR<'_>
43313{
43314}
43315impl<'a> VideoEncodeH265QualityLevelPropertiesKHR<'a> {
43316    #[inline]
43317    pub fn preferred_rate_control_flags(
43318        mut self,
43319        preferred_rate_control_flags: VideoEncodeH265RateControlFlagsKHR,
43320    ) -> Self {
43321        self.preferred_rate_control_flags = preferred_rate_control_flags;
43322        self
43323    }
43324    #[inline]
43325    pub fn preferred_gop_frame_count(mut self, preferred_gop_frame_count: u32) -> Self {
43326        self.preferred_gop_frame_count = preferred_gop_frame_count;
43327        self
43328    }
43329    #[inline]
43330    pub fn preferred_idr_period(mut self, preferred_idr_period: u32) -> Self {
43331        self.preferred_idr_period = preferred_idr_period;
43332        self
43333    }
43334    #[inline]
43335    pub fn preferred_consecutive_b_frame_count(
43336        mut self,
43337        preferred_consecutive_b_frame_count: u32,
43338    ) -> Self {
43339        self.preferred_consecutive_b_frame_count = preferred_consecutive_b_frame_count;
43340        self
43341    }
43342    #[inline]
43343    pub fn preferred_sub_layer_count(mut self, preferred_sub_layer_count: u32) -> Self {
43344        self.preferred_sub_layer_count = preferred_sub_layer_count;
43345        self
43346    }
43347    #[inline]
43348    pub fn preferred_constant_qp(mut self, preferred_constant_qp: VideoEncodeH265QpKHR) -> Self {
43349        self.preferred_constant_qp = preferred_constant_qp;
43350        self
43351    }
43352    #[inline]
43353    pub fn preferred_max_l0_reference_count(
43354        mut self,
43355        preferred_max_l0_reference_count: u32,
43356    ) -> Self {
43357        self.preferred_max_l0_reference_count = preferred_max_l0_reference_count;
43358        self
43359    }
43360    #[inline]
43361    pub fn preferred_max_l1_reference_count(
43362        mut self,
43363        preferred_max_l1_reference_count: u32,
43364    ) -> Self {
43365        self.preferred_max_l1_reference_count = preferred_max_l1_reference_count;
43366        self
43367    }
43368}
43369#[repr(C)]
43370#[cfg_attr(feature = "debug", derive(Debug))]
43371#[derive(Copy, Clone)]
43372#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265SessionCreateInfoKHR.html>"]
43373#[must_use]
43374pub struct VideoEncodeH265SessionCreateInfoKHR<'a> {
43375    pub s_type: StructureType,
43376    pub p_next: *const c_void,
43377    pub use_max_level_idc: Bool32,
43378    pub max_level_idc: StdVideoH265LevelIdc,
43379    pub _marker: PhantomData<&'a ()>,
43380}
43381unsafe impl Send for VideoEncodeH265SessionCreateInfoKHR<'_> {}
43382unsafe impl Sync for VideoEncodeH265SessionCreateInfoKHR<'_> {}
43383impl ::core::default::Default for VideoEncodeH265SessionCreateInfoKHR<'_> {
43384    #[inline]
43385    fn default() -> Self {
43386        Self {
43387            s_type: Self::STRUCTURE_TYPE,
43388            p_next: ::core::ptr::null(),
43389            use_max_level_idc: Bool32::default(),
43390            max_level_idc: StdVideoH265LevelIdc::default(),
43391            _marker: PhantomData,
43392        }
43393    }
43394}
43395unsafe impl<'a> TaggedStructure for VideoEncodeH265SessionCreateInfoKHR<'a> {
43396    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_SESSION_CREATE_INFO_KHR;
43397}
43398unsafe impl ExtendsVideoSessionCreateInfoKHR for VideoEncodeH265SessionCreateInfoKHR<'_> {}
43399impl<'a> VideoEncodeH265SessionCreateInfoKHR<'a> {
43400    #[inline]
43401    pub fn use_max_level_idc(mut self, use_max_level_idc: bool) -> Self {
43402        self.use_max_level_idc = use_max_level_idc.into();
43403        self
43404    }
43405    #[inline]
43406    pub fn max_level_idc(mut self, max_level_idc: StdVideoH265LevelIdc) -> Self {
43407        self.max_level_idc = max_level_idc;
43408        self
43409    }
43410}
43411#[repr(C)]
43412#[cfg_attr(feature = "debug", derive(Debug))]
43413#[derive(Copy, Clone)]
43414#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265SessionParametersAddInfoKHR.html>"]
43415#[must_use]
43416pub struct VideoEncodeH265SessionParametersAddInfoKHR<'a> {
43417    pub s_type: StructureType,
43418    pub p_next: *const c_void,
43419    pub std_vps_count: u32,
43420    pub p_std_vp_ss: *const StdVideoH265VideoParameterSet,
43421    pub std_sps_count: u32,
43422    pub p_std_sp_ss: *const StdVideoH265SequenceParameterSet,
43423    pub std_pps_count: u32,
43424    pub p_std_pp_ss: *const StdVideoH265PictureParameterSet,
43425    pub _marker: PhantomData<&'a ()>,
43426}
43427unsafe impl Send for VideoEncodeH265SessionParametersAddInfoKHR<'_> {}
43428unsafe impl Sync for VideoEncodeH265SessionParametersAddInfoKHR<'_> {}
43429impl ::core::default::Default for VideoEncodeH265SessionParametersAddInfoKHR<'_> {
43430    #[inline]
43431    fn default() -> Self {
43432        Self {
43433            s_type: Self::STRUCTURE_TYPE,
43434            p_next: ::core::ptr::null(),
43435            std_vps_count: u32::default(),
43436            p_std_vp_ss: ::core::ptr::null(),
43437            std_sps_count: u32::default(),
43438            p_std_sp_ss: ::core::ptr::null(),
43439            std_pps_count: u32::default(),
43440            p_std_pp_ss: ::core::ptr::null(),
43441            _marker: PhantomData,
43442        }
43443    }
43444}
43445unsafe impl<'a> TaggedStructure for VideoEncodeH265SessionParametersAddInfoKHR<'a> {
43446    const STRUCTURE_TYPE: StructureType =
43447        StructureType::VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_KHR;
43448}
43449unsafe impl ExtendsVideoSessionParametersUpdateInfoKHR
43450    for VideoEncodeH265SessionParametersAddInfoKHR<'_>
43451{
43452}
43453impl<'a> VideoEncodeH265SessionParametersAddInfoKHR<'a> {
43454    #[inline]
43455    pub fn std_vp_ss(mut self, std_vp_ss: &'a [StdVideoH265VideoParameterSet]) -> Self {
43456        self.std_vps_count = std_vp_ss.len() as _;
43457        self.p_std_vp_ss = std_vp_ss.as_ptr();
43458        self
43459    }
43460    #[inline]
43461    pub fn std_sp_ss(mut self, std_sp_ss: &'a [StdVideoH265SequenceParameterSet]) -> Self {
43462        self.std_sps_count = std_sp_ss.len() as _;
43463        self.p_std_sp_ss = std_sp_ss.as_ptr();
43464        self
43465    }
43466    #[inline]
43467    pub fn std_pp_ss(mut self, std_pp_ss: &'a [StdVideoH265PictureParameterSet]) -> Self {
43468        self.std_pps_count = std_pp_ss.len() as _;
43469        self.p_std_pp_ss = std_pp_ss.as_ptr();
43470        self
43471    }
43472}
43473#[repr(C)]
43474#[cfg_attr(feature = "debug", derive(Debug))]
43475#[derive(Copy, Clone)]
43476#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265SessionParametersCreateInfoKHR.html>"]
43477#[must_use]
43478pub struct VideoEncodeH265SessionParametersCreateInfoKHR<'a> {
43479    pub s_type: StructureType,
43480    pub p_next: *const c_void,
43481    pub max_std_vps_count: u32,
43482    pub max_std_sps_count: u32,
43483    pub max_std_pps_count: u32,
43484    pub p_parameters_add_info: *const VideoEncodeH265SessionParametersAddInfoKHR<'a>,
43485    pub _marker: PhantomData<&'a ()>,
43486}
43487unsafe impl Send for VideoEncodeH265SessionParametersCreateInfoKHR<'_> {}
43488unsafe impl Sync for VideoEncodeH265SessionParametersCreateInfoKHR<'_> {}
43489impl ::core::default::Default for VideoEncodeH265SessionParametersCreateInfoKHR<'_> {
43490    #[inline]
43491    fn default() -> Self {
43492        Self {
43493            s_type: Self::STRUCTURE_TYPE,
43494            p_next: ::core::ptr::null(),
43495            max_std_vps_count: u32::default(),
43496            max_std_sps_count: u32::default(),
43497            max_std_pps_count: u32::default(),
43498            p_parameters_add_info: ::core::ptr::null(),
43499            _marker: PhantomData,
43500        }
43501    }
43502}
43503unsafe impl<'a> TaggedStructure for VideoEncodeH265SessionParametersCreateInfoKHR<'a> {
43504    const STRUCTURE_TYPE: StructureType =
43505        StructureType::VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_KHR;
43506}
43507unsafe impl ExtendsVideoSessionParametersCreateInfoKHR
43508    for VideoEncodeH265SessionParametersCreateInfoKHR<'_>
43509{
43510}
43511impl<'a> VideoEncodeH265SessionParametersCreateInfoKHR<'a> {
43512    #[inline]
43513    pub fn max_std_vps_count(mut self, max_std_vps_count: u32) -> Self {
43514        self.max_std_vps_count = max_std_vps_count;
43515        self
43516    }
43517    #[inline]
43518    pub fn max_std_sps_count(mut self, max_std_sps_count: u32) -> Self {
43519        self.max_std_sps_count = max_std_sps_count;
43520        self
43521    }
43522    #[inline]
43523    pub fn max_std_pps_count(mut self, max_std_pps_count: u32) -> Self {
43524        self.max_std_pps_count = max_std_pps_count;
43525        self
43526    }
43527    #[inline]
43528    pub fn parameters_add_info(
43529        mut self,
43530        parameters_add_info: &'a VideoEncodeH265SessionParametersAddInfoKHR<'a>,
43531    ) -> Self {
43532        self.p_parameters_add_info = parameters_add_info;
43533        self
43534    }
43535}
43536#[repr(C)]
43537#[cfg_attr(feature = "debug", derive(Debug))]
43538#[derive(Copy, Clone)]
43539#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265SessionParametersGetInfoKHR.html>"]
43540#[must_use]
43541pub struct VideoEncodeH265SessionParametersGetInfoKHR<'a> {
43542    pub s_type: StructureType,
43543    pub p_next: *const c_void,
43544    pub write_std_vps: Bool32,
43545    pub write_std_sps: Bool32,
43546    pub write_std_pps: Bool32,
43547    pub std_vps_id: u32,
43548    pub std_sps_id: u32,
43549    pub std_pps_id: u32,
43550    pub _marker: PhantomData<&'a ()>,
43551}
43552unsafe impl Send for VideoEncodeH265SessionParametersGetInfoKHR<'_> {}
43553unsafe impl Sync for VideoEncodeH265SessionParametersGetInfoKHR<'_> {}
43554impl ::core::default::Default for VideoEncodeH265SessionParametersGetInfoKHR<'_> {
43555    #[inline]
43556    fn default() -> Self {
43557        Self {
43558            s_type: Self::STRUCTURE_TYPE,
43559            p_next: ::core::ptr::null(),
43560            write_std_vps: Bool32::default(),
43561            write_std_sps: Bool32::default(),
43562            write_std_pps: Bool32::default(),
43563            std_vps_id: u32::default(),
43564            std_sps_id: u32::default(),
43565            std_pps_id: u32::default(),
43566            _marker: PhantomData,
43567        }
43568    }
43569}
43570unsafe impl<'a> TaggedStructure for VideoEncodeH265SessionParametersGetInfoKHR<'a> {
43571    const STRUCTURE_TYPE: StructureType =
43572        StructureType::VIDEO_ENCODE_H265_SESSION_PARAMETERS_GET_INFO_KHR;
43573}
43574unsafe impl ExtendsVideoEncodeSessionParametersGetInfoKHR
43575    for VideoEncodeH265SessionParametersGetInfoKHR<'_>
43576{
43577}
43578impl<'a> VideoEncodeH265SessionParametersGetInfoKHR<'a> {
43579    #[inline]
43580    pub fn write_std_vps(mut self, write_std_vps: bool) -> Self {
43581        self.write_std_vps = write_std_vps.into();
43582        self
43583    }
43584    #[inline]
43585    pub fn write_std_sps(mut self, write_std_sps: bool) -> Self {
43586        self.write_std_sps = write_std_sps.into();
43587        self
43588    }
43589    #[inline]
43590    pub fn write_std_pps(mut self, write_std_pps: bool) -> Self {
43591        self.write_std_pps = write_std_pps.into();
43592        self
43593    }
43594    #[inline]
43595    pub fn std_vps_id(mut self, std_vps_id: u32) -> Self {
43596        self.std_vps_id = std_vps_id;
43597        self
43598    }
43599    #[inline]
43600    pub fn std_sps_id(mut self, std_sps_id: u32) -> Self {
43601        self.std_sps_id = std_sps_id;
43602        self
43603    }
43604    #[inline]
43605    pub fn std_pps_id(mut self, std_pps_id: u32) -> Self {
43606        self.std_pps_id = std_pps_id;
43607        self
43608    }
43609}
43610#[repr(C)]
43611#[cfg_attr(feature = "debug", derive(Debug))]
43612#[derive(Copy, Clone)]
43613#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265SessionParametersFeedbackInfoKHR.html>"]
43614#[must_use]
43615pub struct VideoEncodeH265SessionParametersFeedbackInfoKHR<'a> {
43616    pub s_type: StructureType,
43617    pub p_next: *mut c_void,
43618    pub has_std_vps_overrides: Bool32,
43619    pub has_std_sps_overrides: Bool32,
43620    pub has_std_pps_overrides: Bool32,
43621    pub _marker: PhantomData<&'a ()>,
43622}
43623unsafe impl Send for VideoEncodeH265SessionParametersFeedbackInfoKHR<'_> {}
43624unsafe impl Sync for VideoEncodeH265SessionParametersFeedbackInfoKHR<'_> {}
43625impl ::core::default::Default for VideoEncodeH265SessionParametersFeedbackInfoKHR<'_> {
43626    #[inline]
43627    fn default() -> Self {
43628        Self {
43629            s_type: Self::STRUCTURE_TYPE,
43630            p_next: ::core::ptr::null_mut(),
43631            has_std_vps_overrides: Bool32::default(),
43632            has_std_sps_overrides: Bool32::default(),
43633            has_std_pps_overrides: Bool32::default(),
43634            _marker: PhantomData,
43635        }
43636    }
43637}
43638unsafe impl<'a> TaggedStructure for VideoEncodeH265SessionParametersFeedbackInfoKHR<'a> {
43639    const STRUCTURE_TYPE: StructureType =
43640        StructureType::VIDEO_ENCODE_H265_SESSION_PARAMETERS_FEEDBACK_INFO_KHR;
43641}
43642unsafe impl ExtendsVideoEncodeSessionParametersFeedbackInfoKHR
43643    for VideoEncodeH265SessionParametersFeedbackInfoKHR<'_>
43644{
43645}
43646impl<'a> VideoEncodeH265SessionParametersFeedbackInfoKHR<'a> {
43647    #[inline]
43648    pub fn has_std_vps_overrides(mut self, has_std_vps_overrides: bool) -> Self {
43649        self.has_std_vps_overrides = has_std_vps_overrides.into();
43650        self
43651    }
43652    #[inline]
43653    pub fn has_std_sps_overrides(mut self, has_std_sps_overrides: bool) -> Self {
43654        self.has_std_sps_overrides = has_std_sps_overrides.into();
43655        self
43656    }
43657    #[inline]
43658    pub fn has_std_pps_overrides(mut self, has_std_pps_overrides: bool) -> Self {
43659        self.has_std_pps_overrides = has_std_pps_overrides.into();
43660        self
43661    }
43662}
43663#[repr(C)]
43664#[cfg_attr(feature = "debug", derive(Debug))]
43665#[derive(Copy, Clone)]
43666#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265PictureInfoKHR.html>"]
43667#[must_use]
43668pub struct VideoEncodeH265PictureInfoKHR<'a> {
43669    pub s_type: StructureType,
43670    pub p_next: *const c_void,
43671    pub nalu_slice_segment_entry_count: u32,
43672    pub p_nalu_slice_segment_entries: *const VideoEncodeH265NaluSliceSegmentInfoKHR<'a>,
43673    pub p_std_picture_info: *const StdVideoEncodeH265PictureInfo,
43674    pub _marker: PhantomData<&'a ()>,
43675}
43676unsafe impl Send for VideoEncodeH265PictureInfoKHR<'_> {}
43677unsafe impl Sync for VideoEncodeH265PictureInfoKHR<'_> {}
43678impl ::core::default::Default for VideoEncodeH265PictureInfoKHR<'_> {
43679    #[inline]
43680    fn default() -> Self {
43681        Self {
43682            s_type: Self::STRUCTURE_TYPE,
43683            p_next: ::core::ptr::null(),
43684            nalu_slice_segment_entry_count: u32::default(),
43685            p_nalu_slice_segment_entries: ::core::ptr::null(),
43686            p_std_picture_info: ::core::ptr::null(),
43687            _marker: PhantomData,
43688        }
43689    }
43690}
43691unsafe impl<'a> TaggedStructure for VideoEncodeH265PictureInfoKHR<'a> {
43692    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_PICTURE_INFO_KHR;
43693}
43694unsafe impl ExtendsVideoEncodeInfoKHR for VideoEncodeH265PictureInfoKHR<'_> {}
43695impl<'a> VideoEncodeH265PictureInfoKHR<'a> {
43696    #[inline]
43697    pub fn nalu_slice_segment_entries(
43698        mut self,
43699        nalu_slice_segment_entries: &'a [VideoEncodeH265NaluSliceSegmentInfoKHR<'a>],
43700    ) -> Self {
43701        self.nalu_slice_segment_entry_count = nalu_slice_segment_entries.len() as _;
43702        self.p_nalu_slice_segment_entries = nalu_slice_segment_entries.as_ptr();
43703        self
43704    }
43705    #[inline]
43706    pub fn std_picture_info(mut self, std_picture_info: &'a StdVideoEncodeH265PictureInfo) -> Self {
43707        self.p_std_picture_info = std_picture_info;
43708        self
43709    }
43710}
43711#[repr(C)]
43712#[cfg_attr(feature = "debug", derive(Debug))]
43713#[derive(Copy, Clone)]
43714#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265NaluSliceSegmentInfoKHR.html>"]
43715#[must_use]
43716pub struct VideoEncodeH265NaluSliceSegmentInfoKHR<'a> {
43717    pub s_type: StructureType,
43718    pub p_next: *const c_void,
43719    pub constant_qp: i32,
43720    pub p_std_slice_segment_header: *const StdVideoEncodeH265SliceSegmentHeader,
43721    pub _marker: PhantomData<&'a ()>,
43722}
43723unsafe impl Send for VideoEncodeH265NaluSliceSegmentInfoKHR<'_> {}
43724unsafe impl Sync for VideoEncodeH265NaluSliceSegmentInfoKHR<'_> {}
43725impl ::core::default::Default for VideoEncodeH265NaluSliceSegmentInfoKHR<'_> {
43726    #[inline]
43727    fn default() -> Self {
43728        Self {
43729            s_type: Self::STRUCTURE_TYPE,
43730            p_next: ::core::ptr::null(),
43731            constant_qp: i32::default(),
43732            p_std_slice_segment_header: ::core::ptr::null(),
43733            _marker: PhantomData,
43734        }
43735    }
43736}
43737unsafe impl<'a> TaggedStructure for VideoEncodeH265NaluSliceSegmentInfoKHR<'a> {
43738    const STRUCTURE_TYPE: StructureType =
43739        StructureType::VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_INFO_KHR;
43740}
43741impl<'a> VideoEncodeH265NaluSliceSegmentInfoKHR<'a> {
43742    #[inline]
43743    pub fn constant_qp(mut self, constant_qp: i32) -> Self {
43744        self.constant_qp = constant_qp;
43745        self
43746    }
43747    #[inline]
43748    pub fn std_slice_segment_header(
43749        mut self,
43750        std_slice_segment_header: &'a StdVideoEncodeH265SliceSegmentHeader,
43751    ) -> Self {
43752        self.p_std_slice_segment_header = std_slice_segment_header;
43753        self
43754    }
43755}
43756#[repr(C)]
43757#[cfg_attr(feature = "debug", derive(Debug))]
43758#[derive(Copy, Clone)]
43759#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265RateControlInfoKHR.html>"]
43760#[must_use]
43761pub struct VideoEncodeH265RateControlInfoKHR<'a> {
43762    pub s_type: StructureType,
43763    pub p_next: *const c_void,
43764    pub flags: VideoEncodeH265RateControlFlagsKHR,
43765    pub gop_frame_count: u32,
43766    pub idr_period: u32,
43767    pub consecutive_b_frame_count: u32,
43768    pub sub_layer_count: u32,
43769    pub _marker: PhantomData<&'a ()>,
43770}
43771unsafe impl Send for VideoEncodeH265RateControlInfoKHR<'_> {}
43772unsafe impl Sync for VideoEncodeH265RateControlInfoKHR<'_> {}
43773impl ::core::default::Default for VideoEncodeH265RateControlInfoKHR<'_> {
43774    #[inline]
43775    fn default() -> Self {
43776        Self {
43777            s_type: Self::STRUCTURE_TYPE,
43778            p_next: ::core::ptr::null(),
43779            flags: VideoEncodeH265RateControlFlagsKHR::default(),
43780            gop_frame_count: u32::default(),
43781            idr_period: u32::default(),
43782            consecutive_b_frame_count: u32::default(),
43783            sub_layer_count: u32::default(),
43784            _marker: PhantomData,
43785        }
43786    }
43787}
43788unsafe impl<'a> TaggedStructure for VideoEncodeH265RateControlInfoKHR<'a> {
43789    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_RATE_CONTROL_INFO_KHR;
43790}
43791unsafe impl ExtendsVideoCodingControlInfoKHR for VideoEncodeH265RateControlInfoKHR<'_> {}
43792unsafe impl ExtendsVideoBeginCodingInfoKHR for VideoEncodeH265RateControlInfoKHR<'_> {}
43793impl<'a> VideoEncodeH265RateControlInfoKHR<'a> {
43794    #[inline]
43795    pub fn flags(mut self, flags: VideoEncodeH265RateControlFlagsKHR) -> Self {
43796        self.flags = flags;
43797        self
43798    }
43799    #[inline]
43800    pub fn gop_frame_count(mut self, gop_frame_count: u32) -> Self {
43801        self.gop_frame_count = gop_frame_count;
43802        self
43803    }
43804    #[inline]
43805    pub fn idr_period(mut self, idr_period: u32) -> Self {
43806        self.idr_period = idr_period;
43807        self
43808    }
43809    #[inline]
43810    pub fn consecutive_b_frame_count(mut self, consecutive_b_frame_count: u32) -> Self {
43811        self.consecutive_b_frame_count = consecutive_b_frame_count;
43812        self
43813    }
43814    #[inline]
43815    pub fn sub_layer_count(mut self, sub_layer_count: u32) -> Self {
43816        self.sub_layer_count = sub_layer_count;
43817        self
43818    }
43819}
43820#[repr(C)]
43821#[cfg_attr(feature = "debug", derive(Debug))]
43822#[derive(Copy, Clone, Default)]
43823#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265QpKHR.html>"]
43824#[must_use]
43825pub struct VideoEncodeH265QpKHR {
43826    pub qp_i: i32,
43827    pub qp_p: i32,
43828    pub qp_b: i32,
43829}
43830impl VideoEncodeH265QpKHR {
43831    #[inline]
43832    pub fn qp_i(mut self, qp_i: i32) -> Self {
43833        self.qp_i = qp_i;
43834        self
43835    }
43836    #[inline]
43837    pub fn qp_p(mut self, qp_p: i32) -> Self {
43838        self.qp_p = qp_p;
43839        self
43840    }
43841    #[inline]
43842    pub fn qp_b(mut self, qp_b: i32) -> Self {
43843        self.qp_b = qp_b;
43844        self
43845    }
43846}
43847#[repr(C)]
43848#[cfg_attr(feature = "debug", derive(Debug))]
43849#[derive(Copy, Clone, Default)]
43850#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265FrameSizeKHR.html>"]
43851#[must_use]
43852pub struct VideoEncodeH265FrameSizeKHR {
43853    pub frame_i_size: u32,
43854    pub frame_p_size: u32,
43855    pub frame_b_size: u32,
43856}
43857impl VideoEncodeH265FrameSizeKHR {
43858    #[inline]
43859    pub fn frame_i_size(mut self, frame_i_size: u32) -> Self {
43860        self.frame_i_size = frame_i_size;
43861        self
43862    }
43863    #[inline]
43864    pub fn frame_p_size(mut self, frame_p_size: u32) -> Self {
43865        self.frame_p_size = frame_p_size;
43866        self
43867    }
43868    #[inline]
43869    pub fn frame_b_size(mut self, frame_b_size: u32) -> Self {
43870        self.frame_b_size = frame_b_size;
43871        self
43872    }
43873}
43874#[repr(C)]
43875#[cfg_attr(feature = "debug", derive(Debug))]
43876#[derive(Copy, Clone)]
43877#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265GopRemainingFrameInfoKHR.html>"]
43878#[must_use]
43879pub struct VideoEncodeH265GopRemainingFrameInfoKHR<'a> {
43880    pub s_type: StructureType,
43881    pub p_next: *const c_void,
43882    pub use_gop_remaining_frames: Bool32,
43883    pub gop_remaining_i: u32,
43884    pub gop_remaining_p: u32,
43885    pub gop_remaining_b: u32,
43886    pub _marker: PhantomData<&'a ()>,
43887}
43888unsafe impl Send for VideoEncodeH265GopRemainingFrameInfoKHR<'_> {}
43889unsafe impl Sync for VideoEncodeH265GopRemainingFrameInfoKHR<'_> {}
43890impl ::core::default::Default for VideoEncodeH265GopRemainingFrameInfoKHR<'_> {
43891    #[inline]
43892    fn default() -> Self {
43893        Self {
43894            s_type: Self::STRUCTURE_TYPE,
43895            p_next: ::core::ptr::null(),
43896            use_gop_remaining_frames: Bool32::default(),
43897            gop_remaining_i: u32::default(),
43898            gop_remaining_p: u32::default(),
43899            gop_remaining_b: u32::default(),
43900            _marker: PhantomData,
43901        }
43902    }
43903}
43904unsafe impl<'a> TaggedStructure for VideoEncodeH265GopRemainingFrameInfoKHR<'a> {
43905    const STRUCTURE_TYPE: StructureType =
43906        StructureType::VIDEO_ENCODE_H265_GOP_REMAINING_FRAME_INFO_KHR;
43907}
43908unsafe impl ExtendsVideoBeginCodingInfoKHR for VideoEncodeH265GopRemainingFrameInfoKHR<'_> {}
43909impl<'a> VideoEncodeH265GopRemainingFrameInfoKHR<'a> {
43910    #[inline]
43911    pub fn use_gop_remaining_frames(mut self, use_gop_remaining_frames: bool) -> Self {
43912        self.use_gop_remaining_frames = use_gop_remaining_frames.into();
43913        self
43914    }
43915    #[inline]
43916    pub fn gop_remaining_i(mut self, gop_remaining_i: u32) -> Self {
43917        self.gop_remaining_i = gop_remaining_i;
43918        self
43919    }
43920    #[inline]
43921    pub fn gop_remaining_p(mut self, gop_remaining_p: u32) -> Self {
43922        self.gop_remaining_p = gop_remaining_p;
43923        self
43924    }
43925    #[inline]
43926    pub fn gop_remaining_b(mut self, gop_remaining_b: u32) -> Self {
43927        self.gop_remaining_b = gop_remaining_b;
43928        self
43929    }
43930}
43931#[repr(C)]
43932#[cfg_attr(feature = "debug", derive(Debug))]
43933#[derive(Copy, Clone)]
43934#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265RateControlLayerInfoKHR.html>"]
43935#[must_use]
43936pub struct VideoEncodeH265RateControlLayerInfoKHR<'a> {
43937    pub s_type: StructureType,
43938    pub p_next: *const c_void,
43939    pub use_min_qp: Bool32,
43940    pub min_qp: VideoEncodeH265QpKHR,
43941    pub use_max_qp: Bool32,
43942    pub max_qp: VideoEncodeH265QpKHR,
43943    pub use_max_frame_size: Bool32,
43944    pub max_frame_size: VideoEncodeH265FrameSizeKHR,
43945    pub _marker: PhantomData<&'a ()>,
43946}
43947unsafe impl Send for VideoEncodeH265RateControlLayerInfoKHR<'_> {}
43948unsafe impl Sync for VideoEncodeH265RateControlLayerInfoKHR<'_> {}
43949impl ::core::default::Default for VideoEncodeH265RateControlLayerInfoKHR<'_> {
43950    #[inline]
43951    fn default() -> Self {
43952        Self {
43953            s_type: Self::STRUCTURE_TYPE,
43954            p_next: ::core::ptr::null(),
43955            use_min_qp: Bool32::default(),
43956            min_qp: VideoEncodeH265QpKHR::default(),
43957            use_max_qp: Bool32::default(),
43958            max_qp: VideoEncodeH265QpKHR::default(),
43959            use_max_frame_size: Bool32::default(),
43960            max_frame_size: VideoEncodeH265FrameSizeKHR::default(),
43961            _marker: PhantomData,
43962        }
43963    }
43964}
43965unsafe impl<'a> TaggedStructure for VideoEncodeH265RateControlLayerInfoKHR<'a> {
43966    const STRUCTURE_TYPE: StructureType =
43967        StructureType::VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_KHR;
43968}
43969unsafe impl ExtendsVideoEncodeRateControlLayerInfoKHR
43970    for VideoEncodeH265RateControlLayerInfoKHR<'_>
43971{
43972}
43973impl<'a> VideoEncodeH265RateControlLayerInfoKHR<'a> {
43974    #[inline]
43975    pub fn use_min_qp(mut self, use_min_qp: bool) -> Self {
43976        self.use_min_qp = use_min_qp.into();
43977        self
43978    }
43979    #[inline]
43980    pub fn min_qp(mut self, min_qp: VideoEncodeH265QpKHR) -> Self {
43981        self.min_qp = min_qp;
43982        self
43983    }
43984    #[inline]
43985    pub fn use_max_qp(mut self, use_max_qp: bool) -> Self {
43986        self.use_max_qp = use_max_qp.into();
43987        self
43988    }
43989    #[inline]
43990    pub fn max_qp(mut self, max_qp: VideoEncodeH265QpKHR) -> Self {
43991        self.max_qp = max_qp;
43992        self
43993    }
43994    #[inline]
43995    pub fn use_max_frame_size(mut self, use_max_frame_size: bool) -> Self {
43996        self.use_max_frame_size = use_max_frame_size.into();
43997        self
43998    }
43999    #[inline]
44000    pub fn max_frame_size(mut self, max_frame_size: VideoEncodeH265FrameSizeKHR) -> Self {
44001        self.max_frame_size = max_frame_size;
44002        self
44003    }
44004}
44005#[repr(C)]
44006#[cfg_attr(feature = "debug", derive(Debug))]
44007#[derive(Copy, Clone)]
44008#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265ProfileInfoKHR.html>"]
44009#[must_use]
44010pub struct VideoEncodeH265ProfileInfoKHR<'a> {
44011    pub s_type: StructureType,
44012    pub p_next: *const c_void,
44013    pub std_profile_idc: StdVideoH265ProfileIdc,
44014    pub _marker: PhantomData<&'a ()>,
44015}
44016unsafe impl Send for VideoEncodeH265ProfileInfoKHR<'_> {}
44017unsafe impl Sync for VideoEncodeH265ProfileInfoKHR<'_> {}
44018impl ::core::default::Default for VideoEncodeH265ProfileInfoKHR<'_> {
44019    #[inline]
44020    fn default() -> Self {
44021        Self {
44022            s_type: Self::STRUCTURE_TYPE,
44023            p_next: ::core::ptr::null(),
44024            std_profile_idc: StdVideoH265ProfileIdc::default(),
44025            _marker: PhantomData,
44026        }
44027    }
44028}
44029unsafe impl<'a> TaggedStructure for VideoEncodeH265ProfileInfoKHR<'a> {
44030    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_PROFILE_INFO_KHR;
44031}
44032unsafe impl ExtendsVideoProfileInfoKHR for VideoEncodeH265ProfileInfoKHR<'_> {}
44033unsafe impl ExtendsQueryPoolCreateInfo for VideoEncodeH265ProfileInfoKHR<'_> {}
44034impl<'a> VideoEncodeH265ProfileInfoKHR<'a> {
44035    #[inline]
44036    pub fn std_profile_idc(mut self, std_profile_idc: StdVideoH265ProfileIdc) -> Self {
44037        self.std_profile_idc = std_profile_idc;
44038        self
44039    }
44040}
44041#[repr(C)]
44042#[cfg_attr(feature = "debug", derive(Debug))]
44043#[derive(Copy, Clone)]
44044#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkVideoEncodeH265DpbSlotInfoKHR.html>"]
44045#[must_use]
44046pub struct VideoEncodeH265DpbSlotInfoKHR<'a> {
44047    pub s_type: StructureType,
44048    pub p_next: *const c_void,
44049    pub p_std_reference_info: *const StdVideoEncodeH265ReferenceInfo,
44050    pub _marker: PhantomData<&'a ()>,
44051}
44052unsafe impl Send for VideoEncodeH265DpbSlotInfoKHR<'_> {}
44053unsafe impl Sync for VideoEncodeH265DpbSlotInfoKHR<'_> {}
44054impl ::core::default::Default for VideoEncodeH265DpbSlotInfoKHR<'_> {
44055    #[inline]
44056    fn default() -> Self {
44057        Self {
44058            s_type: Self::STRUCTURE_TYPE,
44059            p_next: ::core::ptr::null(),
44060            p_std_reference_info: ::core::ptr::null(),
44061            _marker: PhantomData,
44062        }
44063    }
44064}
44065unsafe impl<'a> TaggedStructure for VideoEncodeH265DpbSlotInfoKHR<'a> {
44066    const STRUCTURE_TYPE: StructureType = StructureType::VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR;
44067}
44068unsafe impl ExtendsVideoReferenceSlotInfoKHR for VideoEncodeH265DpbSlotInfoKHR<'_> {}
44069impl<'a> VideoEncodeH265DpbSlotInfoKHR<'a> {
44070    #[inline]
44071    pub fn std_reference_info(
44072        mut self,
44073        std_reference_info: &'a StdVideoEncodeH265ReferenceInfo,
44074    ) -> Self {
44075        self.p_std_reference_info = std_reference_info;
44076        self
44077    }
44078}
44079#[repr(C)]
44080#[cfg_attr(feature = "debug", derive(Debug))]
44081#[derive(Copy, Clone)]
44082#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceInheritedViewportScissorFeaturesNV.html>"]
44083#[must_use]
44084pub struct PhysicalDeviceInheritedViewportScissorFeaturesNV<'a> {
44085    pub s_type: StructureType,
44086    pub p_next: *mut c_void,
44087    pub inherited_viewport_scissor2_d: Bool32,
44088    pub _marker: PhantomData<&'a ()>,
44089}
44090unsafe impl Send for PhysicalDeviceInheritedViewportScissorFeaturesNV<'_> {}
44091unsafe impl Sync for PhysicalDeviceInheritedViewportScissorFeaturesNV<'_> {}
44092impl ::core::default::Default for PhysicalDeviceInheritedViewportScissorFeaturesNV<'_> {
44093    #[inline]
44094    fn default() -> Self {
44095        Self {
44096            s_type: Self::STRUCTURE_TYPE,
44097            p_next: ::core::ptr::null_mut(),
44098            inherited_viewport_scissor2_d: Bool32::default(),
44099            _marker: PhantomData,
44100        }
44101    }
44102}
44103unsafe impl<'a> TaggedStructure for PhysicalDeviceInheritedViewportScissorFeaturesNV<'a> {
44104    const STRUCTURE_TYPE: StructureType =
44105        StructureType::PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV;
44106}
44107unsafe impl ExtendsPhysicalDeviceFeatures2
44108    for PhysicalDeviceInheritedViewportScissorFeaturesNV<'_>
44109{
44110}
44111unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceInheritedViewportScissorFeaturesNV<'_> {}
44112impl<'a> PhysicalDeviceInheritedViewportScissorFeaturesNV<'a> {
44113    #[inline]
44114    pub fn inherited_viewport_scissor2_d(mut self, inherited_viewport_scissor2_d: bool) -> Self {
44115        self.inherited_viewport_scissor2_d = inherited_viewport_scissor2_d.into();
44116        self
44117    }
44118}
44119#[repr(C)]
44120#[cfg_attr(feature = "debug", derive(Debug))]
44121#[derive(Copy, Clone)]
44122#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferInheritanceViewportScissorInfoNV.html>"]
44123#[must_use]
44124pub struct CommandBufferInheritanceViewportScissorInfoNV<'a> {
44125    pub s_type: StructureType,
44126    pub p_next: *const c_void,
44127    pub viewport_scissor2_d: Bool32,
44128    pub viewport_depth_count: u32,
44129    pub p_viewport_depths: *const Viewport,
44130    pub _marker: PhantomData<&'a ()>,
44131}
44132unsafe impl Send for CommandBufferInheritanceViewportScissorInfoNV<'_> {}
44133unsafe impl Sync for CommandBufferInheritanceViewportScissorInfoNV<'_> {}
44134impl ::core::default::Default for CommandBufferInheritanceViewportScissorInfoNV<'_> {
44135    #[inline]
44136    fn default() -> Self {
44137        Self {
44138            s_type: Self::STRUCTURE_TYPE,
44139            p_next: ::core::ptr::null(),
44140            viewport_scissor2_d: Bool32::default(),
44141            viewport_depth_count: u32::default(),
44142            p_viewport_depths: ::core::ptr::null(),
44143            _marker: PhantomData,
44144        }
44145    }
44146}
44147unsafe impl<'a> TaggedStructure for CommandBufferInheritanceViewportScissorInfoNV<'a> {
44148    const STRUCTURE_TYPE: StructureType =
44149        StructureType::COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV;
44150}
44151unsafe impl ExtendsCommandBufferInheritanceInfo
44152    for CommandBufferInheritanceViewportScissorInfoNV<'_>
44153{
44154}
44155impl<'a> CommandBufferInheritanceViewportScissorInfoNV<'a> {
44156    #[inline]
44157    pub fn viewport_scissor2_d(mut self, viewport_scissor2_d: bool) -> Self {
44158        self.viewport_scissor2_d = viewport_scissor2_d.into();
44159        self
44160    }
44161    #[inline]
44162    pub fn viewport_depth_count(mut self, viewport_depth_count: u32) -> Self {
44163        self.viewport_depth_count = viewport_depth_count;
44164        self
44165    }
44166    #[inline]
44167    pub fn viewport_depths(mut self, viewport_depths: &'a Viewport) -> Self {
44168        self.p_viewport_depths = viewport_depths;
44169        self
44170    }
44171}
44172#[repr(C)]
44173#[cfg_attr(feature = "debug", derive(Debug))]
44174#[derive(Copy, Clone)]
44175#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT.html>"]
44176#[must_use]
44177pub struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'a> {
44178    pub s_type: StructureType,
44179    pub p_next: *mut c_void,
44180    pub ycbcr2plane444_formats: Bool32,
44181    pub _marker: PhantomData<&'a ()>,
44182}
44183unsafe impl Send for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'_> {}
44184unsafe impl Sync for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'_> {}
44185impl ::core::default::Default for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'_> {
44186    #[inline]
44187    fn default() -> Self {
44188        Self {
44189            s_type: Self::STRUCTURE_TYPE,
44190            p_next: ::core::ptr::null_mut(),
44191            ycbcr2plane444_formats: Bool32::default(),
44192            _marker: PhantomData,
44193        }
44194    }
44195}
44196unsafe impl<'a> TaggedStructure for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'a> {
44197    const STRUCTURE_TYPE: StructureType =
44198        StructureType::PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT;
44199}
44200unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'_> {}
44201unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'_> {}
44202impl<'a> PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT<'a> {
44203    #[inline]
44204    pub fn ycbcr2plane444_formats(mut self, ycbcr2plane444_formats: bool) -> Self {
44205        self.ycbcr2plane444_formats = ycbcr2plane444_formats.into();
44206        self
44207    }
44208}
44209#[repr(C)]
44210#[cfg_attr(feature = "debug", derive(Debug))]
44211#[derive(Copy, Clone)]
44212#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProvokingVertexFeaturesEXT.html>"]
44213#[must_use]
44214pub struct PhysicalDeviceProvokingVertexFeaturesEXT<'a> {
44215    pub s_type: StructureType,
44216    pub p_next: *mut c_void,
44217    pub provoking_vertex_last: Bool32,
44218    pub transform_feedback_preserves_provoking_vertex: Bool32,
44219    pub _marker: PhantomData<&'a ()>,
44220}
44221unsafe impl Send for PhysicalDeviceProvokingVertexFeaturesEXT<'_> {}
44222unsafe impl Sync for PhysicalDeviceProvokingVertexFeaturesEXT<'_> {}
44223impl ::core::default::Default for PhysicalDeviceProvokingVertexFeaturesEXT<'_> {
44224    #[inline]
44225    fn default() -> Self {
44226        Self {
44227            s_type: Self::STRUCTURE_TYPE,
44228            p_next: ::core::ptr::null_mut(),
44229            provoking_vertex_last: Bool32::default(),
44230            transform_feedback_preserves_provoking_vertex: Bool32::default(),
44231            _marker: PhantomData,
44232        }
44233    }
44234}
44235unsafe impl<'a> TaggedStructure for PhysicalDeviceProvokingVertexFeaturesEXT<'a> {
44236    const STRUCTURE_TYPE: StructureType =
44237        StructureType::PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT;
44238}
44239unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceProvokingVertexFeaturesEXT<'_> {}
44240unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceProvokingVertexFeaturesEXT<'_> {}
44241impl<'a> PhysicalDeviceProvokingVertexFeaturesEXT<'a> {
44242    #[inline]
44243    pub fn provoking_vertex_last(mut self, provoking_vertex_last: bool) -> Self {
44244        self.provoking_vertex_last = provoking_vertex_last.into();
44245        self
44246    }
44247    #[inline]
44248    pub fn transform_feedback_preserves_provoking_vertex(
44249        mut self,
44250        transform_feedback_preserves_provoking_vertex: bool,
44251    ) -> Self {
44252        self.transform_feedback_preserves_provoking_vertex =
44253            transform_feedback_preserves_provoking_vertex.into();
44254        self
44255    }
44256}
44257#[repr(C)]
44258#[cfg_attr(feature = "debug", derive(Debug))]
44259#[derive(Copy, Clone)]
44260#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceProvokingVertexPropertiesEXT.html>"]
44261#[must_use]
44262pub struct PhysicalDeviceProvokingVertexPropertiesEXT<'a> {
44263    pub s_type: StructureType,
44264    pub p_next: *mut c_void,
44265    pub provoking_vertex_mode_per_pipeline: Bool32,
44266    pub transform_feedback_preserves_triangle_fan_provoking_vertex: Bool32,
44267    pub _marker: PhantomData<&'a ()>,
44268}
44269unsafe impl Send for PhysicalDeviceProvokingVertexPropertiesEXT<'_> {}
44270unsafe impl Sync for PhysicalDeviceProvokingVertexPropertiesEXT<'_> {}
44271impl ::core::default::Default for PhysicalDeviceProvokingVertexPropertiesEXT<'_> {
44272    #[inline]
44273    fn default() -> Self {
44274        Self {
44275            s_type: Self::STRUCTURE_TYPE,
44276            p_next: ::core::ptr::null_mut(),
44277            provoking_vertex_mode_per_pipeline: Bool32::default(),
44278            transform_feedback_preserves_triangle_fan_provoking_vertex: Bool32::default(),
44279            _marker: PhantomData,
44280        }
44281    }
44282}
44283unsafe impl<'a> TaggedStructure for PhysicalDeviceProvokingVertexPropertiesEXT<'a> {
44284    const STRUCTURE_TYPE: StructureType =
44285        StructureType::PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT;
44286}
44287unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceProvokingVertexPropertiesEXT<'_> {}
44288impl<'a> PhysicalDeviceProvokingVertexPropertiesEXT<'a> {
44289    #[inline]
44290    pub fn provoking_vertex_mode_per_pipeline(
44291        mut self,
44292        provoking_vertex_mode_per_pipeline: bool,
44293    ) -> Self {
44294        self.provoking_vertex_mode_per_pipeline = provoking_vertex_mode_per_pipeline.into();
44295        self
44296    }
44297    #[inline]
44298    pub fn transform_feedback_preserves_triangle_fan_provoking_vertex(
44299        mut self,
44300        transform_feedback_preserves_triangle_fan_provoking_vertex: bool,
44301    ) -> Self {
44302        self.transform_feedback_preserves_triangle_fan_provoking_vertex =
44303            transform_feedback_preserves_triangle_fan_provoking_vertex.into();
44304        self
44305    }
44306}
44307#[repr(C)]
44308#[cfg_attr(feature = "debug", derive(Debug))]
44309#[derive(Copy, Clone)]
44310#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRasterizationProvokingVertexStateCreateInfoEXT.html>"]
44311#[must_use]
44312pub struct PipelineRasterizationProvokingVertexStateCreateInfoEXT<'a> {
44313    pub s_type: StructureType,
44314    pub p_next: *const c_void,
44315    pub provoking_vertex_mode: ProvokingVertexModeEXT,
44316    pub _marker: PhantomData<&'a ()>,
44317}
44318unsafe impl Send for PipelineRasterizationProvokingVertexStateCreateInfoEXT<'_> {}
44319unsafe impl Sync for PipelineRasterizationProvokingVertexStateCreateInfoEXT<'_> {}
44320impl ::core::default::Default for PipelineRasterizationProvokingVertexStateCreateInfoEXT<'_> {
44321    #[inline]
44322    fn default() -> Self {
44323        Self {
44324            s_type: Self::STRUCTURE_TYPE,
44325            p_next: ::core::ptr::null(),
44326            provoking_vertex_mode: ProvokingVertexModeEXT::default(),
44327            _marker: PhantomData,
44328        }
44329    }
44330}
44331unsafe impl<'a> TaggedStructure for PipelineRasterizationProvokingVertexStateCreateInfoEXT<'a> {
44332    const STRUCTURE_TYPE: StructureType =
44333        StructureType::PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT;
44334}
44335unsafe impl ExtendsPipelineRasterizationStateCreateInfo
44336    for PipelineRasterizationProvokingVertexStateCreateInfoEXT<'_>
44337{
44338}
44339impl<'a> PipelineRasterizationProvokingVertexStateCreateInfoEXT<'a> {
44340    #[inline]
44341    pub fn provoking_vertex_mode(mut self, provoking_vertex_mode: ProvokingVertexModeEXT) -> Self {
44342        self.provoking_vertex_mode = provoking_vertex_mode;
44343        self
44344    }
44345}
44346#[repr(C)]
44347#[cfg_attr(feature = "debug", derive(Debug))]
44348#[derive(Copy, Clone)]
44349#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCuModuleCreateInfoNVX.html>"]
44350#[must_use]
44351pub struct CuModuleCreateInfoNVX<'a> {
44352    pub s_type: StructureType,
44353    pub p_next: *const c_void,
44354    pub data_size: usize,
44355    pub p_data: *const c_void,
44356    pub _marker: PhantomData<&'a ()>,
44357}
44358unsafe impl Send for CuModuleCreateInfoNVX<'_> {}
44359unsafe impl Sync for CuModuleCreateInfoNVX<'_> {}
44360impl ::core::default::Default for CuModuleCreateInfoNVX<'_> {
44361    #[inline]
44362    fn default() -> Self {
44363        Self {
44364            s_type: Self::STRUCTURE_TYPE,
44365            p_next: ::core::ptr::null(),
44366            data_size: usize::default(),
44367            p_data: ::core::ptr::null(),
44368            _marker: PhantomData,
44369        }
44370    }
44371}
44372unsafe impl<'a> TaggedStructure for CuModuleCreateInfoNVX<'a> {
44373    const STRUCTURE_TYPE: StructureType = StructureType::CU_MODULE_CREATE_INFO_NVX;
44374}
44375impl<'a> CuModuleCreateInfoNVX<'a> {
44376    #[inline]
44377    pub fn data(mut self, data: &'a [u8]) -> Self {
44378        self.data_size = data.len();
44379        self.p_data = data.as_ptr().cast();
44380        self
44381    }
44382}
44383#[repr(C)]
44384#[cfg_attr(feature = "debug", derive(Debug))]
44385#[derive(Copy, Clone)]
44386#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCuFunctionCreateInfoNVX.html>"]
44387#[must_use]
44388pub struct CuFunctionCreateInfoNVX<'a> {
44389    pub s_type: StructureType,
44390    pub p_next: *const c_void,
44391    pub module: CuModuleNVX,
44392    pub p_name: *const c_char,
44393    pub _marker: PhantomData<&'a ()>,
44394}
44395unsafe impl Send for CuFunctionCreateInfoNVX<'_> {}
44396unsafe impl Sync for CuFunctionCreateInfoNVX<'_> {}
44397impl ::core::default::Default for CuFunctionCreateInfoNVX<'_> {
44398    #[inline]
44399    fn default() -> Self {
44400        Self {
44401            s_type: Self::STRUCTURE_TYPE,
44402            p_next: ::core::ptr::null(),
44403            module: CuModuleNVX::default(),
44404            p_name: ::core::ptr::null(),
44405            _marker: PhantomData,
44406        }
44407    }
44408}
44409unsafe impl<'a> TaggedStructure for CuFunctionCreateInfoNVX<'a> {
44410    const STRUCTURE_TYPE: StructureType = StructureType::CU_FUNCTION_CREATE_INFO_NVX;
44411}
44412impl<'a> CuFunctionCreateInfoNVX<'a> {
44413    #[inline]
44414    pub fn module(mut self, module: CuModuleNVX) -> Self {
44415        self.module = module;
44416        self
44417    }
44418    #[inline]
44419    pub fn name(mut self, name: &'a CStr) -> Self {
44420        self.p_name = name.as_ptr();
44421        self
44422    }
44423    #[inline]
44424    pub unsafe fn name_as_c_str(&self) -> Option<&CStr> {
44425        if self.p_name.is_null() {
44426            None
44427        } else {
44428            Some(CStr::from_ptr(self.p_name))
44429        }
44430    }
44431}
44432#[repr(C)]
44433#[cfg_attr(feature = "debug", derive(Debug))]
44434#[derive(Copy, Clone)]
44435#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCuLaunchInfoNVX.html>"]
44436#[must_use]
44437pub struct CuLaunchInfoNVX<'a> {
44438    pub s_type: StructureType,
44439    pub p_next: *const c_void,
44440    pub function: CuFunctionNVX,
44441    pub grid_dim_x: u32,
44442    pub grid_dim_y: u32,
44443    pub grid_dim_z: u32,
44444    pub block_dim_x: u32,
44445    pub block_dim_y: u32,
44446    pub block_dim_z: u32,
44447    pub shared_mem_bytes: u32,
44448    pub param_count: usize,
44449    pub p_params: *const *const c_void,
44450    pub extra_count: usize,
44451    pub p_extras: *const *const c_void,
44452    pub _marker: PhantomData<&'a ()>,
44453}
44454unsafe impl Send for CuLaunchInfoNVX<'_> {}
44455unsafe impl Sync for CuLaunchInfoNVX<'_> {}
44456impl ::core::default::Default for CuLaunchInfoNVX<'_> {
44457    #[inline]
44458    fn default() -> Self {
44459        Self {
44460            s_type: Self::STRUCTURE_TYPE,
44461            p_next: ::core::ptr::null(),
44462            function: CuFunctionNVX::default(),
44463            grid_dim_x: u32::default(),
44464            grid_dim_y: u32::default(),
44465            grid_dim_z: u32::default(),
44466            block_dim_x: u32::default(),
44467            block_dim_y: u32::default(),
44468            block_dim_z: u32::default(),
44469            shared_mem_bytes: u32::default(),
44470            param_count: usize::default(),
44471            p_params: ::core::ptr::null(),
44472            extra_count: usize::default(),
44473            p_extras: ::core::ptr::null(),
44474            _marker: PhantomData,
44475        }
44476    }
44477}
44478unsafe impl<'a> TaggedStructure for CuLaunchInfoNVX<'a> {
44479    const STRUCTURE_TYPE: StructureType = StructureType::CU_LAUNCH_INFO_NVX;
44480}
44481impl<'a> CuLaunchInfoNVX<'a> {
44482    #[inline]
44483    pub fn function(mut self, function: CuFunctionNVX) -> Self {
44484        self.function = function;
44485        self
44486    }
44487    #[inline]
44488    pub fn grid_dim_x(mut self, grid_dim_x: u32) -> Self {
44489        self.grid_dim_x = grid_dim_x;
44490        self
44491    }
44492    #[inline]
44493    pub fn grid_dim_y(mut self, grid_dim_y: u32) -> Self {
44494        self.grid_dim_y = grid_dim_y;
44495        self
44496    }
44497    #[inline]
44498    pub fn grid_dim_z(mut self, grid_dim_z: u32) -> Self {
44499        self.grid_dim_z = grid_dim_z;
44500        self
44501    }
44502    #[inline]
44503    pub fn block_dim_x(mut self, block_dim_x: u32) -> Self {
44504        self.block_dim_x = block_dim_x;
44505        self
44506    }
44507    #[inline]
44508    pub fn block_dim_y(mut self, block_dim_y: u32) -> Self {
44509        self.block_dim_y = block_dim_y;
44510        self
44511    }
44512    #[inline]
44513    pub fn block_dim_z(mut self, block_dim_z: u32) -> Self {
44514        self.block_dim_z = block_dim_z;
44515        self
44516    }
44517    #[inline]
44518    pub fn shared_mem_bytes(mut self, shared_mem_bytes: u32) -> Self {
44519        self.shared_mem_bytes = shared_mem_bytes;
44520        self
44521    }
44522    #[inline]
44523    pub fn params(mut self, params: &'a [*const c_void]) -> Self {
44524        self.param_count = params.len();
44525        self.p_params = params.as_ptr();
44526        self
44527    }
44528    #[inline]
44529    pub fn extras(mut self, extras: &'a [*const c_void]) -> Self {
44530        self.extra_count = extras.len();
44531        self.p_extras = extras.as_ptr();
44532        self
44533    }
44534}
44535#[repr(C)]
44536#[cfg_attr(feature = "debug", derive(Debug))]
44537#[derive(Copy, Clone)]
44538#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorBufferFeaturesEXT.html>"]
44539#[must_use]
44540pub struct PhysicalDeviceDescriptorBufferFeaturesEXT<'a> {
44541    pub s_type: StructureType,
44542    pub p_next: *mut c_void,
44543    pub descriptor_buffer: Bool32,
44544    pub descriptor_buffer_capture_replay: Bool32,
44545    pub descriptor_buffer_image_layout_ignored: Bool32,
44546    pub descriptor_buffer_push_descriptors: Bool32,
44547    pub _marker: PhantomData<&'a ()>,
44548}
44549unsafe impl Send for PhysicalDeviceDescriptorBufferFeaturesEXT<'_> {}
44550unsafe impl Sync for PhysicalDeviceDescriptorBufferFeaturesEXT<'_> {}
44551impl ::core::default::Default for PhysicalDeviceDescriptorBufferFeaturesEXT<'_> {
44552    #[inline]
44553    fn default() -> Self {
44554        Self {
44555            s_type: Self::STRUCTURE_TYPE,
44556            p_next: ::core::ptr::null_mut(),
44557            descriptor_buffer: Bool32::default(),
44558            descriptor_buffer_capture_replay: Bool32::default(),
44559            descriptor_buffer_image_layout_ignored: Bool32::default(),
44560            descriptor_buffer_push_descriptors: Bool32::default(),
44561            _marker: PhantomData,
44562        }
44563    }
44564}
44565unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorBufferFeaturesEXT<'a> {
44566    const STRUCTURE_TYPE: StructureType =
44567        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_FEATURES_EXT;
44568}
44569unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDescriptorBufferFeaturesEXT<'_> {}
44570unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDescriptorBufferFeaturesEXT<'_> {}
44571impl<'a> PhysicalDeviceDescriptorBufferFeaturesEXT<'a> {
44572    #[inline]
44573    pub fn descriptor_buffer(mut self, descriptor_buffer: bool) -> Self {
44574        self.descriptor_buffer = descriptor_buffer.into();
44575        self
44576    }
44577    #[inline]
44578    pub fn descriptor_buffer_capture_replay(
44579        mut self,
44580        descriptor_buffer_capture_replay: bool,
44581    ) -> Self {
44582        self.descriptor_buffer_capture_replay = descriptor_buffer_capture_replay.into();
44583        self
44584    }
44585    #[inline]
44586    pub fn descriptor_buffer_image_layout_ignored(
44587        mut self,
44588        descriptor_buffer_image_layout_ignored: bool,
44589    ) -> Self {
44590        self.descriptor_buffer_image_layout_ignored = descriptor_buffer_image_layout_ignored.into();
44591        self
44592    }
44593    #[inline]
44594    pub fn descriptor_buffer_push_descriptors(
44595        mut self,
44596        descriptor_buffer_push_descriptors: bool,
44597    ) -> Self {
44598        self.descriptor_buffer_push_descriptors = descriptor_buffer_push_descriptors.into();
44599        self
44600    }
44601}
44602#[repr(C)]
44603#[cfg_attr(feature = "debug", derive(Debug))]
44604#[derive(Copy, Clone)]
44605#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorBufferPropertiesEXT.html>"]
44606#[must_use]
44607pub struct PhysicalDeviceDescriptorBufferPropertiesEXT<'a> {
44608    pub s_type: StructureType,
44609    pub p_next: *mut c_void,
44610    pub combined_image_sampler_descriptor_single_array: Bool32,
44611    pub bufferless_push_descriptors: Bool32,
44612    pub allow_sampler_image_view_post_submit_creation: Bool32,
44613    pub descriptor_buffer_offset_alignment: DeviceSize,
44614    pub max_descriptor_buffer_bindings: u32,
44615    pub max_resource_descriptor_buffer_bindings: u32,
44616    pub max_sampler_descriptor_buffer_bindings: u32,
44617    pub max_embedded_immutable_sampler_bindings: u32,
44618    pub max_embedded_immutable_samplers: u32,
44619    pub buffer_capture_replay_descriptor_data_size: usize,
44620    pub image_capture_replay_descriptor_data_size: usize,
44621    pub image_view_capture_replay_descriptor_data_size: usize,
44622    pub sampler_capture_replay_descriptor_data_size: usize,
44623    pub acceleration_structure_capture_replay_descriptor_data_size: usize,
44624    pub sampler_descriptor_size: usize,
44625    pub combined_image_sampler_descriptor_size: usize,
44626    pub sampled_image_descriptor_size: usize,
44627    pub storage_image_descriptor_size: usize,
44628    pub uniform_texel_buffer_descriptor_size: usize,
44629    pub robust_uniform_texel_buffer_descriptor_size: usize,
44630    pub storage_texel_buffer_descriptor_size: usize,
44631    pub robust_storage_texel_buffer_descriptor_size: usize,
44632    pub uniform_buffer_descriptor_size: usize,
44633    pub robust_uniform_buffer_descriptor_size: usize,
44634    pub storage_buffer_descriptor_size: usize,
44635    pub robust_storage_buffer_descriptor_size: usize,
44636    pub input_attachment_descriptor_size: usize,
44637    pub acceleration_structure_descriptor_size: usize,
44638    pub max_sampler_descriptor_buffer_range: DeviceSize,
44639    pub max_resource_descriptor_buffer_range: DeviceSize,
44640    pub sampler_descriptor_buffer_address_space_size: DeviceSize,
44641    pub resource_descriptor_buffer_address_space_size: DeviceSize,
44642    pub descriptor_buffer_address_space_size: DeviceSize,
44643    pub _marker: PhantomData<&'a ()>,
44644}
44645unsafe impl Send for PhysicalDeviceDescriptorBufferPropertiesEXT<'_> {}
44646unsafe impl Sync for PhysicalDeviceDescriptorBufferPropertiesEXT<'_> {}
44647impl ::core::default::Default for PhysicalDeviceDescriptorBufferPropertiesEXT<'_> {
44648    #[inline]
44649    fn default() -> Self {
44650        Self {
44651            s_type: Self::STRUCTURE_TYPE,
44652            p_next: ::core::ptr::null_mut(),
44653            combined_image_sampler_descriptor_single_array: Bool32::default(),
44654            bufferless_push_descriptors: Bool32::default(),
44655            allow_sampler_image_view_post_submit_creation: Bool32::default(),
44656            descriptor_buffer_offset_alignment: DeviceSize::default(),
44657            max_descriptor_buffer_bindings: u32::default(),
44658            max_resource_descriptor_buffer_bindings: u32::default(),
44659            max_sampler_descriptor_buffer_bindings: u32::default(),
44660            max_embedded_immutable_sampler_bindings: u32::default(),
44661            max_embedded_immutable_samplers: u32::default(),
44662            buffer_capture_replay_descriptor_data_size: usize::default(),
44663            image_capture_replay_descriptor_data_size: usize::default(),
44664            image_view_capture_replay_descriptor_data_size: usize::default(),
44665            sampler_capture_replay_descriptor_data_size: usize::default(),
44666            acceleration_structure_capture_replay_descriptor_data_size: usize::default(),
44667            sampler_descriptor_size: usize::default(),
44668            combined_image_sampler_descriptor_size: usize::default(),
44669            sampled_image_descriptor_size: usize::default(),
44670            storage_image_descriptor_size: usize::default(),
44671            uniform_texel_buffer_descriptor_size: usize::default(),
44672            robust_uniform_texel_buffer_descriptor_size: usize::default(),
44673            storage_texel_buffer_descriptor_size: usize::default(),
44674            robust_storage_texel_buffer_descriptor_size: usize::default(),
44675            uniform_buffer_descriptor_size: usize::default(),
44676            robust_uniform_buffer_descriptor_size: usize::default(),
44677            storage_buffer_descriptor_size: usize::default(),
44678            robust_storage_buffer_descriptor_size: usize::default(),
44679            input_attachment_descriptor_size: usize::default(),
44680            acceleration_structure_descriptor_size: usize::default(),
44681            max_sampler_descriptor_buffer_range: DeviceSize::default(),
44682            max_resource_descriptor_buffer_range: DeviceSize::default(),
44683            sampler_descriptor_buffer_address_space_size: DeviceSize::default(),
44684            resource_descriptor_buffer_address_space_size: DeviceSize::default(),
44685            descriptor_buffer_address_space_size: DeviceSize::default(),
44686            _marker: PhantomData,
44687        }
44688    }
44689}
44690unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorBufferPropertiesEXT<'a> {
44691    const STRUCTURE_TYPE: StructureType =
44692        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_PROPERTIES_EXT;
44693}
44694unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDescriptorBufferPropertiesEXT<'_> {}
44695impl<'a> PhysicalDeviceDescriptorBufferPropertiesEXT<'a> {
44696    #[inline]
44697    pub fn combined_image_sampler_descriptor_single_array(
44698        mut self,
44699        combined_image_sampler_descriptor_single_array: bool,
44700    ) -> Self {
44701        self.combined_image_sampler_descriptor_single_array =
44702            combined_image_sampler_descriptor_single_array.into();
44703        self
44704    }
44705    #[inline]
44706    pub fn bufferless_push_descriptors(mut self, bufferless_push_descriptors: bool) -> Self {
44707        self.bufferless_push_descriptors = bufferless_push_descriptors.into();
44708        self
44709    }
44710    #[inline]
44711    pub fn allow_sampler_image_view_post_submit_creation(
44712        mut self,
44713        allow_sampler_image_view_post_submit_creation: bool,
44714    ) -> Self {
44715        self.allow_sampler_image_view_post_submit_creation =
44716            allow_sampler_image_view_post_submit_creation.into();
44717        self
44718    }
44719    #[inline]
44720    pub fn descriptor_buffer_offset_alignment(
44721        mut self,
44722        descriptor_buffer_offset_alignment: DeviceSize,
44723    ) -> Self {
44724        self.descriptor_buffer_offset_alignment = descriptor_buffer_offset_alignment;
44725        self
44726    }
44727    #[inline]
44728    pub fn max_descriptor_buffer_bindings(mut self, max_descriptor_buffer_bindings: u32) -> Self {
44729        self.max_descriptor_buffer_bindings = max_descriptor_buffer_bindings;
44730        self
44731    }
44732    #[inline]
44733    pub fn max_resource_descriptor_buffer_bindings(
44734        mut self,
44735        max_resource_descriptor_buffer_bindings: u32,
44736    ) -> Self {
44737        self.max_resource_descriptor_buffer_bindings = max_resource_descriptor_buffer_bindings;
44738        self
44739    }
44740    #[inline]
44741    pub fn max_sampler_descriptor_buffer_bindings(
44742        mut self,
44743        max_sampler_descriptor_buffer_bindings: u32,
44744    ) -> Self {
44745        self.max_sampler_descriptor_buffer_bindings = max_sampler_descriptor_buffer_bindings;
44746        self
44747    }
44748    #[inline]
44749    pub fn max_embedded_immutable_sampler_bindings(
44750        mut self,
44751        max_embedded_immutable_sampler_bindings: u32,
44752    ) -> Self {
44753        self.max_embedded_immutable_sampler_bindings = max_embedded_immutable_sampler_bindings;
44754        self
44755    }
44756    #[inline]
44757    pub fn max_embedded_immutable_samplers(mut self, max_embedded_immutable_samplers: u32) -> Self {
44758        self.max_embedded_immutable_samplers = max_embedded_immutable_samplers;
44759        self
44760    }
44761    #[inline]
44762    pub fn buffer_capture_replay_descriptor_data_size(
44763        mut self,
44764        buffer_capture_replay_descriptor_data_size: usize,
44765    ) -> Self {
44766        self.buffer_capture_replay_descriptor_data_size =
44767            buffer_capture_replay_descriptor_data_size;
44768        self
44769    }
44770    #[inline]
44771    pub fn image_capture_replay_descriptor_data_size(
44772        mut self,
44773        image_capture_replay_descriptor_data_size: usize,
44774    ) -> Self {
44775        self.image_capture_replay_descriptor_data_size = image_capture_replay_descriptor_data_size;
44776        self
44777    }
44778    #[inline]
44779    pub fn image_view_capture_replay_descriptor_data_size(
44780        mut self,
44781        image_view_capture_replay_descriptor_data_size: usize,
44782    ) -> Self {
44783        self.image_view_capture_replay_descriptor_data_size =
44784            image_view_capture_replay_descriptor_data_size;
44785        self
44786    }
44787    #[inline]
44788    pub fn sampler_capture_replay_descriptor_data_size(
44789        mut self,
44790        sampler_capture_replay_descriptor_data_size: usize,
44791    ) -> Self {
44792        self.sampler_capture_replay_descriptor_data_size =
44793            sampler_capture_replay_descriptor_data_size;
44794        self
44795    }
44796    #[inline]
44797    pub fn acceleration_structure_capture_replay_descriptor_data_size(
44798        mut self,
44799        acceleration_structure_capture_replay_descriptor_data_size: usize,
44800    ) -> Self {
44801        self.acceleration_structure_capture_replay_descriptor_data_size =
44802            acceleration_structure_capture_replay_descriptor_data_size;
44803        self
44804    }
44805    #[inline]
44806    pub fn sampler_descriptor_size(mut self, sampler_descriptor_size: usize) -> Self {
44807        self.sampler_descriptor_size = sampler_descriptor_size;
44808        self
44809    }
44810    #[inline]
44811    pub fn combined_image_sampler_descriptor_size(
44812        mut self,
44813        combined_image_sampler_descriptor_size: usize,
44814    ) -> Self {
44815        self.combined_image_sampler_descriptor_size = combined_image_sampler_descriptor_size;
44816        self
44817    }
44818    #[inline]
44819    pub fn sampled_image_descriptor_size(mut self, sampled_image_descriptor_size: usize) -> Self {
44820        self.sampled_image_descriptor_size = sampled_image_descriptor_size;
44821        self
44822    }
44823    #[inline]
44824    pub fn storage_image_descriptor_size(mut self, storage_image_descriptor_size: usize) -> Self {
44825        self.storage_image_descriptor_size = storage_image_descriptor_size;
44826        self
44827    }
44828    #[inline]
44829    pub fn uniform_texel_buffer_descriptor_size(
44830        mut self,
44831        uniform_texel_buffer_descriptor_size: usize,
44832    ) -> Self {
44833        self.uniform_texel_buffer_descriptor_size = uniform_texel_buffer_descriptor_size;
44834        self
44835    }
44836    #[inline]
44837    pub fn robust_uniform_texel_buffer_descriptor_size(
44838        mut self,
44839        robust_uniform_texel_buffer_descriptor_size: usize,
44840    ) -> Self {
44841        self.robust_uniform_texel_buffer_descriptor_size =
44842            robust_uniform_texel_buffer_descriptor_size;
44843        self
44844    }
44845    #[inline]
44846    pub fn storage_texel_buffer_descriptor_size(
44847        mut self,
44848        storage_texel_buffer_descriptor_size: usize,
44849    ) -> Self {
44850        self.storage_texel_buffer_descriptor_size = storage_texel_buffer_descriptor_size;
44851        self
44852    }
44853    #[inline]
44854    pub fn robust_storage_texel_buffer_descriptor_size(
44855        mut self,
44856        robust_storage_texel_buffer_descriptor_size: usize,
44857    ) -> Self {
44858        self.robust_storage_texel_buffer_descriptor_size =
44859            robust_storage_texel_buffer_descriptor_size;
44860        self
44861    }
44862    #[inline]
44863    pub fn uniform_buffer_descriptor_size(mut self, uniform_buffer_descriptor_size: usize) -> Self {
44864        self.uniform_buffer_descriptor_size = uniform_buffer_descriptor_size;
44865        self
44866    }
44867    #[inline]
44868    pub fn robust_uniform_buffer_descriptor_size(
44869        mut self,
44870        robust_uniform_buffer_descriptor_size: usize,
44871    ) -> Self {
44872        self.robust_uniform_buffer_descriptor_size = robust_uniform_buffer_descriptor_size;
44873        self
44874    }
44875    #[inline]
44876    pub fn storage_buffer_descriptor_size(mut self, storage_buffer_descriptor_size: usize) -> Self {
44877        self.storage_buffer_descriptor_size = storage_buffer_descriptor_size;
44878        self
44879    }
44880    #[inline]
44881    pub fn robust_storage_buffer_descriptor_size(
44882        mut self,
44883        robust_storage_buffer_descriptor_size: usize,
44884    ) -> Self {
44885        self.robust_storage_buffer_descriptor_size = robust_storage_buffer_descriptor_size;
44886        self
44887    }
44888    #[inline]
44889    pub fn input_attachment_descriptor_size(
44890        mut self,
44891        input_attachment_descriptor_size: usize,
44892    ) -> Self {
44893        self.input_attachment_descriptor_size = input_attachment_descriptor_size;
44894        self
44895    }
44896    #[inline]
44897    pub fn acceleration_structure_descriptor_size(
44898        mut self,
44899        acceleration_structure_descriptor_size: usize,
44900    ) -> Self {
44901        self.acceleration_structure_descriptor_size = acceleration_structure_descriptor_size;
44902        self
44903    }
44904    #[inline]
44905    pub fn max_sampler_descriptor_buffer_range(
44906        mut self,
44907        max_sampler_descriptor_buffer_range: DeviceSize,
44908    ) -> Self {
44909        self.max_sampler_descriptor_buffer_range = max_sampler_descriptor_buffer_range;
44910        self
44911    }
44912    #[inline]
44913    pub fn max_resource_descriptor_buffer_range(
44914        mut self,
44915        max_resource_descriptor_buffer_range: DeviceSize,
44916    ) -> Self {
44917        self.max_resource_descriptor_buffer_range = max_resource_descriptor_buffer_range;
44918        self
44919    }
44920    #[inline]
44921    pub fn sampler_descriptor_buffer_address_space_size(
44922        mut self,
44923        sampler_descriptor_buffer_address_space_size: DeviceSize,
44924    ) -> Self {
44925        self.sampler_descriptor_buffer_address_space_size =
44926            sampler_descriptor_buffer_address_space_size;
44927        self
44928    }
44929    #[inline]
44930    pub fn resource_descriptor_buffer_address_space_size(
44931        mut self,
44932        resource_descriptor_buffer_address_space_size: DeviceSize,
44933    ) -> Self {
44934        self.resource_descriptor_buffer_address_space_size =
44935            resource_descriptor_buffer_address_space_size;
44936        self
44937    }
44938    #[inline]
44939    pub fn descriptor_buffer_address_space_size(
44940        mut self,
44941        descriptor_buffer_address_space_size: DeviceSize,
44942    ) -> Self {
44943        self.descriptor_buffer_address_space_size = descriptor_buffer_address_space_size;
44944        self
44945    }
44946}
44947#[repr(C)]
44948#[cfg_attr(feature = "debug", derive(Debug))]
44949#[derive(Copy, Clone)]
44950#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT.html>"]
44951#[must_use]
44952pub struct PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'a> {
44953    pub s_type: StructureType,
44954    pub p_next: *mut c_void,
44955    pub combined_image_sampler_density_map_descriptor_size: usize,
44956    pub _marker: PhantomData<&'a ()>,
44957}
44958unsafe impl Send for PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'_> {}
44959unsafe impl Sync for PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'_> {}
44960impl ::core::default::Default for PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'_> {
44961    #[inline]
44962    fn default() -> Self {
44963        Self {
44964            s_type: Self::STRUCTURE_TYPE,
44965            p_next: ::core::ptr::null_mut(),
44966            combined_image_sampler_density_map_descriptor_size: usize::default(),
44967            _marker: PhantomData,
44968        }
44969    }
44970}
44971unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'a> {
44972    const STRUCTURE_TYPE: StructureType =
44973        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_DENSITY_MAP_PROPERTIES_EXT;
44974}
44975unsafe impl ExtendsPhysicalDeviceProperties2
44976    for PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'_>
44977{
44978}
44979impl<'a> PhysicalDeviceDescriptorBufferDensityMapPropertiesEXT<'a> {
44980    #[inline]
44981    pub fn combined_image_sampler_density_map_descriptor_size(
44982        mut self,
44983        combined_image_sampler_density_map_descriptor_size: usize,
44984    ) -> Self {
44985        self.combined_image_sampler_density_map_descriptor_size =
44986            combined_image_sampler_density_map_descriptor_size;
44987        self
44988    }
44989}
44990#[repr(C)]
44991#[cfg_attr(feature = "debug", derive(Debug))]
44992#[derive(Copy, Clone)]
44993#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorAddressInfoEXT.html>"]
44994#[must_use]
44995pub struct DescriptorAddressInfoEXT<'a> {
44996    pub s_type: StructureType,
44997    pub p_next: *mut c_void,
44998    pub address: DeviceAddress,
44999    pub range: DeviceSize,
45000    pub format: Format,
45001    pub _marker: PhantomData<&'a ()>,
45002}
45003unsafe impl Send for DescriptorAddressInfoEXT<'_> {}
45004unsafe impl Sync for DescriptorAddressInfoEXT<'_> {}
45005impl ::core::default::Default for DescriptorAddressInfoEXT<'_> {
45006    #[inline]
45007    fn default() -> Self {
45008        Self {
45009            s_type: Self::STRUCTURE_TYPE,
45010            p_next: ::core::ptr::null_mut(),
45011            address: DeviceAddress::default(),
45012            range: DeviceSize::default(),
45013            format: Format::default(),
45014            _marker: PhantomData,
45015        }
45016    }
45017}
45018unsafe impl<'a> TaggedStructure for DescriptorAddressInfoEXT<'a> {
45019    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_ADDRESS_INFO_EXT;
45020}
45021impl<'a> DescriptorAddressInfoEXT<'a> {
45022    #[inline]
45023    pub fn address(mut self, address: DeviceAddress) -> Self {
45024        self.address = address;
45025        self
45026    }
45027    #[inline]
45028    pub fn range(mut self, range: DeviceSize) -> Self {
45029        self.range = range;
45030        self
45031    }
45032    #[inline]
45033    pub fn format(mut self, format: Format) -> Self {
45034        self.format = format;
45035        self
45036    }
45037}
45038#[repr(C)]
45039#[cfg_attr(feature = "debug", derive(Debug))]
45040#[derive(Copy, Clone)]
45041#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorBufferBindingInfoEXT.html>"]
45042#[must_use]
45043pub struct DescriptorBufferBindingInfoEXT<'a> {
45044    pub s_type: StructureType,
45045    pub p_next: *mut c_void,
45046    pub address: DeviceAddress,
45047    pub usage: BufferUsageFlags,
45048    pub _marker: PhantomData<&'a ()>,
45049}
45050unsafe impl Send for DescriptorBufferBindingInfoEXT<'_> {}
45051unsafe impl Sync for DescriptorBufferBindingInfoEXT<'_> {}
45052impl ::core::default::Default for DescriptorBufferBindingInfoEXT<'_> {
45053    #[inline]
45054    fn default() -> Self {
45055        Self {
45056            s_type: Self::STRUCTURE_TYPE,
45057            p_next: ::core::ptr::null_mut(),
45058            address: DeviceAddress::default(),
45059            usage: BufferUsageFlags::default(),
45060            _marker: PhantomData,
45061        }
45062    }
45063}
45064unsafe impl<'a> TaggedStructure for DescriptorBufferBindingInfoEXT<'a> {
45065    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_BUFFER_BINDING_INFO_EXT;
45066}
45067pub unsafe trait ExtendsDescriptorBufferBindingInfoEXT {}
45068impl<'a> DescriptorBufferBindingInfoEXT<'a> {
45069    #[inline]
45070    pub fn address(mut self, address: DeviceAddress) -> Self {
45071        self.address = address;
45072        self
45073    }
45074    #[inline]
45075    pub fn usage(mut self, usage: BufferUsageFlags) -> Self {
45076        self.usage = usage;
45077        self
45078    }
45079    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
45080    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
45081    #[doc = r" valid extension structs can be pushed into the chain."]
45082    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
45083    #[doc = r" chain will look like `A -> D -> B -> C`."]
45084    pub fn push_next<T: ExtendsDescriptorBufferBindingInfoEXT + ?Sized>(
45085        mut self,
45086        next: &'a mut T,
45087    ) -> Self {
45088        unsafe {
45089            let next_ptr = <*mut T>::cast(next);
45090            let last_next = ptr_chain_iter(next).last().unwrap();
45091            (*last_next).p_next = self.p_next as _;
45092            self.p_next = next_ptr;
45093        }
45094        self
45095    }
45096}
45097#[repr(C)]
45098#[cfg_attr(feature = "debug", derive(Debug))]
45099#[derive(Copy, Clone)]
45100#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorBufferBindingPushDescriptorBufferHandleEXT.html>"]
45101#[must_use]
45102pub struct DescriptorBufferBindingPushDescriptorBufferHandleEXT<'a> {
45103    pub s_type: StructureType,
45104    pub p_next: *mut c_void,
45105    pub buffer: Buffer,
45106    pub _marker: PhantomData<&'a ()>,
45107}
45108unsafe impl Send for DescriptorBufferBindingPushDescriptorBufferHandleEXT<'_> {}
45109unsafe impl Sync for DescriptorBufferBindingPushDescriptorBufferHandleEXT<'_> {}
45110impl ::core::default::Default for DescriptorBufferBindingPushDescriptorBufferHandleEXT<'_> {
45111    #[inline]
45112    fn default() -> Self {
45113        Self {
45114            s_type: Self::STRUCTURE_TYPE,
45115            p_next: ::core::ptr::null_mut(),
45116            buffer: Buffer::default(),
45117            _marker: PhantomData,
45118        }
45119    }
45120}
45121unsafe impl<'a> TaggedStructure for DescriptorBufferBindingPushDescriptorBufferHandleEXT<'a> {
45122    const STRUCTURE_TYPE: StructureType =
45123        StructureType::DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT;
45124}
45125unsafe impl ExtendsDescriptorBufferBindingInfoEXT
45126    for DescriptorBufferBindingPushDescriptorBufferHandleEXT<'_>
45127{
45128}
45129impl<'a> DescriptorBufferBindingPushDescriptorBufferHandleEXT<'a> {
45130    #[inline]
45131    pub fn buffer(mut self, buffer: Buffer) -> Self {
45132        self.buffer = buffer;
45133        self
45134    }
45135}
45136#[repr(C)]
45137#[derive(Copy, Clone)]
45138#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorDataEXT.html>"]
45139pub union DescriptorDataEXT<'a> {
45140    pub p_sampler: *const Sampler,
45141    pub p_combined_image_sampler: *const DescriptorImageInfo,
45142    pub p_input_attachment_image: *const DescriptorImageInfo,
45143    pub p_sampled_image: *const DescriptorImageInfo,
45144    pub p_storage_image: *const DescriptorImageInfo,
45145    pub p_uniform_texel_buffer: *const DescriptorAddressInfoEXT<'a>,
45146    pub p_storage_texel_buffer: *const DescriptorAddressInfoEXT<'a>,
45147    pub p_uniform_buffer: *const DescriptorAddressInfoEXT<'a>,
45148    pub p_storage_buffer: *const DescriptorAddressInfoEXT<'a>,
45149    pub acceleration_structure: DeviceAddress,
45150}
45151impl<'a> ::core::default::Default for DescriptorDataEXT<'a> {
45152    #[inline]
45153    fn default() -> Self {
45154        unsafe { ::core::mem::zeroed() }
45155    }
45156}
45157#[repr(C)]
45158#[derive(Copy, Clone)]
45159#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorGetInfoEXT.html>"]
45160#[must_use]
45161pub struct DescriptorGetInfoEXT<'a> {
45162    pub s_type: StructureType,
45163    pub p_next: *const c_void,
45164    pub ty: DescriptorType,
45165    pub data: DescriptorDataEXT<'a>,
45166    pub _marker: PhantomData<&'a ()>,
45167}
45168unsafe impl Send for DescriptorGetInfoEXT<'_> {}
45169unsafe impl Sync for DescriptorGetInfoEXT<'_> {}
45170#[cfg(feature = "debug")]
45171impl fmt::Debug for DescriptorGetInfoEXT<'_> {
45172    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
45173        fmt.debug_struct("DescriptorGetInfoEXT")
45174            .field("s_type", &self.s_type)
45175            .field("p_next", &self.p_next)
45176            .field("ty", &self.ty)
45177            .field("data", &"union")
45178            .finish()
45179    }
45180}
45181impl ::core::default::Default for DescriptorGetInfoEXT<'_> {
45182    #[inline]
45183    fn default() -> Self {
45184        Self {
45185            s_type: Self::STRUCTURE_TYPE,
45186            p_next: ::core::ptr::null(),
45187            ty: DescriptorType::default(),
45188            data: DescriptorDataEXT::default(),
45189            _marker: PhantomData,
45190        }
45191    }
45192}
45193unsafe impl<'a> TaggedStructure for DescriptorGetInfoEXT<'a> {
45194    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_GET_INFO_EXT;
45195}
45196impl<'a> DescriptorGetInfoEXT<'a> {
45197    #[inline]
45198    pub fn ty(mut self, ty: DescriptorType) -> Self {
45199        self.ty = ty;
45200        self
45201    }
45202    #[inline]
45203    pub fn data(mut self, data: DescriptorDataEXT<'a>) -> Self {
45204        self.data = data;
45205        self
45206    }
45207}
45208#[repr(C)]
45209#[cfg_attr(feature = "debug", derive(Debug))]
45210#[derive(Copy, Clone)]
45211#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCaptureDescriptorDataInfoEXT.html>"]
45212#[must_use]
45213pub struct BufferCaptureDescriptorDataInfoEXT<'a> {
45214    pub s_type: StructureType,
45215    pub p_next: *const c_void,
45216    pub buffer: Buffer,
45217    pub _marker: PhantomData<&'a ()>,
45218}
45219unsafe impl Send for BufferCaptureDescriptorDataInfoEXT<'_> {}
45220unsafe impl Sync for BufferCaptureDescriptorDataInfoEXT<'_> {}
45221impl ::core::default::Default for BufferCaptureDescriptorDataInfoEXT<'_> {
45222    #[inline]
45223    fn default() -> Self {
45224        Self {
45225            s_type: Self::STRUCTURE_TYPE,
45226            p_next: ::core::ptr::null(),
45227            buffer: Buffer::default(),
45228            _marker: PhantomData,
45229        }
45230    }
45231}
45232unsafe impl<'a> TaggedStructure for BufferCaptureDescriptorDataInfoEXT<'a> {
45233    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT;
45234}
45235impl<'a> BufferCaptureDescriptorDataInfoEXT<'a> {
45236    #[inline]
45237    pub fn buffer(mut self, buffer: Buffer) -> Self {
45238        self.buffer = buffer;
45239        self
45240    }
45241}
45242#[repr(C)]
45243#[cfg_attr(feature = "debug", derive(Debug))]
45244#[derive(Copy, Clone)]
45245#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCaptureDescriptorDataInfoEXT.html>"]
45246#[must_use]
45247pub struct ImageCaptureDescriptorDataInfoEXT<'a> {
45248    pub s_type: StructureType,
45249    pub p_next: *const c_void,
45250    pub image: Image,
45251    pub _marker: PhantomData<&'a ()>,
45252}
45253unsafe impl Send for ImageCaptureDescriptorDataInfoEXT<'_> {}
45254unsafe impl Sync for ImageCaptureDescriptorDataInfoEXT<'_> {}
45255impl ::core::default::Default for ImageCaptureDescriptorDataInfoEXT<'_> {
45256    #[inline]
45257    fn default() -> Self {
45258        Self {
45259            s_type: Self::STRUCTURE_TYPE,
45260            p_next: ::core::ptr::null(),
45261            image: Image::default(),
45262            _marker: PhantomData,
45263        }
45264    }
45265}
45266unsafe impl<'a> TaggedStructure for ImageCaptureDescriptorDataInfoEXT<'a> {
45267    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT;
45268}
45269impl<'a> ImageCaptureDescriptorDataInfoEXT<'a> {
45270    #[inline]
45271    pub fn image(mut self, image: Image) -> Self {
45272        self.image = image;
45273        self
45274    }
45275}
45276#[repr(C)]
45277#[cfg_attr(feature = "debug", derive(Debug))]
45278#[derive(Copy, Clone)]
45279#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewCaptureDescriptorDataInfoEXT.html>"]
45280#[must_use]
45281pub struct ImageViewCaptureDescriptorDataInfoEXT<'a> {
45282    pub s_type: StructureType,
45283    pub p_next: *const c_void,
45284    pub image_view: ImageView,
45285    pub _marker: PhantomData<&'a ()>,
45286}
45287unsafe impl Send for ImageViewCaptureDescriptorDataInfoEXT<'_> {}
45288unsafe impl Sync for ImageViewCaptureDescriptorDataInfoEXT<'_> {}
45289impl ::core::default::Default for ImageViewCaptureDescriptorDataInfoEXT<'_> {
45290    #[inline]
45291    fn default() -> Self {
45292        Self {
45293            s_type: Self::STRUCTURE_TYPE,
45294            p_next: ::core::ptr::null(),
45295            image_view: ImageView::default(),
45296            _marker: PhantomData,
45297        }
45298    }
45299}
45300unsafe impl<'a> TaggedStructure for ImageViewCaptureDescriptorDataInfoEXT<'a> {
45301    const STRUCTURE_TYPE: StructureType =
45302        StructureType::IMAGE_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_EXT;
45303}
45304impl<'a> ImageViewCaptureDescriptorDataInfoEXT<'a> {
45305    #[inline]
45306    pub fn image_view(mut self, image_view: ImageView) -> Self {
45307        self.image_view = image_view;
45308        self
45309    }
45310}
45311#[repr(C)]
45312#[cfg_attr(feature = "debug", derive(Debug))]
45313#[derive(Copy, Clone)]
45314#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerCaptureDescriptorDataInfoEXT.html>"]
45315#[must_use]
45316pub struct SamplerCaptureDescriptorDataInfoEXT<'a> {
45317    pub s_type: StructureType,
45318    pub p_next: *const c_void,
45319    pub sampler: Sampler,
45320    pub _marker: PhantomData<&'a ()>,
45321}
45322unsafe impl Send for SamplerCaptureDescriptorDataInfoEXT<'_> {}
45323unsafe impl Sync for SamplerCaptureDescriptorDataInfoEXT<'_> {}
45324impl ::core::default::Default for SamplerCaptureDescriptorDataInfoEXT<'_> {
45325    #[inline]
45326    fn default() -> Self {
45327        Self {
45328            s_type: Self::STRUCTURE_TYPE,
45329            p_next: ::core::ptr::null(),
45330            sampler: Sampler::default(),
45331            _marker: PhantomData,
45332        }
45333    }
45334}
45335unsafe impl<'a> TaggedStructure for SamplerCaptureDescriptorDataInfoEXT<'a> {
45336    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_CAPTURE_DESCRIPTOR_DATA_INFO_EXT;
45337}
45338impl<'a> SamplerCaptureDescriptorDataInfoEXT<'a> {
45339    #[inline]
45340    pub fn sampler(mut self, sampler: Sampler) -> Self {
45341        self.sampler = sampler;
45342        self
45343    }
45344}
45345#[repr(C)]
45346#[cfg_attr(feature = "debug", derive(Debug))]
45347#[derive(Copy, Clone)]
45348#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureCaptureDescriptorDataInfoEXT.html>"]
45349#[must_use]
45350pub struct AccelerationStructureCaptureDescriptorDataInfoEXT<'a> {
45351    pub s_type: StructureType,
45352    pub p_next: *const c_void,
45353    pub acceleration_structure: AccelerationStructureKHR,
45354    pub acceleration_structure_nv: AccelerationStructureNV,
45355    pub _marker: PhantomData<&'a ()>,
45356}
45357unsafe impl Send for AccelerationStructureCaptureDescriptorDataInfoEXT<'_> {}
45358unsafe impl Sync for AccelerationStructureCaptureDescriptorDataInfoEXT<'_> {}
45359impl ::core::default::Default for AccelerationStructureCaptureDescriptorDataInfoEXT<'_> {
45360    #[inline]
45361    fn default() -> Self {
45362        Self {
45363            s_type: Self::STRUCTURE_TYPE,
45364            p_next: ::core::ptr::null(),
45365            acceleration_structure: AccelerationStructureKHR::default(),
45366            acceleration_structure_nv: AccelerationStructureNV::default(),
45367            _marker: PhantomData,
45368        }
45369    }
45370}
45371unsafe impl<'a> TaggedStructure for AccelerationStructureCaptureDescriptorDataInfoEXT<'a> {
45372    const STRUCTURE_TYPE: StructureType =
45373        StructureType::ACCELERATION_STRUCTURE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT;
45374}
45375impl<'a> AccelerationStructureCaptureDescriptorDataInfoEXT<'a> {
45376    #[inline]
45377    pub fn acceleration_structure(
45378        mut self,
45379        acceleration_structure: AccelerationStructureKHR,
45380    ) -> Self {
45381        self.acceleration_structure = acceleration_structure;
45382        self
45383    }
45384    #[inline]
45385    pub fn acceleration_structure_nv(
45386        mut self,
45387        acceleration_structure_nv: AccelerationStructureNV,
45388    ) -> Self {
45389        self.acceleration_structure_nv = acceleration_structure_nv;
45390        self
45391    }
45392}
45393#[repr(C)]
45394#[cfg_attr(feature = "debug", derive(Debug))]
45395#[derive(Copy, Clone)]
45396#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpaqueCaptureDescriptorDataCreateInfoEXT.html>"]
45397#[must_use]
45398pub struct OpaqueCaptureDescriptorDataCreateInfoEXT<'a> {
45399    pub s_type: StructureType,
45400    pub p_next: *const c_void,
45401    pub opaque_capture_descriptor_data: *const c_void,
45402    pub _marker: PhantomData<&'a ()>,
45403}
45404unsafe impl Send for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45405unsafe impl Sync for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45406impl ::core::default::Default for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {
45407    #[inline]
45408    fn default() -> Self {
45409        Self {
45410            s_type: Self::STRUCTURE_TYPE,
45411            p_next: ::core::ptr::null(),
45412            opaque_capture_descriptor_data: ::core::ptr::null(),
45413            _marker: PhantomData,
45414        }
45415    }
45416}
45417unsafe impl<'a> TaggedStructure for OpaqueCaptureDescriptorDataCreateInfoEXT<'a> {
45418    const STRUCTURE_TYPE: StructureType =
45419        StructureType::OPAQUE_CAPTURE_DESCRIPTOR_DATA_CREATE_INFO_EXT;
45420}
45421unsafe impl ExtendsBufferCreateInfo for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45422unsafe impl ExtendsImageCreateInfo for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45423unsafe impl ExtendsImageViewCreateInfo for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45424unsafe impl ExtendsSamplerCreateInfo for OpaqueCaptureDescriptorDataCreateInfoEXT<'_> {}
45425unsafe impl ExtendsAccelerationStructureCreateInfoKHR
45426    for OpaqueCaptureDescriptorDataCreateInfoEXT<'_>
45427{
45428}
45429unsafe impl ExtendsAccelerationStructureCreateInfoNV
45430    for OpaqueCaptureDescriptorDataCreateInfoEXT<'_>
45431{
45432}
45433impl<'a> OpaqueCaptureDescriptorDataCreateInfoEXT<'a> {
45434    #[inline]
45435    pub fn opaque_capture_descriptor_data(
45436        mut self,
45437        opaque_capture_descriptor_data: *const c_void,
45438    ) -> Self {
45439        self.opaque_capture_descriptor_data = opaque_capture_descriptor_data;
45440        self
45441    }
45442}
45443#[repr(C)]
45444#[cfg_attr(feature = "debug", derive(Debug))]
45445#[derive(Copy, Clone)]
45446#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderIntegerDotProductFeatures.html>"]
45447#[must_use]
45448pub struct PhysicalDeviceShaderIntegerDotProductFeatures<'a> {
45449    pub s_type: StructureType,
45450    pub p_next: *mut c_void,
45451    pub shader_integer_dot_product: Bool32,
45452    pub _marker: PhantomData<&'a ()>,
45453}
45454unsafe impl Send for PhysicalDeviceShaderIntegerDotProductFeatures<'_> {}
45455unsafe impl Sync for PhysicalDeviceShaderIntegerDotProductFeatures<'_> {}
45456impl ::core::default::Default for PhysicalDeviceShaderIntegerDotProductFeatures<'_> {
45457    #[inline]
45458    fn default() -> Self {
45459        Self {
45460            s_type: Self::STRUCTURE_TYPE,
45461            p_next: ::core::ptr::null_mut(),
45462            shader_integer_dot_product: Bool32::default(),
45463            _marker: PhantomData,
45464        }
45465    }
45466}
45467unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderIntegerDotProductFeatures<'a> {
45468    const STRUCTURE_TYPE: StructureType =
45469        StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES;
45470}
45471unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderIntegerDotProductFeatures<'_> {}
45472unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderIntegerDotProductFeatures<'_> {}
45473impl<'a> PhysicalDeviceShaderIntegerDotProductFeatures<'a> {
45474    #[inline]
45475    pub fn shader_integer_dot_product(mut self, shader_integer_dot_product: bool) -> Self {
45476        self.shader_integer_dot_product = shader_integer_dot_product.into();
45477        self
45478    }
45479}
45480#[repr(C)]
45481#[cfg_attr(feature = "debug", derive(Debug))]
45482#[derive(Copy, Clone)]
45483#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderIntegerDotProductProperties.html>"]
45484#[must_use]
45485pub struct PhysicalDeviceShaderIntegerDotProductProperties<'a> {
45486    pub s_type: StructureType,
45487    pub p_next: *mut c_void,
45488    pub integer_dot_product8_bit_unsigned_accelerated: Bool32,
45489    pub integer_dot_product8_bit_signed_accelerated: Bool32,
45490    pub integer_dot_product8_bit_mixed_signedness_accelerated: Bool32,
45491    pub integer_dot_product4x8_bit_packed_unsigned_accelerated: Bool32,
45492    pub integer_dot_product4x8_bit_packed_signed_accelerated: Bool32,
45493    pub integer_dot_product4x8_bit_packed_mixed_signedness_accelerated: Bool32,
45494    pub integer_dot_product16_bit_unsigned_accelerated: Bool32,
45495    pub integer_dot_product16_bit_signed_accelerated: Bool32,
45496    pub integer_dot_product16_bit_mixed_signedness_accelerated: Bool32,
45497    pub integer_dot_product32_bit_unsigned_accelerated: Bool32,
45498    pub integer_dot_product32_bit_signed_accelerated: Bool32,
45499    pub integer_dot_product32_bit_mixed_signedness_accelerated: Bool32,
45500    pub integer_dot_product64_bit_unsigned_accelerated: Bool32,
45501    pub integer_dot_product64_bit_signed_accelerated: Bool32,
45502    pub integer_dot_product64_bit_mixed_signedness_accelerated: Bool32,
45503    pub integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated: Bool32,
45504    pub integer_dot_product_accumulating_saturating8_bit_signed_accelerated: Bool32,
45505    pub integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated: Bool32,
45506    pub integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated: Bool32,
45507    pub integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated: Bool32,
45508    pub integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated:
45509        Bool32,
45510    pub integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated: Bool32,
45511    pub integer_dot_product_accumulating_saturating16_bit_signed_accelerated: Bool32,
45512    pub integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated: Bool32,
45513    pub integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated: Bool32,
45514    pub integer_dot_product_accumulating_saturating32_bit_signed_accelerated: Bool32,
45515    pub integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated: Bool32,
45516    pub integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated: Bool32,
45517    pub integer_dot_product_accumulating_saturating64_bit_signed_accelerated: Bool32,
45518    pub integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated: Bool32,
45519    pub _marker: PhantomData<&'a ()>,
45520}
45521unsafe impl Send for PhysicalDeviceShaderIntegerDotProductProperties<'_> {}
45522unsafe impl Sync for PhysicalDeviceShaderIntegerDotProductProperties<'_> {}
45523impl ::core::default::Default for PhysicalDeviceShaderIntegerDotProductProperties<'_> {
45524    #[inline]
45525    fn default() -> Self {
45526        Self { s_type : Self :: STRUCTURE_TYPE , p_next : :: core :: ptr :: null_mut () , integer_dot_product8_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product8_bit_signed_accelerated : Bool32 :: default () , integer_dot_product8_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_unsigned_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_signed_accelerated : Bool32 :: default () , integer_dot_product4x8_bit_packed_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product16_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product16_bit_signed_accelerated : Bool32 :: default () , integer_dot_product16_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product32_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product32_bit_signed_accelerated : Bool32 :: default () , integer_dot_product32_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product64_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product64_bit_signed_accelerated : Bool32 :: default () , integer_dot_product64_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_signed_accelerated : Bool32 :: default () , integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated : Bool32 :: default () , _marker : PhantomData , }
45527    }
45528}
45529unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderIntegerDotProductProperties<'a> {
45530    const STRUCTURE_TYPE: StructureType =
45531        StructureType::PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES;
45532}
45533unsafe impl ExtendsPhysicalDeviceProperties2
45534    for PhysicalDeviceShaderIntegerDotProductProperties<'_>
45535{
45536}
45537impl<'a> PhysicalDeviceShaderIntegerDotProductProperties<'a> {
45538    #[inline]
45539    pub fn integer_dot_product8_bit_unsigned_accelerated(
45540        mut self,
45541        integer_dot_product8_bit_unsigned_accelerated: bool,
45542    ) -> Self {
45543        self.integer_dot_product8_bit_unsigned_accelerated =
45544            integer_dot_product8_bit_unsigned_accelerated.into();
45545        self
45546    }
45547    #[inline]
45548    pub fn integer_dot_product8_bit_signed_accelerated(
45549        mut self,
45550        integer_dot_product8_bit_signed_accelerated: bool,
45551    ) -> Self {
45552        self.integer_dot_product8_bit_signed_accelerated =
45553            integer_dot_product8_bit_signed_accelerated.into();
45554        self
45555    }
45556    #[inline]
45557    pub fn integer_dot_product8_bit_mixed_signedness_accelerated(
45558        mut self,
45559        integer_dot_product8_bit_mixed_signedness_accelerated: bool,
45560    ) -> Self {
45561        self.integer_dot_product8_bit_mixed_signedness_accelerated =
45562            integer_dot_product8_bit_mixed_signedness_accelerated.into();
45563        self
45564    }
45565    #[inline]
45566    pub fn integer_dot_product4x8_bit_packed_unsigned_accelerated(
45567        mut self,
45568        integer_dot_product4x8_bit_packed_unsigned_accelerated: bool,
45569    ) -> Self {
45570        self.integer_dot_product4x8_bit_packed_unsigned_accelerated =
45571            integer_dot_product4x8_bit_packed_unsigned_accelerated.into();
45572        self
45573    }
45574    #[inline]
45575    pub fn integer_dot_product4x8_bit_packed_signed_accelerated(
45576        mut self,
45577        integer_dot_product4x8_bit_packed_signed_accelerated: bool,
45578    ) -> Self {
45579        self.integer_dot_product4x8_bit_packed_signed_accelerated =
45580            integer_dot_product4x8_bit_packed_signed_accelerated.into();
45581        self
45582    }
45583    #[inline]
45584    pub fn integer_dot_product4x8_bit_packed_mixed_signedness_accelerated(
45585        mut self,
45586        integer_dot_product4x8_bit_packed_mixed_signedness_accelerated: bool,
45587    ) -> Self {
45588        self.integer_dot_product4x8_bit_packed_mixed_signedness_accelerated =
45589            integer_dot_product4x8_bit_packed_mixed_signedness_accelerated.into();
45590        self
45591    }
45592    #[inline]
45593    pub fn integer_dot_product16_bit_unsigned_accelerated(
45594        mut self,
45595        integer_dot_product16_bit_unsigned_accelerated: bool,
45596    ) -> Self {
45597        self.integer_dot_product16_bit_unsigned_accelerated =
45598            integer_dot_product16_bit_unsigned_accelerated.into();
45599        self
45600    }
45601    #[inline]
45602    pub fn integer_dot_product16_bit_signed_accelerated(
45603        mut self,
45604        integer_dot_product16_bit_signed_accelerated: bool,
45605    ) -> Self {
45606        self.integer_dot_product16_bit_signed_accelerated =
45607            integer_dot_product16_bit_signed_accelerated.into();
45608        self
45609    }
45610    #[inline]
45611    pub fn integer_dot_product16_bit_mixed_signedness_accelerated(
45612        mut self,
45613        integer_dot_product16_bit_mixed_signedness_accelerated: bool,
45614    ) -> Self {
45615        self.integer_dot_product16_bit_mixed_signedness_accelerated =
45616            integer_dot_product16_bit_mixed_signedness_accelerated.into();
45617        self
45618    }
45619    #[inline]
45620    pub fn integer_dot_product32_bit_unsigned_accelerated(
45621        mut self,
45622        integer_dot_product32_bit_unsigned_accelerated: bool,
45623    ) -> Self {
45624        self.integer_dot_product32_bit_unsigned_accelerated =
45625            integer_dot_product32_bit_unsigned_accelerated.into();
45626        self
45627    }
45628    #[inline]
45629    pub fn integer_dot_product32_bit_signed_accelerated(
45630        mut self,
45631        integer_dot_product32_bit_signed_accelerated: bool,
45632    ) -> Self {
45633        self.integer_dot_product32_bit_signed_accelerated =
45634            integer_dot_product32_bit_signed_accelerated.into();
45635        self
45636    }
45637    #[inline]
45638    pub fn integer_dot_product32_bit_mixed_signedness_accelerated(
45639        mut self,
45640        integer_dot_product32_bit_mixed_signedness_accelerated: bool,
45641    ) -> Self {
45642        self.integer_dot_product32_bit_mixed_signedness_accelerated =
45643            integer_dot_product32_bit_mixed_signedness_accelerated.into();
45644        self
45645    }
45646    #[inline]
45647    pub fn integer_dot_product64_bit_unsigned_accelerated(
45648        mut self,
45649        integer_dot_product64_bit_unsigned_accelerated: bool,
45650    ) -> Self {
45651        self.integer_dot_product64_bit_unsigned_accelerated =
45652            integer_dot_product64_bit_unsigned_accelerated.into();
45653        self
45654    }
45655    #[inline]
45656    pub fn integer_dot_product64_bit_signed_accelerated(
45657        mut self,
45658        integer_dot_product64_bit_signed_accelerated: bool,
45659    ) -> Self {
45660        self.integer_dot_product64_bit_signed_accelerated =
45661            integer_dot_product64_bit_signed_accelerated.into();
45662        self
45663    }
45664    #[inline]
45665    pub fn integer_dot_product64_bit_mixed_signedness_accelerated(
45666        mut self,
45667        integer_dot_product64_bit_mixed_signedness_accelerated: bool,
45668    ) -> Self {
45669        self.integer_dot_product64_bit_mixed_signedness_accelerated =
45670            integer_dot_product64_bit_mixed_signedness_accelerated.into();
45671        self
45672    }
45673    #[inline]
45674    pub fn integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated(
45675        mut self,
45676        integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated: bool,
45677    ) -> Self {
45678        self.integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated =
45679            integer_dot_product_accumulating_saturating8_bit_unsigned_accelerated.into();
45680        self
45681    }
45682    #[inline]
45683    pub fn integer_dot_product_accumulating_saturating8_bit_signed_accelerated(
45684        mut self,
45685        integer_dot_product_accumulating_saturating8_bit_signed_accelerated: bool,
45686    ) -> Self {
45687        self.integer_dot_product_accumulating_saturating8_bit_signed_accelerated =
45688            integer_dot_product_accumulating_saturating8_bit_signed_accelerated.into();
45689        self
45690    }
45691    #[inline]
45692    pub fn integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated(
45693        mut self,
45694        integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated: bool,
45695    ) -> Self {
45696        self.integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated =
45697            integer_dot_product_accumulating_saturating8_bit_mixed_signedness_accelerated.into();
45698        self
45699    }
45700    #[inline]
45701    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated(
45702        mut self,
45703        integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated: bool,
45704    ) -> Self {
45705        self.integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated =
45706            integer_dot_product_accumulating_saturating4x8_bit_packed_unsigned_accelerated.into();
45707        self
45708    }
45709    #[inline]
45710    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated(
45711        mut self,
45712        integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated: bool,
45713    ) -> Self {
45714        self.integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated =
45715            integer_dot_product_accumulating_saturating4x8_bit_packed_signed_accelerated.into();
45716        self
45717    }
45718    #[inline]
45719    pub fn integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated(
45720        mut self,
45721        integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated : bool,
45722    ) -> Self {
45723        self . integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated = integer_dot_product_accumulating_saturating4x8_bit_packed_mixed_signedness_accelerated . into () ;
45724        self
45725    }
45726    #[inline]
45727    pub fn integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated(
45728        mut self,
45729        integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated: bool,
45730    ) -> Self {
45731        self.integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated =
45732            integer_dot_product_accumulating_saturating16_bit_unsigned_accelerated.into();
45733        self
45734    }
45735    #[inline]
45736    pub fn integer_dot_product_accumulating_saturating16_bit_signed_accelerated(
45737        mut self,
45738        integer_dot_product_accumulating_saturating16_bit_signed_accelerated: bool,
45739    ) -> Self {
45740        self.integer_dot_product_accumulating_saturating16_bit_signed_accelerated =
45741            integer_dot_product_accumulating_saturating16_bit_signed_accelerated.into();
45742        self
45743    }
45744    #[inline]
45745    pub fn integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated(
45746        mut self,
45747        integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated: bool,
45748    ) -> Self {
45749        self.integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated =
45750            integer_dot_product_accumulating_saturating16_bit_mixed_signedness_accelerated.into();
45751        self
45752    }
45753    #[inline]
45754    pub fn integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated(
45755        mut self,
45756        integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated: bool,
45757    ) -> Self {
45758        self.integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated =
45759            integer_dot_product_accumulating_saturating32_bit_unsigned_accelerated.into();
45760        self
45761    }
45762    #[inline]
45763    pub fn integer_dot_product_accumulating_saturating32_bit_signed_accelerated(
45764        mut self,
45765        integer_dot_product_accumulating_saturating32_bit_signed_accelerated: bool,
45766    ) -> Self {
45767        self.integer_dot_product_accumulating_saturating32_bit_signed_accelerated =
45768            integer_dot_product_accumulating_saturating32_bit_signed_accelerated.into();
45769        self
45770    }
45771    #[inline]
45772    pub fn integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated(
45773        mut self,
45774        integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated: bool,
45775    ) -> Self {
45776        self.integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated =
45777            integer_dot_product_accumulating_saturating32_bit_mixed_signedness_accelerated.into();
45778        self
45779    }
45780    #[inline]
45781    pub fn integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated(
45782        mut self,
45783        integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated: bool,
45784    ) -> Self {
45785        self.integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated =
45786            integer_dot_product_accumulating_saturating64_bit_unsigned_accelerated.into();
45787        self
45788    }
45789    #[inline]
45790    pub fn integer_dot_product_accumulating_saturating64_bit_signed_accelerated(
45791        mut self,
45792        integer_dot_product_accumulating_saturating64_bit_signed_accelerated: bool,
45793    ) -> Self {
45794        self.integer_dot_product_accumulating_saturating64_bit_signed_accelerated =
45795            integer_dot_product_accumulating_saturating64_bit_signed_accelerated.into();
45796        self
45797    }
45798    #[inline]
45799    pub fn integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated(
45800        mut self,
45801        integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated: bool,
45802    ) -> Self {
45803        self.integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated =
45804            integer_dot_product_accumulating_saturating64_bit_mixed_signedness_accelerated.into();
45805        self
45806    }
45807}
45808#[repr(C)]
45809#[cfg_attr(feature = "debug", derive(Debug))]
45810#[derive(Copy, Clone)]
45811#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDrmPropertiesEXT.html>"]
45812#[must_use]
45813pub struct PhysicalDeviceDrmPropertiesEXT<'a> {
45814    pub s_type: StructureType,
45815    pub p_next: *mut c_void,
45816    pub has_primary: Bool32,
45817    pub has_render: Bool32,
45818    pub primary_major: i64,
45819    pub primary_minor: i64,
45820    pub render_major: i64,
45821    pub render_minor: i64,
45822    pub _marker: PhantomData<&'a ()>,
45823}
45824unsafe impl Send for PhysicalDeviceDrmPropertiesEXT<'_> {}
45825unsafe impl Sync for PhysicalDeviceDrmPropertiesEXT<'_> {}
45826impl ::core::default::Default for PhysicalDeviceDrmPropertiesEXT<'_> {
45827    #[inline]
45828    fn default() -> Self {
45829        Self {
45830            s_type: Self::STRUCTURE_TYPE,
45831            p_next: ::core::ptr::null_mut(),
45832            has_primary: Bool32::default(),
45833            has_render: Bool32::default(),
45834            primary_major: i64::default(),
45835            primary_minor: i64::default(),
45836            render_major: i64::default(),
45837            render_minor: i64::default(),
45838            _marker: PhantomData,
45839        }
45840    }
45841}
45842unsafe impl<'a> TaggedStructure for PhysicalDeviceDrmPropertiesEXT<'a> {
45843    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_DRM_PROPERTIES_EXT;
45844}
45845unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceDrmPropertiesEXT<'_> {}
45846impl<'a> PhysicalDeviceDrmPropertiesEXT<'a> {
45847    #[inline]
45848    pub fn has_primary(mut self, has_primary: bool) -> Self {
45849        self.has_primary = has_primary.into();
45850        self
45851    }
45852    #[inline]
45853    pub fn has_render(mut self, has_render: bool) -> Self {
45854        self.has_render = has_render.into();
45855        self
45856    }
45857    #[inline]
45858    pub fn primary_major(mut self, primary_major: i64) -> Self {
45859        self.primary_major = primary_major;
45860        self
45861    }
45862    #[inline]
45863    pub fn primary_minor(mut self, primary_minor: i64) -> Self {
45864        self.primary_minor = primary_minor;
45865        self
45866    }
45867    #[inline]
45868    pub fn render_major(mut self, render_major: i64) -> Self {
45869        self.render_major = render_major;
45870        self
45871    }
45872    #[inline]
45873    pub fn render_minor(mut self, render_minor: i64) -> Self {
45874        self.render_minor = render_minor;
45875        self
45876    }
45877}
45878#[repr(C)]
45879#[cfg_attr(feature = "debug", derive(Debug))]
45880#[derive(Copy, Clone)]
45881#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.html>"]
45882#[must_use]
45883pub struct PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'a> {
45884    pub s_type: StructureType,
45885    pub p_next: *mut c_void,
45886    pub fragment_shader_barycentric: Bool32,
45887    pub _marker: PhantomData<&'a ()>,
45888}
45889unsafe impl Send for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'_> {}
45890unsafe impl Sync for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'_> {}
45891impl ::core::default::Default for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'_> {
45892    #[inline]
45893    fn default() -> Self {
45894        Self {
45895            s_type: Self::STRUCTURE_TYPE,
45896            p_next: ::core::ptr::null_mut(),
45897            fragment_shader_barycentric: Bool32::default(),
45898            _marker: PhantomData,
45899        }
45900    }
45901}
45902unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'a> {
45903    const STRUCTURE_TYPE: StructureType =
45904        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_KHR;
45905}
45906unsafe impl ExtendsPhysicalDeviceFeatures2
45907    for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'_>
45908{
45909}
45910unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'_> {}
45911impl<'a> PhysicalDeviceFragmentShaderBarycentricFeaturesKHR<'a> {
45912    #[inline]
45913    pub fn fragment_shader_barycentric(mut self, fragment_shader_barycentric: bool) -> Self {
45914        self.fragment_shader_barycentric = fragment_shader_barycentric.into();
45915        self
45916    }
45917}
45918#[repr(C)]
45919#[cfg_attr(feature = "debug", derive(Debug))]
45920#[derive(Copy, Clone)]
45921#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFragmentShaderBarycentricPropertiesKHR.html>"]
45922#[must_use]
45923pub struct PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'a> {
45924    pub s_type: StructureType,
45925    pub p_next: *mut c_void,
45926    pub tri_strip_vertex_order_independent_of_provoking_vertex: Bool32,
45927    pub _marker: PhantomData<&'a ()>,
45928}
45929unsafe impl Send for PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'_> {}
45930unsafe impl Sync for PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'_> {}
45931impl ::core::default::Default for PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'_> {
45932    #[inline]
45933    fn default() -> Self {
45934        Self {
45935            s_type: Self::STRUCTURE_TYPE,
45936            p_next: ::core::ptr::null_mut(),
45937            tri_strip_vertex_order_independent_of_provoking_vertex: Bool32::default(),
45938            _marker: PhantomData,
45939        }
45940    }
45941}
45942unsafe impl<'a> TaggedStructure for PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'a> {
45943    const STRUCTURE_TYPE: StructureType =
45944        StructureType::PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_PROPERTIES_KHR;
45945}
45946unsafe impl ExtendsPhysicalDeviceProperties2
45947    for PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'_>
45948{
45949}
45950impl<'a> PhysicalDeviceFragmentShaderBarycentricPropertiesKHR<'a> {
45951    #[inline]
45952    pub fn tri_strip_vertex_order_independent_of_provoking_vertex(
45953        mut self,
45954        tri_strip_vertex_order_independent_of_provoking_vertex: bool,
45955    ) -> Self {
45956        self.tri_strip_vertex_order_independent_of_provoking_vertex =
45957            tri_strip_vertex_order_independent_of_provoking_vertex.into();
45958        self
45959    }
45960}
45961#[repr(C)]
45962#[cfg_attr(feature = "debug", derive(Debug))]
45963#[derive(Copy, Clone)]
45964#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingMotionBlurFeaturesNV.html>"]
45965#[must_use]
45966pub struct PhysicalDeviceRayTracingMotionBlurFeaturesNV<'a> {
45967    pub s_type: StructureType,
45968    pub p_next: *mut c_void,
45969    pub ray_tracing_motion_blur: Bool32,
45970    pub ray_tracing_motion_blur_pipeline_trace_rays_indirect: Bool32,
45971    pub _marker: PhantomData<&'a ()>,
45972}
45973unsafe impl Send for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'_> {}
45974unsafe impl Sync for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'_> {}
45975impl ::core::default::Default for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'_> {
45976    #[inline]
45977    fn default() -> Self {
45978        Self {
45979            s_type: Self::STRUCTURE_TYPE,
45980            p_next: ::core::ptr::null_mut(),
45981            ray_tracing_motion_blur: Bool32::default(),
45982            ray_tracing_motion_blur_pipeline_trace_rays_indirect: Bool32::default(),
45983            _marker: PhantomData,
45984        }
45985    }
45986}
45987unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'a> {
45988    const STRUCTURE_TYPE: StructureType =
45989        StructureType::PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV;
45990}
45991unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'_> {}
45992unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingMotionBlurFeaturesNV<'_> {}
45993impl<'a> PhysicalDeviceRayTracingMotionBlurFeaturesNV<'a> {
45994    #[inline]
45995    pub fn ray_tracing_motion_blur(mut self, ray_tracing_motion_blur: bool) -> Self {
45996        self.ray_tracing_motion_blur = ray_tracing_motion_blur.into();
45997        self
45998    }
45999    #[inline]
46000    pub fn ray_tracing_motion_blur_pipeline_trace_rays_indirect(
46001        mut self,
46002        ray_tracing_motion_blur_pipeline_trace_rays_indirect: bool,
46003    ) -> Self {
46004        self.ray_tracing_motion_blur_pipeline_trace_rays_indirect =
46005            ray_tracing_motion_blur_pipeline_trace_rays_indirect.into();
46006        self
46007    }
46008}
46009#[repr(C)]
46010#[cfg_attr(feature = "debug", derive(Debug))]
46011#[derive(Copy, Clone)]
46012#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingValidationFeaturesNV.html>"]
46013#[must_use]
46014pub struct PhysicalDeviceRayTracingValidationFeaturesNV<'a> {
46015    pub s_type: StructureType,
46016    pub p_next: *mut c_void,
46017    pub ray_tracing_validation: Bool32,
46018    pub _marker: PhantomData<&'a ()>,
46019}
46020unsafe impl Send for PhysicalDeviceRayTracingValidationFeaturesNV<'_> {}
46021unsafe impl Sync for PhysicalDeviceRayTracingValidationFeaturesNV<'_> {}
46022impl ::core::default::Default for PhysicalDeviceRayTracingValidationFeaturesNV<'_> {
46023    #[inline]
46024    fn default() -> Self {
46025        Self {
46026            s_type: Self::STRUCTURE_TYPE,
46027            p_next: ::core::ptr::null_mut(),
46028            ray_tracing_validation: Bool32::default(),
46029            _marker: PhantomData,
46030        }
46031    }
46032}
46033unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingValidationFeaturesNV<'a> {
46034    const STRUCTURE_TYPE: StructureType =
46035        StructureType::PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV;
46036}
46037unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRayTracingValidationFeaturesNV<'_> {}
46038unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingValidationFeaturesNV<'_> {}
46039impl<'a> PhysicalDeviceRayTracingValidationFeaturesNV<'a> {
46040    #[inline]
46041    pub fn ray_tracing_validation(mut self, ray_tracing_validation: bool) -> Self {
46042        self.ray_tracing_validation = ray_tracing_validation.into();
46043        self
46044    }
46045}
46046#[repr(C)]
46047#[derive(Copy, Clone)]
46048#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureGeometryMotionTrianglesDataNV.html>"]
46049#[must_use]
46050pub struct AccelerationStructureGeometryMotionTrianglesDataNV<'a> {
46051    pub s_type: StructureType,
46052    pub p_next: *const c_void,
46053    pub vertex_data: DeviceOrHostAddressConstKHR,
46054    pub _marker: PhantomData<&'a ()>,
46055}
46056unsafe impl Send for AccelerationStructureGeometryMotionTrianglesDataNV<'_> {}
46057unsafe impl Sync for AccelerationStructureGeometryMotionTrianglesDataNV<'_> {}
46058#[cfg(feature = "debug")]
46059impl fmt::Debug for AccelerationStructureGeometryMotionTrianglesDataNV<'_> {
46060    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
46061        fmt.debug_struct("AccelerationStructureGeometryMotionTrianglesDataNV")
46062            .field("s_type", &self.s_type)
46063            .field("p_next", &self.p_next)
46064            .field("vertex_data", &"union")
46065            .finish()
46066    }
46067}
46068impl ::core::default::Default for AccelerationStructureGeometryMotionTrianglesDataNV<'_> {
46069    #[inline]
46070    fn default() -> Self {
46071        Self {
46072            s_type: Self::STRUCTURE_TYPE,
46073            p_next: ::core::ptr::null(),
46074            vertex_data: DeviceOrHostAddressConstKHR::default(),
46075            _marker: PhantomData,
46076        }
46077    }
46078}
46079unsafe impl<'a> TaggedStructure for AccelerationStructureGeometryMotionTrianglesDataNV<'a> {
46080    const STRUCTURE_TYPE: StructureType =
46081        StructureType::ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV;
46082}
46083unsafe impl ExtendsAccelerationStructureGeometryTrianglesDataKHR
46084    for AccelerationStructureGeometryMotionTrianglesDataNV<'_>
46085{
46086}
46087impl<'a> AccelerationStructureGeometryMotionTrianglesDataNV<'a> {
46088    #[inline]
46089    pub fn vertex_data(mut self, vertex_data: DeviceOrHostAddressConstKHR) -> Self {
46090        self.vertex_data = vertex_data;
46091        self
46092    }
46093}
46094#[repr(C)]
46095#[cfg_attr(feature = "debug", derive(Debug))]
46096#[derive(Copy, Clone)]
46097#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMotionInfoNV.html>"]
46098#[must_use]
46099pub struct AccelerationStructureMotionInfoNV<'a> {
46100    pub s_type: StructureType,
46101    pub p_next: *const c_void,
46102    pub max_instances: u32,
46103    pub flags: AccelerationStructureMotionInfoFlagsNV,
46104    pub _marker: PhantomData<&'a ()>,
46105}
46106unsafe impl Send for AccelerationStructureMotionInfoNV<'_> {}
46107unsafe impl Sync for AccelerationStructureMotionInfoNV<'_> {}
46108impl ::core::default::Default for AccelerationStructureMotionInfoNV<'_> {
46109    #[inline]
46110    fn default() -> Self {
46111        Self {
46112            s_type: Self::STRUCTURE_TYPE,
46113            p_next: ::core::ptr::null(),
46114            max_instances: u32::default(),
46115            flags: AccelerationStructureMotionInfoFlagsNV::default(),
46116            _marker: PhantomData,
46117        }
46118    }
46119}
46120unsafe impl<'a> TaggedStructure for AccelerationStructureMotionInfoNV<'a> {
46121    const STRUCTURE_TYPE: StructureType = StructureType::ACCELERATION_STRUCTURE_MOTION_INFO_NV;
46122}
46123unsafe impl ExtendsAccelerationStructureCreateInfoKHR for AccelerationStructureMotionInfoNV<'_> {}
46124impl<'a> AccelerationStructureMotionInfoNV<'a> {
46125    #[inline]
46126    pub fn max_instances(mut self, max_instances: u32) -> Self {
46127        self.max_instances = max_instances;
46128        self
46129    }
46130    #[inline]
46131    pub fn flags(mut self, flags: AccelerationStructureMotionInfoFlagsNV) -> Self {
46132        self.flags = flags;
46133        self
46134    }
46135}
46136#[repr(C)]
46137#[cfg_attr(feature = "debug", derive(Debug))]
46138#[derive(Copy, Clone, Default)]
46139#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSRTDataNV.html>"]
46140#[must_use]
46141pub struct SRTDataNV {
46142    pub sx: f32,
46143    pub a: f32,
46144    pub b: f32,
46145    pub pvx: f32,
46146    pub sy: f32,
46147    pub c: f32,
46148    pub pvy: f32,
46149    pub sz: f32,
46150    pub pvz: f32,
46151    pub qx: f32,
46152    pub qy: f32,
46153    pub qz: f32,
46154    pub qw: f32,
46155    pub tx: f32,
46156    pub ty: f32,
46157    pub tz: f32,
46158}
46159impl SRTDataNV {
46160    #[inline]
46161    pub fn sx(mut self, sx: f32) -> Self {
46162        self.sx = sx;
46163        self
46164    }
46165    #[inline]
46166    pub fn a(mut self, a: f32) -> Self {
46167        self.a = a;
46168        self
46169    }
46170    #[inline]
46171    pub fn b(mut self, b: f32) -> Self {
46172        self.b = b;
46173        self
46174    }
46175    #[inline]
46176    pub fn pvx(mut self, pvx: f32) -> Self {
46177        self.pvx = pvx;
46178        self
46179    }
46180    #[inline]
46181    pub fn sy(mut self, sy: f32) -> Self {
46182        self.sy = sy;
46183        self
46184    }
46185    #[inline]
46186    pub fn c(mut self, c: f32) -> Self {
46187        self.c = c;
46188        self
46189    }
46190    #[inline]
46191    pub fn pvy(mut self, pvy: f32) -> Self {
46192        self.pvy = pvy;
46193        self
46194    }
46195    #[inline]
46196    pub fn sz(mut self, sz: f32) -> Self {
46197        self.sz = sz;
46198        self
46199    }
46200    #[inline]
46201    pub fn pvz(mut self, pvz: f32) -> Self {
46202        self.pvz = pvz;
46203        self
46204    }
46205    #[inline]
46206    pub fn qx(mut self, qx: f32) -> Self {
46207        self.qx = qx;
46208        self
46209    }
46210    #[inline]
46211    pub fn qy(mut self, qy: f32) -> Self {
46212        self.qy = qy;
46213        self
46214    }
46215    #[inline]
46216    pub fn qz(mut self, qz: f32) -> Self {
46217        self.qz = qz;
46218        self
46219    }
46220    #[inline]
46221    pub fn qw(mut self, qw: f32) -> Self {
46222        self.qw = qw;
46223        self
46224    }
46225    #[inline]
46226    pub fn tx(mut self, tx: f32) -> Self {
46227        self.tx = tx;
46228        self
46229    }
46230    #[inline]
46231    pub fn ty(mut self, ty: f32) -> Self {
46232        self.ty = ty;
46233        self
46234    }
46235    #[inline]
46236    pub fn tz(mut self, tz: f32) -> Self {
46237        self.tz = tz;
46238        self
46239    }
46240}
46241#[repr(C)]
46242#[derive(Copy, Clone)]
46243#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureSRTMotionInstanceNV.html>"]
46244pub struct AccelerationStructureSRTMotionInstanceNV {
46245    pub transform_t0: SRTDataNV,
46246    pub transform_t1: SRTDataNV,
46247    #[doc = r" Use [`Packed24_8::new(instance_custom_index, mask)`][Packed24_8::new()] to construct this field"]
46248    pub instance_custom_index_and_mask: Packed24_8,
46249    #[doc = r" Use [`Packed24_8::new(instance_shader_binding_table_record_offset, flags)`][Packed24_8::new()] to construct this field"]
46250    pub instance_shader_binding_table_record_offset_and_flags: Packed24_8,
46251    pub acceleration_structure_reference: AccelerationStructureReferenceKHR,
46252}
46253#[repr(C)]
46254#[derive(Copy, Clone)]
46255#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/AccelerationStructureMatrixMotionInstanceNV.html>"]
46256pub struct AccelerationStructureMatrixMotionInstanceNV {
46257    pub transform_t0: TransformMatrixKHR,
46258    pub transform_t1: TransformMatrixKHR,
46259    #[doc = r" Use [`Packed24_8::new(instance_custom_index, mask)`][Packed24_8::new()] to construct this field"]
46260    pub instance_custom_index_and_mask: Packed24_8,
46261    #[doc = r" Use [`Packed24_8::new(instance_shader_binding_table_record_offset, flags)`][Packed24_8::new()] to construct this field"]
46262    pub instance_shader_binding_table_record_offset_and_flags: Packed24_8,
46263    pub acceleration_structure_reference: AccelerationStructureReferenceKHR,
46264}
46265#[repr(C)]
46266#[derive(Copy, Clone)]
46267#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMotionInstanceDataNV.html>"]
46268pub union AccelerationStructureMotionInstanceDataNV {
46269    pub static_instance: AccelerationStructureInstanceKHR,
46270    pub matrix_motion_instance: AccelerationStructureMatrixMotionInstanceNV,
46271    pub srt_motion_instance: AccelerationStructureSRTMotionInstanceNV,
46272}
46273impl ::core::default::Default for AccelerationStructureMotionInstanceDataNV {
46274    #[inline]
46275    fn default() -> Self {
46276        unsafe { ::core::mem::zeroed() }
46277    }
46278}
46279#[repr(C)]
46280#[derive(Copy, Clone, Default)]
46281#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureMotionInstanceNV.html>"]
46282#[must_use]
46283pub struct AccelerationStructureMotionInstanceNV {
46284    pub ty: AccelerationStructureMotionInstanceTypeNV,
46285    pub flags: AccelerationStructureMotionInstanceFlagsNV,
46286    pub data: AccelerationStructureMotionInstanceDataNV,
46287}
46288#[cfg(feature = "debug")]
46289impl fmt::Debug for AccelerationStructureMotionInstanceNV {
46290    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
46291        fmt.debug_struct("AccelerationStructureMotionInstanceNV")
46292            .field("ty", &self.ty)
46293            .field("flags", &self.flags)
46294            .field("data", &"union")
46295            .finish()
46296    }
46297}
46298impl AccelerationStructureMotionInstanceNV {
46299    #[inline]
46300    pub fn ty(mut self, ty: AccelerationStructureMotionInstanceTypeNV) -> Self {
46301        self.ty = ty;
46302        self
46303    }
46304    #[inline]
46305    pub fn flags(mut self, flags: AccelerationStructureMotionInstanceFlagsNV) -> Self {
46306        self.flags = flags;
46307        self
46308    }
46309    #[inline]
46310    pub fn data(mut self, data: AccelerationStructureMotionInstanceDataNV) -> Self {
46311        self.data = data;
46312        self
46313    }
46314}
46315#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRemoteAddressNV.html>"]
46316pub type RemoteAddressNV = c_void;
46317#[repr(C)]
46318#[cfg_attr(feature = "debug", derive(Debug))]
46319#[derive(Copy, Clone)]
46320#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryGetRemoteAddressInfoNV.html>"]
46321#[must_use]
46322pub struct MemoryGetRemoteAddressInfoNV<'a> {
46323    pub s_type: StructureType,
46324    pub p_next: *const c_void,
46325    pub memory: DeviceMemory,
46326    pub handle_type: ExternalMemoryHandleTypeFlags,
46327    pub _marker: PhantomData<&'a ()>,
46328}
46329unsafe impl Send for MemoryGetRemoteAddressInfoNV<'_> {}
46330unsafe impl Sync for MemoryGetRemoteAddressInfoNV<'_> {}
46331impl ::core::default::Default for MemoryGetRemoteAddressInfoNV<'_> {
46332    #[inline]
46333    fn default() -> Self {
46334        Self {
46335            s_type: Self::STRUCTURE_TYPE,
46336            p_next: ::core::ptr::null(),
46337            memory: DeviceMemory::default(),
46338            handle_type: ExternalMemoryHandleTypeFlags::default(),
46339            _marker: PhantomData,
46340        }
46341    }
46342}
46343unsafe impl<'a> TaggedStructure for MemoryGetRemoteAddressInfoNV<'a> {
46344    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_GET_REMOTE_ADDRESS_INFO_NV;
46345}
46346impl<'a> MemoryGetRemoteAddressInfoNV<'a> {
46347    #[inline]
46348    pub fn memory(mut self, memory: DeviceMemory) -> Self {
46349        self.memory = memory;
46350        self
46351    }
46352    #[inline]
46353    pub fn handle_type(mut self, handle_type: ExternalMemoryHandleTypeFlags) -> Self {
46354        self.handle_type = handle_type;
46355        self
46356    }
46357}
46358#[repr(C)]
46359#[cfg_attr(feature = "debug", derive(Debug))]
46360#[derive(Copy, Clone)]
46361#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMemoryBufferCollectionFUCHSIA.html>"]
46362#[must_use]
46363pub struct ImportMemoryBufferCollectionFUCHSIA<'a> {
46364    pub s_type: StructureType,
46365    pub p_next: *const c_void,
46366    pub collection: BufferCollectionFUCHSIA,
46367    pub index: u32,
46368    pub _marker: PhantomData<&'a ()>,
46369}
46370unsafe impl Send for ImportMemoryBufferCollectionFUCHSIA<'_> {}
46371unsafe impl Sync for ImportMemoryBufferCollectionFUCHSIA<'_> {}
46372impl ::core::default::Default for ImportMemoryBufferCollectionFUCHSIA<'_> {
46373    #[inline]
46374    fn default() -> Self {
46375        Self {
46376            s_type: Self::STRUCTURE_TYPE,
46377            p_next: ::core::ptr::null(),
46378            collection: BufferCollectionFUCHSIA::default(),
46379            index: u32::default(),
46380            _marker: PhantomData,
46381        }
46382    }
46383}
46384unsafe impl<'a> TaggedStructure for ImportMemoryBufferCollectionFUCHSIA<'a> {
46385    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA;
46386}
46387unsafe impl ExtendsMemoryAllocateInfo for ImportMemoryBufferCollectionFUCHSIA<'_> {}
46388impl<'a> ImportMemoryBufferCollectionFUCHSIA<'a> {
46389    #[inline]
46390    pub fn collection(mut self, collection: BufferCollectionFUCHSIA) -> Self {
46391        self.collection = collection;
46392        self
46393    }
46394    #[inline]
46395    pub fn index(mut self, index: u32) -> Self {
46396        self.index = index;
46397        self
46398    }
46399}
46400#[repr(C)]
46401#[cfg_attr(feature = "debug", derive(Debug))]
46402#[derive(Copy, Clone)]
46403#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionImageCreateInfoFUCHSIA.html>"]
46404#[must_use]
46405pub struct BufferCollectionImageCreateInfoFUCHSIA<'a> {
46406    pub s_type: StructureType,
46407    pub p_next: *const c_void,
46408    pub collection: BufferCollectionFUCHSIA,
46409    pub index: u32,
46410    pub _marker: PhantomData<&'a ()>,
46411}
46412unsafe impl Send for BufferCollectionImageCreateInfoFUCHSIA<'_> {}
46413unsafe impl Sync for BufferCollectionImageCreateInfoFUCHSIA<'_> {}
46414impl ::core::default::Default for BufferCollectionImageCreateInfoFUCHSIA<'_> {
46415    #[inline]
46416    fn default() -> Self {
46417        Self {
46418            s_type: Self::STRUCTURE_TYPE,
46419            p_next: ::core::ptr::null(),
46420            collection: BufferCollectionFUCHSIA::default(),
46421            index: u32::default(),
46422            _marker: PhantomData,
46423        }
46424    }
46425}
46426unsafe impl<'a> TaggedStructure for BufferCollectionImageCreateInfoFUCHSIA<'a> {
46427    const STRUCTURE_TYPE: StructureType =
46428        StructureType::BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA;
46429}
46430unsafe impl ExtendsImageCreateInfo for BufferCollectionImageCreateInfoFUCHSIA<'_> {}
46431impl<'a> BufferCollectionImageCreateInfoFUCHSIA<'a> {
46432    #[inline]
46433    pub fn collection(mut self, collection: BufferCollectionFUCHSIA) -> Self {
46434        self.collection = collection;
46435        self
46436    }
46437    #[inline]
46438    pub fn index(mut self, index: u32) -> Self {
46439        self.index = index;
46440        self
46441    }
46442}
46443#[repr(C)]
46444#[cfg_attr(feature = "debug", derive(Debug))]
46445#[derive(Copy, Clone)]
46446#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionBufferCreateInfoFUCHSIA.html>"]
46447#[must_use]
46448pub struct BufferCollectionBufferCreateInfoFUCHSIA<'a> {
46449    pub s_type: StructureType,
46450    pub p_next: *const c_void,
46451    pub collection: BufferCollectionFUCHSIA,
46452    pub index: u32,
46453    pub _marker: PhantomData<&'a ()>,
46454}
46455unsafe impl Send for BufferCollectionBufferCreateInfoFUCHSIA<'_> {}
46456unsafe impl Sync for BufferCollectionBufferCreateInfoFUCHSIA<'_> {}
46457impl ::core::default::Default for BufferCollectionBufferCreateInfoFUCHSIA<'_> {
46458    #[inline]
46459    fn default() -> Self {
46460        Self {
46461            s_type: Self::STRUCTURE_TYPE,
46462            p_next: ::core::ptr::null(),
46463            collection: BufferCollectionFUCHSIA::default(),
46464            index: u32::default(),
46465            _marker: PhantomData,
46466        }
46467    }
46468}
46469unsafe impl<'a> TaggedStructure for BufferCollectionBufferCreateInfoFUCHSIA<'a> {
46470    const STRUCTURE_TYPE: StructureType =
46471        StructureType::BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA;
46472}
46473unsafe impl ExtendsBufferCreateInfo for BufferCollectionBufferCreateInfoFUCHSIA<'_> {}
46474impl<'a> BufferCollectionBufferCreateInfoFUCHSIA<'a> {
46475    #[inline]
46476    pub fn collection(mut self, collection: BufferCollectionFUCHSIA) -> Self {
46477        self.collection = collection;
46478        self
46479    }
46480    #[inline]
46481    pub fn index(mut self, index: u32) -> Self {
46482        self.index = index;
46483        self
46484    }
46485}
46486#[repr(C)]
46487#[cfg_attr(feature = "debug", derive(Debug))]
46488#[derive(Copy, Clone)]
46489#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionCreateInfoFUCHSIA.html>"]
46490#[must_use]
46491pub struct BufferCollectionCreateInfoFUCHSIA<'a> {
46492    pub s_type: StructureType,
46493    pub p_next: *const c_void,
46494    pub collection_token: zx_handle_t,
46495    pub _marker: PhantomData<&'a ()>,
46496}
46497unsafe impl Send for BufferCollectionCreateInfoFUCHSIA<'_> {}
46498unsafe impl Sync for BufferCollectionCreateInfoFUCHSIA<'_> {}
46499impl ::core::default::Default for BufferCollectionCreateInfoFUCHSIA<'_> {
46500    #[inline]
46501    fn default() -> Self {
46502        Self {
46503            s_type: Self::STRUCTURE_TYPE,
46504            p_next: ::core::ptr::null(),
46505            collection_token: zx_handle_t::default(),
46506            _marker: PhantomData,
46507        }
46508    }
46509}
46510unsafe impl<'a> TaggedStructure for BufferCollectionCreateInfoFUCHSIA<'a> {
46511    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_COLLECTION_CREATE_INFO_FUCHSIA;
46512}
46513impl<'a> BufferCollectionCreateInfoFUCHSIA<'a> {
46514    #[inline]
46515    pub fn collection_token(mut self, collection_token: zx_handle_t) -> Self {
46516        self.collection_token = collection_token;
46517        self
46518    }
46519}
46520#[repr(C)]
46521#[cfg_attr(feature = "debug", derive(Debug))]
46522#[derive(Copy, Clone)]
46523#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionPropertiesFUCHSIA.html>"]
46524#[must_use]
46525pub struct BufferCollectionPropertiesFUCHSIA<'a> {
46526    pub s_type: StructureType,
46527    pub p_next: *mut c_void,
46528    pub memory_type_bits: u32,
46529    pub buffer_count: u32,
46530    pub create_info_index: u32,
46531    pub sysmem_pixel_format: u64,
46532    pub format_features: FormatFeatureFlags,
46533    pub sysmem_color_space_index: SysmemColorSpaceFUCHSIA<'a>,
46534    pub sampler_ycbcr_conversion_components: ComponentMapping,
46535    pub suggested_ycbcr_model: SamplerYcbcrModelConversion,
46536    pub suggested_ycbcr_range: SamplerYcbcrRange,
46537    pub suggested_x_chroma_offset: ChromaLocation,
46538    pub suggested_y_chroma_offset: ChromaLocation,
46539    pub _marker: PhantomData<&'a ()>,
46540}
46541unsafe impl Send for BufferCollectionPropertiesFUCHSIA<'_> {}
46542unsafe impl Sync for BufferCollectionPropertiesFUCHSIA<'_> {}
46543impl ::core::default::Default for BufferCollectionPropertiesFUCHSIA<'_> {
46544    #[inline]
46545    fn default() -> Self {
46546        Self {
46547            s_type: Self::STRUCTURE_TYPE,
46548            p_next: ::core::ptr::null_mut(),
46549            memory_type_bits: u32::default(),
46550            buffer_count: u32::default(),
46551            create_info_index: u32::default(),
46552            sysmem_pixel_format: u64::default(),
46553            format_features: FormatFeatureFlags::default(),
46554            sysmem_color_space_index: SysmemColorSpaceFUCHSIA::default(),
46555            sampler_ycbcr_conversion_components: ComponentMapping::default(),
46556            suggested_ycbcr_model: SamplerYcbcrModelConversion::default(),
46557            suggested_ycbcr_range: SamplerYcbcrRange::default(),
46558            suggested_x_chroma_offset: ChromaLocation::default(),
46559            suggested_y_chroma_offset: ChromaLocation::default(),
46560            _marker: PhantomData,
46561        }
46562    }
46563}
46564unsafe impl<'a> TaggedStructure for BufferCollectionPropertiesFUCHSIA<'a> {
46565    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_COLLECTION_PROPERTIES_FUCHSIA;
46566}
46567impl<'a> BufferCollectionPropertiesFUCHSIA<'a> {
46568    #[inline]
46569    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
46570        self.memory_type_bits = memory_type_bits;
46571        self
46572    }
46573    #[inline]
46574    pub fn buffer_count(mut self, buffer_count: u32) -> Self {
46575        self.buffer_count = buffer_count;
46576        self
46577    }
46578    #[inline]
46579    pub fn create_info_index(mut self, create_info_index: u32) -> Self {
46580        self.create_info_index = create_info_index;
46581        self
46582    }
46583    #[inline]
46584    pub fn sysmem_pixel_format(mut self, sysmem_pixel_format: u64) -> Self {
46585        self.sysmem_pixel_format = sysmem_pixel_format;
46586        self
46587    }
46588    #[inline]
46589    pub fn format_features(mut self, format_features: FormatFeatureFlags) -> Self {
46590        self.format_features = format_features;
46591        self
46592    }
46593    #[inline]
46594    pub fn sysmem_color_space_index(
46595        mut self,
46596        sysmem_color_space_index: SysmemColorSpaceFUCHSIA<'a>,
46597    ) -> Self {
46598        self.sysmem_color_space_index = sysmem_color_space_index;
46599        self
46600    }
46601    #[inline]
46602    pub fn sampler_ycbcr_conversion_components(
46603        mut self,
46604        sampler_ycbcr_conversion_components: ComponentMapping,
46605    ) -> Self {
46606        self.sampler_ycbcr_conversion_components = sampler_ycbcr_conversion_components;
46607        self
46608    }
46609    #[inline]
46610    pub fn suggested_ycbcr_model(
46611        mut self,
46612        suggested_ycbcr_model: SamplerYcbcrModelConversion,
46613    ) -> Self {
46614        self.suggested_ycbcr_model = suggested_ycbcr_model;
46615        self
46616    }
46617    #[inline]
46618    pub fn suggested_ycbcr_range(mut self, suggested_ycbcr_range: SamplerYcbcrRange) -> Self {
46619        self.suggested_ycbcr_range = suggested_ycbcr_range;
46620        self
46621    }
46622    #[inline]
46623    pub fn suggested_x_chroma_offset(mut self, suggested_x_chroma_offset: ChromaLocation) -> Self {
46624        self.suggested_x_chroma_offset = suggested_x_chroma_offset;
46625        self
46626    }
46627    #[inline]
46628    pub fn suggested_y_chroma_offset(mut self, suggested_y_chroma_offset: ChromaLocation) -> Self {
46629        self.suggested_y_chroma_offset = suggested_y_chroma_offset;
46630        self
46631    }
46632}
46633#[repr(C)]
46634#[cfg_attr(feature = "debug", derive(Debug))]
46635#[derive(Copy, Clone)]
46636#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferConstraintsInfoFUCHSIA.html>"]
46637#[must_use]
46638pub struct BufferConstraintsInfoFUCHSIA<'a> {
46639    pub s_type: StructureType,
46640    pub p_next: *const c_void,
46641    pub create_info: BufferCreateInfo<'a>,
46642    pub required_format_features: FormatFeatureFlags,
46643    pub buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA<'a>,
46644    pub _marker: PhantomData<&'a ()>,
46645}
46646unsafe impl Send for BufferConstraintsInfoFUCHSIA<'_> {}
46647unsafe impl Sync for BufferConstraintsInfoFUCHSIA<'_> {}
46648impl ::core::default::Default for BufferConstraintsInfoFUCHSIA<'_> {
46649    #[inline]
46650    fn default() -> Self {
46651        Self {
46652            s_type: Self::STRUCTURE_TYPE,
46653            p_next: ::core::ptr::null(),
46654            create_info: BufferCreateInfo::default(),
46655            required_format_features: FormatFeatureFlags::default(),
46656            buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA::default(),
46657            _marker: PhantomData,
46658        }
46659    }
46660}
46661unsafe impl<'a> TaggedStructure for BufferConstraintsInfoFUCHSIA<'a> {
46662    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_CONSTRAINTS_INFO_FUCHSIA;
46663}
46664impl<'a> BufferConstraintsInfoFUCHSIA<'a> {
46665    #[inline]
46666    pub fn create_info(mut self, create_info: BufferCreateInfo<'a>) -> Self {
46667        self.create_info = create_info;
46668        self
46669    }
46670    #[inline]
46671    pub fn required_format_features(
46672        mut self,
46673        required_format_features: FormatFeatureFlags,
46674    ) -> Self {
46675        self.required_format_features = required_format_features;
46676        self
46677    }
46678    #[inline]
46679    pub fn buffer_collection_constraints(
46680        mut self,
46681        buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA<'a>,
46682    ) -> Self {
46683        self.buffer_collection_constraints = buffer_collection_constraints;
46684        self
46685    }
46686}
46687#[repr(C)]
46688#[cfg_attr(feature = "debug", derive(Debug))]
46689#[derive(Copy, Clone)]
46690#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSysmemColorSpaceFUCHSIA.html>"]
46691#[must_use]
46692pub struct SysmemColorSpaceFUCHSIA<'a> {
46693    pub s_type: StructureType,
46694    pub p_next: *const c_void,
46695    pub color_space: u32,
46696    pub _marker: PhantomData<&'a ()>,
46697}
46698unsafe impl Send for SysmemColorSpaceFUCHSIA<'_> {}
46699unsafe impl Sync for SysmemColorSpaceFUCHSIA<'_> {}
46700impl ::core::default::Default for SysmemColorSpaceFUCHSIA<'_> {
46701    #[inline]
46702    fn default() -> Self {
46703        Self {
46704            s_type: Self::STRUCTURE_TYPE,
46705            p_next: ::core::ptr::null(),
46706            color_space: u32::default(),
46707            _marker: PhantomData,
46708        }
46709    }
46710}
46711unsafe impl<'a> TaggedStructure for SysmemColorSpaceFUCHSIA<'a> {
46712    const STRUCTURE_TYPE: StructureType = StructureType::SYSMEM_COLOR_SPACE_FUCHSIA;
46713}
46714impl<'a> SysmemColorSpaceFUCHSIA<'a> {
46715    #[inline]
46716    pub fn color_space(mut self, color_space: u32) -> Self {
46717        self.color_space = color_space;
46718        self
46719    }
46720}
46721#[repr(C)]
46722#[cfg_attr(feature = "debug", derive(Debug))]
46723#[derive(Copy, Clone)]
46724#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageFormatConstraintsInfoFUCHSIA.html>"]
46725#[must_use]
46726pub struct ImageFormatConstraintsInfoFUCHSIA<'a> {
46727    pub s_type: StructureType,
46728    pub p_next: *const c_void,
46729    pub image_create_info: ImageCreateInfo<'a>,
46730    pub required_format_features: FormatFeatureFlags,
46731    pub flags: ImageFormatConstraintsFlagsFUCHSIA,
46732    pub sysmem_pixel_format: u64,
46733    pub color_space_count: u32,
46734    pub p_color_spaces: *const SysmemColorSpaceFUCHSIA<'a>,
46735    pub _marker: PhantomData<&'a ()>,
46736}
46737unsafe impl Send for ImageFormatConstraintsInfoFUCHSIA<'_> {}
46738unsafe impl Sync for ImageFormatConstraintsInfoFUCHSIA<'_> {}
46739impl ::core::default::Default for ImageFormatConstraintsInfoFUCHSIA<'_> {
46740    #[inline]
46741    fn default() -> Self {
46742        Self {
46743            s_type: Self::STRUCTURE_TYPE,
46744            p_next: ::core::ptr::null(),
46745            image_create_info: ImageCreateInfo::default(),
46746            required_format_features: FormatFeatureFlags::default(),
46747            flags: ImageFormatConstraintsFlagsFUCHSIA::default(),
46748            sysmem_pixel_format: u64::default(),
46749            color_space_count: u32::default(),
46750            p_color_spaces: ::core::ptr::null(),
46751            _marker: PhantomData,
46752        }
46753    }
46754}
46755unsafe impl<'a> TaggedStructure for ImageFormatConstraintsInfoFUCHSIA<'a> {
46756    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA;
46757}
46758impl<'a> ImageFormatConstraintsInfoFUCHSIA<'a> {
46759    #[inline]
46760    pub fn image_create_info(mut self, image_create_info: ImageCreateInfo<'a>) -> Self {
46761        self.image_create_info = image_create_info;
46762        self
46763    }
46764    #[inline]
46765    pub fn required_format_features(
46766        mut self,
46767        required_format_features: FormatFeatureFlags,
46768    ) -> Self {
46769        self.required_format_features = required_format_features;
46770        self
46771    }
46772    #[inline]
46773    pub fn flags(mut self, flags: ImageFormatConstraintsFlagsFUCHSIA) -> Self {
46774        self.flags = flags;
46775        self
46776    }
46777    #[inline]
46778    pub fn sysmem_pixel_format(mut self, sysmem_pixel_format: u64) -> Self {
46779        self.sysmem_pixel_format = sysmem_pixel_format;
46780        self
46781    }
46782    #[inline]
46783    pub fn color_spaces(mut self, color_spaces: &'a [SysmemColorSpaceFUCHSIA<'a>]) -> Self {
46784        self.color_space_count = color_spaces.len() as _;
46785        self.p_color_spaces = color_spaces.as_ptr();
46786        self
46787    }
46788}
46789#[repr(C)]
46790#[cfg_attr(feature = "debug", derive(Debug))]
46791#[derive(Copy, Clone)]
46792#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageConstraintsInfoFUCHSIA.html>"]
46793#[must_use]
46794pub struct ImageConstraintsInfoFUCHSIA<'a> {
46795    pub s_type: StructureType,
46796    pub p_next: *const c_void,
46797    pub format_constraints_count: u32,
46798    pub p_format_constraints: *const ImageFormatConstraintsInfoFUCHSIA<'a>,
46799    pub buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA<'a>,
46800    pub flags: ImageConstraintsInfoFlagsFUCHSIA,
46801    pub _marker: PhantomData<&'a ()>,
46802}
46803unsafe impl Send for ImageConstraintsInfoFUCHSIA<'_> {}
46804unsafe impl Sync for ImageConstraintsInfoFUCHSIA<'_> {}
46805impl ::core::default::Default for ImageConstraintsInfoFUCHSIA<'_> {
46806    #[inline]
46807    fn default() -> Self {
46808        Self {
46809            s_type: Self::STRUCTURE_TYPE,
46810            p_next: ::core::ptr::null(),
46811            format_constraints_count: u32::default(),
46812            p_format_constraints: ::core::ptr::null(),
46813            buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA::default(),
46814            flags: ImageConstraintsInfoFlagsFUCHSIA::default(),
46815            _marker: PhantomData,
46816        }
46817    }
46818}
46819unsafe impl<'a> TaggedStructure for ImageConstraintsInfoFUCHSIA<'a> {
46820    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_CONSTRAINTS_INFO_FUCHSIA;
46821}
46822impl<'a> ImageConstraintsInfoFUCHSIA<'a> {
46823    #[inline]
46824    pub fn format_constraints(
46825        mut self,
46826        format_constraints: &'a [ImageFormatConstraintsInfoFUCHSIA<'a>],
46827    ) -> Self {
46828        self.format_constraints_count = format_constraints.len() as _;
46829        self.p_format_constraints = format_constraints.as_ptr();
46830        self
46831    }
46832    #[inline]
46833    pub fn buffer_collection_constraints(
46834        mut self,
46835        buffer_collection_constraints: BufferCollectionConstraintsInfoFUCHSIA<'a>,
46836    ) -> Self {
46837        self.buffer_collection_constraints = buffer_collection_constraints;
46838        self
46839    }
46840    #[inline]
46841    pub fn flags(mut self, flags: ImageConstraintsInfoFlagsFUCHSIA) -> Self {
46842        self.flags = flags;
46843        self
46844    }
46845}
46846#[repr(C)]
46847#[cfg_attr(feature = "debug", derive(Debug))]
46848#[derive(Copy, Clone)]
46849#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferCollectionConstraintsInfoFUCHSIA.html>"]
46850#[must_use]
46851pub struct BufferCollectionConstraintsInfoFUCHSIA<'a> {
46852    pub s_type: StructureType,
46853    pub p_next: *const c_void,
46854    pub min_buffer_count: u32,
46855    pub max_buffer_count: u32,
46856    pub min_buffer_count_for_camping: u32,
46857    pub min_buffer_count_for_dedicated_slack: u32,
46858    pub min_buffer_count_for_shared_slack: u32,
46859    pub _marker: PhantomData<&'a ()>,
46860}
46861unsafe impl Send for BufferCollectionConstraintsInfoFUCHSIA<'_> {}
46862unsafe impl Sync for BufferCollectionConstraintsInfoFUCHSIA<'_> {}
46863impl ::core::default::Default for BufferCollectionConstraintsInfoFUCHSIA<'_> {
46864    #[inline]
46865    fn default() -> Self {
46866        Self {
46867            s_type: Self::STRUCTURE_TYPE,
46868            p_next: ::core::ptr::null(),
46869            min_buffer_count: u32::default(),
46870            max_buffer_count: u32::default(),
46871            min_buffer_count_for_camping: u32::default(),
46872            min_buffer_count_for_dedicated_slack: u32::default(),
46873            min_buffer_count_for_shared_slack: u32::default(),
46874            _marker: PhantomData,
46875        }
46876    }
46877}
46878unsafe impl<'a> TaggedStructure for BufferCollectionConstraintsInfoFUCHSIA<'a> {
46879    const STRUCTURE_TYPE: StructureType = StructureType::BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA;
46880}
46881impl<'a> BufferCollectionConstraintsInfoFUCHSIA<'a> {
46882    #[inline]
46883    pub fn min_buffer_count(mut self, min_buffer_count: u32) -> Self {
46884        self.min_buffer_count = min_buffer_count;
46885        self
46886    }
46887    #[inline]
46888    pub fn max_buffer_count(mut self, max_buffer_count: u32) -> Self {
46889        self.max_buffer_count = max_buffer_count;
46890        self
46891    }
46892    #[inline]
46893    pub fn min_buffer_count_for_camping(mut self, min_buffer_count_for_camping: u32) -> Self {
46894        self.min_buffer_count_for_camping = min_buffer_count_for_camping;
46895        self
46896    }
46897    #[inline]
46898    pub fn min_buffer_count_for_dedicated_slack(
46899        mut self,
46900        min_buffer_count_for_dedicated_slack: u32,
46901    ) -> Self {
46902        self.min_buffer_count_for_dedicated_slack = min_buffer_count_for_dedicated_slack;
46903        self
46904    }
46905    #[inline]
46906    pub fn min_buffer_count_for_shared_slack(
46907        mut self,
46908        min_buffer_count_for_shared_slack: u32,
46909    ) -> Self {
46910        self.min_buffer_count_for_shared_slack = min_buffer_count_for_shared_slack;
46911        self
46912    }
46913}
46914handle_nondispatchable!(
46915    CudaModuleNV,
46916    CUDA_MODULE_NV,
46917    doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCudaModuleNV.html>"
46918);
46919handle_nondispatchable!(
46920    CudaFunctionNV,
46921    CUDA_FUNCTION_NV,
46922    doc =
46923        "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCudaFunctionNV.html>"
46924);
46925#[repr(C)]
46926#[cfg_attr(feature = "debug", derive(Debug))]
46927#[derive(Copy, Clone)]
46928#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCudaModuleCreateInfoNV.html>"]
46929#[must_use]
46930pub struct CudaModuleCreateInfoNV<'a> {
46931    pub s_type: StructureType,
46932    pub p_next: *const c_void,
46933    pub data_size: usize,
46934    pub p_data: *const c_void,
46935    pub _marker: PhantomData<&'a ()>,
46936}
46937unsafe impl Send for CudaModuleCreateInfoNV<'_> {}
46938unsafe impl Sync for CudaModuleCreateInfoNV<'_> {}
46939impl ::core::default::Default for CudaModuleCreateInfoNV<'_> {
46940    #[inline]
46941    fn default() -> Self {
46942        Self {
46943            s_type: Self::STRUCTURE_TYPE,
46944            p_next: ::core::ptr::null(),
46945            data_size: usize::default(),
46946            p_data: ::core::ptr::null(),
46947            _marker: PhantomData,
46948        }
46949    }
46950}
46951unsafe impl<'a> TaggedStructure for CudaModuleCreateInfoNV<'a> {
46952    const STRUCTURE_TYPE: StructureType = StructureType::CUDA_MODULE_CREATE_INFO_NV;
46953}
46954impl<'a> CudaModuleCreateInfoNV<'a> {
46955    #[inline]
46956    pub fn data(mut self, data: &'a [u8]) -> Self {
46957        self.data_size = data.len();
46958        self.p_data = data.as_ptr().cast();
46959        self
46960    }
46961}
46962#[repr(C)]
46963#[cfg_attr(feature = "debug", derive(Debug))]
46964#[derive(Copy, Clone)]
46965#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCudaFunctionCreateInfoNV.html>"]
46966#[must_use]
46967pub struct CudaFunctionCreateInfoNV<'a> {
46968    pub s_type: StructureType,
46969    pub p_next: *const c_void,
46970    pub module: CudaModuleNV,
46971    pub p_name: *const c_char,
46972    pub _marker: PhantomData<&'a ()>,
46973}
46974unsafe impl Send for CudaFunctionCreateInfoNV<'_> {}
46975unsafe impl Sync for CudaFunctionCreateInfoNV<'_> {}
46976impl ::core::default::Default for CudaFunctionCreateInfoNV<'_> {
46977    #[inline]
46978    fn default() -> Self {
46979        Self {
46980            s_type: Self::STRUCTURE_TYPE,
46981            p_next: ::core::ptr::null(),
46982            module: CudaModuleNV::default(),
46983            p_name: ::core::ptr::null(),
46984            _marker: PhantomData,
46985        }
46986    }
46987}
46988unsafe impl<'a> TaggedStructure for CudaFunctionCreateInfoNV<'a> {
46989    const STRUCTURE_TYPE: StructureType = StructureType::CUDA_FUNCTION_CREATE_INFO_NV;
46990}
46991impl<'a> CudaFunctionCreateInfoNV<'a> {
46992    #[inline]
46993    pub fn module(mut self, module: CudaModuleNV) -> Self {
46994        self.module = module;
46995        self
46996    }
46997    #[inline]
46998    pub fn name(mut self, name: &'a CStr) -> Self {
46999        self.p_name = name.as_ptr();
47000        self
47001    }
47002    #[inline]
47003    pub unsafe fn name_as_c_str(&self) -> Option<&CStr> {
47004        if self.p_name.is_null() {
47005            None
47006        } else {
47007            Some(CStr::from_ptr(self.p_name))
47008        }
47009    }
47010}
47011#[repr(C)]
47012#[cfg_attr(feature = "debug", derive(Debug))]
47013#[derive(Copy, Clone)]
47014#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCudaLaunchInfoNV.html>"]
47015#[must_use]
47016pub struct CudaLaunchInfoNV<'a> {
47017    pub s_type: StructureType,
47018    pub p_next: *const c_void,
47019    pub function: CudaFunctionNV,
47020    pub grid_dim_x: u32,
47021    pub grid_dim_y: u32,
47022    pub grid_dim_z: u32,
47023    pub block_dim_x: u32,
47024    pub block_dim_y: u32,
47025    pub block_dim_z: u32,
47026    pub shared_mem_bytes: u32,
47027    pub param_count: usize,
47028    pub p_params: *const *const c_void,
47029    pub extra_count: usize,
47030    pub p_extras: *const *const c_void,
47031    pub _marker: PhantomData<&'a ()>,
47032}
47033unsafe impl Send for CudaLaunchInfoNV<'_> {}
47034unsafe impl Sync for CudaLaunchInfoNV<'_> {}
47035impl ::core::default::Default for CudaLaunchInfoNV<'_> {
47036    #[inline]
47037    fn default() -> Self {
47038        Self {
47039            s_type: Self::STRUCTURE_TYPE,
47040            p_next: ::core::ptr::null(),
47041            function: CudaFunctionNV::default(),
47042            grid_dim_x: u32::default(),
47043            grid_dim_y: u32::default(),
47044            grid_dim_z: u32::default(),
47045            block_dim_x: u32::default(),
47046            block_dim_y: u32::default(),
47047            block_dim_z: u32::default(),
47048            shared_mem_bytes: u32::default(),
47049            param_count: usize::default(),
47050            p_params: ::core::ptr::null(),
47051            extra_count: usize::default(),
47052            p_extras: ::core::ptr::null(),
47053            _marker: PhantomData,
47054        }
47055    }
47056}
47057unsafe impl<'a> TaggedStructure for CudaLaunchInfoNV<'a> {
47058    const STRUCTURE_TYPE: StructureType = StructureType::CUDA_LAUNCH_INFO_NV;
47059}
47060impl<'a> CudaLaunchInfoNV<'a> {
47061    #[inline]
47062    pub fn function(mut self, function: CudaFunctionNV) -> Self {
47063        self.function = function;
47064        self
47065    }
47066    #[inline]
47067    pub fn grid_dim_x(mut self, grid_dim_x: u32) -> Self {
47068        self.grid_dim_x = grid_dim_x;
47069        self
47070    }
47071    #[inline]
47072    pub fn grid_dim_y(mut self, grid_dim_y: u32) -> Self {
47073        self.grid_dim_y = grid_dim_y;
47074        self
47075    }
47076    #[inline]
47077    pub fn grid_dim_z(mut self, grid_dim_z: u32) -> Self {
47078        self.grid_dim_z = grid_dim_z;
47079        self
47080    }
47081    #[inline]
47082    pub fn block_dim_x(mut self, block_dim_x: u32) -> Self {
47083        self.block_dim_x = block_dim_x;
47084        self
47085    }
47086    #[inline]
47087    pub fn block_dim_y(mut self, block_dim_y: u32) -> Self {
47088        self.block_dim_y = block_dim_y;
47089        self
47090    }
47091    #[inline]
47092    pub fn block_dim_z(mut self, block_dim_z: u32) -> Self {
47093        self.block_dim_z = block_dim_z;
47094        self
47095    }
47096    #[inline]
47097    pub fn shared_mem_bytes(mut self, shared_mem_bytes: u32) -> Self {
47098        self.shared_mem_bytes = shared_mem_bytes;
47099        self
47100    }
47101    #[inline]
47102    pub fn params(mut self, params: &'a [*const c_void]) -> Self {
47103        self.param_count = params.len();
47104        self.p_params = params.as_ptr();
47105        self
47106    }
47107    #[inline]
47108    pub fn extras(mut self, extras: &'a [*const c_void]) -> Self {
47109        self.extra_count = extras.len();
47110        self.p_extras = extras.as_ptr();
47111        self
47112    }
47113}
47114#[repr(C)]
47115#[cfg_attr(feature = "debug", derive(Debug))]
47116#[derive(Copy, Clone)]
47117#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT.html>"]
47118#[must_use]
47119pub struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'a> {
47120    pub s_type: StructureType,
47121    pub p_next: *mut c_void,
47122    pub format_rgba10x6_without_y_cb_cr_sampler: Bool32,
47123    pub _marker: PhantomData<&'a ()>,
47124}
47125unsafe impl Send for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'_> {}
47126unsafe impl Sync for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'_> {}
47127impl ::core::default::Default for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'_> {
47128    #[inline]
47129    fn default() -> Self {
47130        Self {
47131            s_type: Self::STRUCTURE_TYPE,
47132            p_next: ::core::ptr::null_mut(),
47133            format_rgba10x6_without_y_cb_cr_sampler: Bool32::default(),
47134            _marker: PhantomData,
47135        }
47136    }
47137}
47138unsafe impl<'a> TaggedStructure for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'a> {
47139    const STRUCTURE_TYPE: StructureType =
47140        StructureType::PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT;
47141}
47142unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'_> {}
47143unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'_> {}
47144impl<'a> PhysicalDeviceRGBA10X6FormatsFeaturesEXT<'a> {
47145    #[inline]
47146    pub fn format_rgba10x6_without_y_cb_cr_sampler(
47147        mut self,
47148        format_rgba10x6_without_y_cb_cr_sampler: bool,
47149    ) -> Self {
47150        self.format_rgba10x6_without_y_cb_cr_sampler =
47151            format_rgba10x6_without_y_cb_cr_sampler.into();
47152        self
47153    }
47154}
47155#[repr(C)]
47156#[cfg_attr(feature = "debug", derive(Debug))]
47157#[derive(Copy, Clone)]
47158#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFormatProperties3.html>"]
47159#[must_use]
47160pub struct FormatProperties3<'a> {
47161    pub s_type: StructureType,
47162    pub p_next: *mut c_void,
47163    pub linear_tiling_features: FormatFeatureFlags2,
47164    pub optimal_tiling_features: FormatFeatureFlags2,
47165    pub buffer_features: FormatFeatureFlags2,
47166    pub _marker: PhantomData<&'a ()>,
47167}
47168unsafe impl Send for FormatProperties3<'_> {}
47169unsafe impl Sync for FormatProperties3<'_> {}
47170impl ::core::default::Default for FormatProperties3<'_> {
47171    #[inline]
47172    fn default() -> Self {
47173        Self {
47174            s_type: Self::STRUCTURE_TYPE,
47175            p_next: ::core::ptr::null_mut(),
47176            linear_tiling_features: FormatFeatureFlags2::default(),
47177            optimal_tiling_features: FormatFeatureFlags2::default(),
47178            buffer_features: FormatFeatureFlags2::default(),
47179            _marker: PhantomData,
47180        }
47181    }
47182}
47183unsafe impl<'a> TaggedStructure for FormatProperties3<'a> {
47184    const STRUCTURE_TYPE: StructureType = StructureType::FORMAT_PROPERTIES_3;
47185}
47186unsafe impl ExtendsFormatProperties2 for FormatProperties3<'_> {}
47187impl<'a> FormatProperties3<'a> {
47188    #[inline]
47189    pub fn linear_tiling_features(mut self, linear_tiling_features: FormatFeatureFlags2) -> Self {
47190        self.linear_tiling_features = linear_tiling_features;
47191        self
47192    }
47193    #[inline]
47194    pub fn optimal_tiling_features(mut self, optimal_tiling_features: FormatFeatureFlags2) -> Self {
47195        self.optimal_tiling_features = optimal_tiling_features;
47196        self
47197    }
47198    #[inline]
47199    pub fn buffer_features(mut self, buffer_features: FormatFeatureFlags2) -> Self {
47200        self.buffer_features = buffer_features;
47201        self
47202    }
47203}
47204#[repr(C)]
47205#[cfg_attr(feature = "debug", derive(Debug))]
47206#[derive(Copy, Clone)]
47207#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrmFormatModifierPropertiesList2EXT.html>"]
47208#[must_use]
47209pub struct DrmFormatModifierPropertiesList2EXT<'a> {
47210    pub s_type: StructureType,
47211    pub p_next: *mut c_void,
47212    pub drm_format_modifier_count: u32,
47213    pub p_drm_format_modifier_properties: *mut DrmFormatModifierProperties2EXT,
47214    pub _marker: PhantomData<&'a ()>,
47215}
47216unsafe impl Send for DrmFormatModifierPropertiesList2EXT<'_> {}
47217unsafe impl Sync for DrmFormatModifierPropertiesList2EXT<'_> {}
47218impl ::core::default::Default for DrmFormatModifierPropertiesList2EXT<'_> {
47219    #[inline]
47220    fn default() -> Self {
47221        Self {
47222            s_type: Self::STRUCTURE_TYPE,
47223            p_next: ::core::ptr::null_mut(),
47224            drm_format_modifier_count: u32::default(),
47225            p_drm_format_modifier_properties: ::core::ptr::null_mut(),
47226            _marker: PhantomData,
47227        }
47228    }
47229}
47230unsafe impl<'a> TaggedStructure for DrmFormatModifierPropertiesList2EXT<'a> {
47231    const STRUCTURE_TYPE: StructureType = StructureType::DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT;
47232}
47233unsafe impl ExtendsFormatProperties2 for DrmFormatModifierPropertiesList2EXT<'_> {}
47234impl<'a> DrmFormatModifierPropertiesList2EXT<'a> {
47235    #[inline]
47236    pub fn drm_format_modifier_properties(
47237        mut self,
47238        drm_format_modifier_properties: &'a mut [DrmFormatModifierProperties2EXT],
47239    ) -> Self {
47240        self.drm_format_modifier_count = drm_format_modifier_properties.len() as _;
47241        self.p_drm_format_modifier_properties = drm_format_modifier_properties.as_mut_ptr();
47242        self
47243    }
47244}
47245#[repr(C)]
47246#[cfg_attr(feature = "debug", derive(Debug))]
47247#[derive(Copy, Clone, Default)]
47248#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrmFormatModifierProperties2EXT.html>"]
47249#[must_use]
47250pub struct DrmFormatModifierProperties2EXT {
47251    pub drm_format_modifier: u64,
47252    pub drm_format_modifier_plane_count: u32,
47253    pub drm_format_modifier_tiling_features: FormatFeatureFlags2,
47254}
47255impl DrmFormatModifierProperties2EXT {
47256    #[inline]
47257    pub fn drm_format_modifier(mut self, drm_format_modifier: u64) -> Self {
47258        self.drm_format_modifier = drm_format_modifier;
47259        self
47260    }
47261    #[inline]
47262    pub fn drm_format_modifier_plane_count(mut self, drm_format_modifier_plane_count: u32) -> Self {
47263        self.drm_format_modifier_plane_count = drm_format_modifier_plane_count;
47264        self
47265    }
47266    #[inline]
47267    pub fn drm_format_modifier_tiling_features(
47268        mut self,
47269        drm_format_modifier_tiling_features: FormatFeatureFlags2,
47270    ) -> Self {
47271        self.drm_format_modifier_tiling_features = drm_format_modifier_tiling_features;
47272        self
47273    }
47274}
47275#[repr(C)]
47276#[cfg_attr(feature = "debug", derive(Debug))]
47277#[derive(Copy, Clone)]
47278#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidHardwareBufferFormatProperties2ANDROID.html>"]
47279#[must_use]
47280pub struct AndroidHardwareBufferFormatProperties2ANDROID<'a> {
47281    pub s_type: StructureType,
47282    pub p_next: *mut c_void,
47283    pub format: Format,
47284    pub external_format: u64,
47285    pub format_features: FormatFeatureFlags2,
47286    pub sampler_ycbcr_conversion_components: ComponentMapping,
47287    pub suggested_ycbcr_model: SamplerYcbcrModelConversion,
47288    pub suggested_ycbcr_range: SamplerYcbcrRange,
47289    pub suggested_x_chroma_offset: ChromaLocation,
47290    pub suggested_y_chroma_offset: ChromaLocation,
47291    pub _marker: PhantomData<&'a ()>,
47292}
47293unsafe impl Send for AndroidHardwareBufferFormatProperties2ANDROID<'_> {}
47294unsafe impl Sync for AndroidHardwareBufferFormatProperties2ANDROID<'_> {}
47295impl ::core::default::Default for AndroidHardwareBufferFormatProperties2ANDROID<'_> {
47296    #[inline]
47297    fn default() -> Self {
47298        Self {
47299            s_type: Self::STRUCTURE_TYPE,
47300            p_next: ::core::ptr::null_mut(),
47301            format: Format::default(),
47302            external_format: u64::default(),
47303            format_features: FormatFeatureFlags2::default(),
47304            sampler_ycbcr_conversion_components: ComponentMapping::default(),
47305            suggested_ycbcr_model: SamplerYcbcrModelConversion::default(),
47306            suggested_ycbcr_range: SamplerYcbcrRange::default(),
47307            suggested_x_chroma_offset: ChromaLocation::default(),
47308            suggested_y_chroma_offset: ChromaLocation::default(),
47309            _marker: PhantomData,
47310        }
47311    }
47312}
47313unsafe impl<'a> TaggedStructure for AndroidHardwareBufferFormatProperties2ANDROID<'a> {
47314    const STRUCTURE_TYPE: StructureType =
47315        StructureType::ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID;
47316}
47317unsafe impl ExtendsAndroidHardwareBufferPropertiesANDROID
47318    for AndroidHardwareBufferFormatProperties2ANDROID<'_>
47319{
47320}
47321impl<'a> AndroidHardwareBufferFormatProperties2ANDROID<'a> {
47322    #[inline]
47323    pub fn format(mut self, format: Format) -> Self {
47324        self.format = format;
47325        self
47326    }
47327    #[inline]
47328    pub fn external_format(mut self, external_format: u64) -> Self {
47329        self.external_format = external_format;
47330        self
47331    }
47332    #[inline]
47333    pub fn format_features(mut self, format_features: FormatFeatureFlags2) -> Self {
47334        self.format_features = format_features;
47335        self
47336    }
47337    #[inline]
47338    pub fn sampler_ycbcr_conversion_components(
47339        mut self,
47340        sampler_ycbcr_conversion_components: ComponentMapping,
47341    ) -> Self {
47342        self.sampler_ycbcr_conversion_components = sampler_ycbcr_conversion_components;
47343        self
47344    }
47345    #[inline]
47346    pub fn suggested_ycbcr_model(
47347        mut self,
47348        suggested_ycbcr_model: SamplerYcbcrModelConversion,
47349    ) -> Self {
47350        self.suggested_ycbcr_model = suggested_ycbcr_model;
47351        self
47352    }
47353    #[inline]
47354    pub fn suggested_ycbcr_range(mut self, suggested_ycbcr_range: SamplerYcbcrRange) -> Self {
47355        self.suggested_ycbcr_range = suggested_ycbcr_range;
47356        self
47357    }
47358    #[inline]
47359    pub fn suggested_x_chroma_offset(mut self, suggested_x_chroma_offset: ChromaLocation) -> Self {
47360        self.suggested_x_chroma_offset = suggested_x_chroma_offset;
47361        self
47362    }
47363    #[inline]
47364    pub fn suggested_y_chroma_offset(mut self, suggested_y_chroma_offset: ChromaLocation) -> Self {
47365        self.suggested_y_chroma_offset = suggested_y_chroma_offset;
47366        self
47367    }
47368}
47369#[repr(C)]
47370#[cfg_attr(feature = "debug", derive(Debug))]
47371#[derive(Copy, Clone)]
47372#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRenderingCreateInfo.html>"]
47373#[must_use]
47374pub struct PipelineRenderingCreateInfo<'a> {
47375    pub s_type: StructureType,
47376    pub p_next: *const c_void,
47377    pub view_mask: u32,
47378    pub color_attachment_count: u32,
47379    pub p_color_attachment_formats: *const Format,
47380    pub depth_attachment_format: Format,
47381    pub stencil_attachment_format: Format,
47382    pub _marker: PhantomData<&'a ()>,
47383}
47384unsafe impl Send for PipelineRenderingCreateInfo<'_> {}
47385unsafe impl Sync for PipelineRenderingCreateInfo<'_> {}
47386impl ::core::default::Default for PipelineRenderingCreateInfo<'_> {
47387    #[inline]
47388    fn default() -> Self {
47389        Self {
47390            s_type: Self::STRUCTURE_TYPE,
47391            p_next: ::core::ptr::null(),
47392            view_mask: u32::default(),
47393            color_attachment_count: u32::default(),
47394            p_color_attachment_formats: ::core::ptr::null(),
47395            depth_attachment_format: Format::default(),
47396            stencil_attachment_format: Format::default(),
47397            _marker: PhantomData,
47398        }
47399    }
47400}
47401unsafe impl<'a> TaggedStructure for PipelineRenderingCreateInfo<'a> {
47402    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_RENDERING_CREATE_INFO;
47403}
47404unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineRenderingCreateInfo<'_> {}
47405impl<'a> PipelineRenderingCreateInfo<'a> {
47406    #[inline]
47407    pub fn view_mask(mut self, view_mask: u32) -> Self {
47408        self.view_mask = view_mask;
47409        self
47410    }
47411    #[inline]
47412    pub fn color_attachment_formats(mut self, color_attachment_formats: &'a [Format]) -> Self {
47413        self.color_attachment_count = color_attachment_formats.len() as _;
47414        self.p_color_attachment_formats = color_attachment_formats.as_ptr();
47415        self
47416    }
47417    #[inline]
47418    pub fn depth_attachment_format(mut self, depth_attachment_format: Format) -> Self {
47419        self.depth_attachment_format = depth_attachment_format;
47420        self
47421    }
47422    #[inline]
47423    pub fn stencil_attachment_format(mut self, stencil_attachment_format: Format) -> Self {
47424        self.stencil_attachment_format = stencil_attachment_format;
47425        self
47426    }
47427}
47428#[repr(C)]
47429#[cfg_attr(feature = "debug", derive(Debug))]
47430#[derive(Copy, Clone)]
47431#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingInfo.html>"]
47432#[must_use]
47433pub struct RenderingInfo<'a> {
47434    pub s_type: StructureType,
47435    pub p_next: *const c_void,
47436    pub flags: RenderingFlags,
47437    pub render_area: Rect2D,
47438    pub layer_count: u32,
47439    pub view_mask: u32,
47440    pub color_attachment_count: u32,
47441    pub p_color_attachments: *const RenderingAttachmentInfo<'a>,
47442    pub p_depth_attachment: *const RenderingAttachmentInfo<'a>,
47443    pub p_stencil_attachment: *const RenderingAttachmentInfo<'a>,
47444    pub _marker: PhantomData<&'a ()>,
47445}
47446unsafe impl Send for RenderingInfo<'_> {}
47447unsafe impl Sync for RenderingInfo<'_> {}
47448impl ::core::default::Default for RenderingInfo<'_> {
47449    #[inline]
47450    fn default() -> Self {
47451        Self {
47452            s_type: Self::STRUCTURE_TYPE,
47453            p_next: ::core::ptr::null(),
47454            flags: RenderingFlags::default(),
47455            render_area: Rect2D::default(),
47456            layer_count: u32::default(),
47457            view_mask: u32::default(),
47458            color_attachment_count: u32::default(),
47459            p_color_attachments: ::core::ptr::null(),
47460            p_depth_attachment: ::core::ptr::null(),
47461            p_stencil_attachment: ::core::ptr::null(),
47462            _marker: PhantomData,
47463        }
47464    }
47465}
47466unsafe impl<'a> TaggedStructure for RenderingInfo<'a> {
47467    const STRUCTURE_TYPE: StructureType = StructureType::RENDERING_INFO;
47468}
47469pub unsafe trait ExtendsRenderingInfo {}
47470impl<'a> RenderingInfo<'a> {
47471    #[inline]
47472    pub fn flags(mut self, flags: RenderingFlags) -> Self {
47473        self.flags = flags;
47474        self
47475    }
47476    #[inline]
47477    pub fn render_area(mut self, render_area: Rect2D) -> Self {
47478        self.render_area = render_area;
47479        self
47480    }
47481    #[inline]
47482    pub fn layer_count(mut self, layer_count: u32) -> Self {
47483        self.layer_count = layer_count;
47484        self
47485    }
47486    #[inline]
47487    pub fn view_mask(mut self, view_mask: u32) -> Self {
47488        self.view_mask = view_mask;
47489        self
47490    }
47491    #[inline]
47492    pub fn color_attachments(
47493        mut self,
47494        color_attachments: &'a [RenderingAttachmentInfo<'a>],
47495    ) -> Self {
47496        self.color_attachment_count = color_attachments.len() as _;
47497        self.p_color_attachments = color_attachments.as_ptr();
47498        self
47499    }
47500    #[inline]
47501    pub fn depth_attachment(mut self, depth_attachment: &'a RenderingAttachmentInfo<'a>) -> Self {
47502        self.p_depth_attachment = depth_attachment;
47503        self
47504    }
47505    #[inline]
47506    pub fn stencil_attachment(
47507        mut self,
47508        stencil_attachment: &'a RenderingAttachmentInfo<'a>,
47509    ) -> Self {
47510        self.p_stencil_attachment = stencil_attachment;
47511        self
47512    }
47513    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
47514    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
47515    #[doc = r" valid extension structs can be pushed into the chain."]
47516    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
47517    #[doc = r" chain will look like `A -> D -> B -> C`."]
47518    pub fn push_next<T: ExtendsRenderingInfo + ?Sized>(mut self, next: &'a mut T) -> Self {
47519        unsafe {
47520            let next_ptr = <*const T>::cast(next);
47521            let last_next = ptr_chain_iter(next).last().unwrap();
47522            (*last_next).p_next = self.p_next as _;
47523            self.p_next = next_ptr;
47524        }
47525        self
47526    }
47527}
47528#[repr(C)]
47529#[derive(Copy, Clone)]
47530#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingAttachmentInfo.html>"]
47531#[must_use]
47532pub struct RenderingAttachmentInfo<'a> {
47533    pub s_type: StructureType,
47534    pub p_next: *const c_void,
47535    pub image_view: ImageView,
47536    pub image_layout: ImageLayout,
47537    pub resolve_mode: ResolveModeFlags,
47538    pub resolve_image_view: ImageView,
47539    pub resolve_image_layout: ImageLayout,
47540    pub load_op: AttachmentLoadOp,
47541    pub store_op: AttachmentStoreOp,
47542    pub clear_value: ClearValue,
47543    pub _marker: PhantomData<&'a ()>,
47544}
47545unsafe impl Send for RenderingAttachmentInfo<'_> {}
47546unsafe impl Sync for RenderingAttachmentInfo<'_> {}
47547#[cfg(feature = "debug")]
47548impl fmt::Debug for RenderingAttachmentInfo<'_> {
47549    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
47550        fmt.debug_struct("RenderingAttachmentInfo")
47551            .field("s_type", &self.s_type)
47552            .field("p_next", &self.p_next)
47553            .field("image_view", &self.image_view)
47554            .field("image_layout", &self.image_layout)
47555            .field("resolve_mode", &self.resolve_mode)
47556            .field("resolve_image_view", &self.resolve_image_view)
47557            .field("resolve_image_layout", &self.resolve_image_layout)
47558            .field("load_op", &self.load_op)
47559            .field("store_op", &self.store_op)
47560            .field("clear_value", &"union")
47561            .finish()
47562    }
47563}
47564impl ::core::default::Default for RenderingAttachmentInfo<'_> {
47565    #[inline]
47566    fn default() -> Self {
47567        Self {
47568            s_type: Self::STRUCTURE_TYPE,
47569            p_next: ::core::ptr::null(),
47570            image_view: ImageView::default(),
47571            image_layout: ImageLayout::default(),
47572            resolve_mode: ResolveModeFlags::default(),
47573            resolve_image_view: ImageView::default(),
47574            resolve_image_layout: ImageLayout::default(),
47575            load_op: AttachmentLoadOp::default(),
47576            store_op: AttachmentStoreOp::default(),
47577            clear_value: ClearValue::default(),
47578            _marker: PhantomData,
47579        }
47580    }
47581}
47582unsafe impl<'a> TaggedStructure for RenderingAttachmentInfo<'a> {
47583    const STRUCTURE_TYPE: StructureType = StructureType::RENDERING_ATTACHMENT_INFO;
47584}
47585impl<'a> RenderingAttachmentInfo<'a> {
47586    #[inline]
47587    pub fn image_view(mut self, image_view: ImageView) -> Self {
47588        self.image_view = image_view;
47589        self
47590    }
47591    #[inline]
47592    pub fn image_layout(mut self, image_layout: ImageLayout) -> Self {
47593        self.image_layout = image_layout;
47594        self
47595    }
47596    #[inline]
47597    pub fn resolve_mode(mut self, resolve_mode: ResolveModeFlags) -> Self {
47598        self.resolve_mode = resolve_mode;
47599        self
47600    }
47601    #[inline]
47602    pub fn resolve_image_view(mut self, resolve_image_view: ImageView) -> Self {
47603        self.resolve_image_view = resolve_image_view;
47604        self
47605    }
47606    #[inline]
47607    pub fn resolve_image_layout(mut self, resolve_image_layout: ImageLayout) -> Self {
47608        self.resolve_image_layout = resolve_image_layout;
47609        self
47610    }
47611    #[inline]
47612    pub fn load_op(mut self, load_op: AttachmentLoadOp) -> Self {
47613        self.load_op = load_op;
47614        self
47615    }
47616    #[inline]
47617    pub fn store_op(mut self, store_op: AttachmentStoreOp) -> Self {
47618        self.store_op = store_op;
47619        self
47620    }
47621    #[inline]
47622    pub fn clear_value(mut self, clear_value: ClearValue) -> Self {
47623        self.clear_value = clear_value;
47624        self
47625    }
47626}
47627#[repr(C)]
47628#[cfg_attr(feature = "debug", derive(Debug))]
47629#[derive(Copy, Clone)]
47630#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingFragmentShadingRateAttachmentInfoKHR.html>"]
47631#[must_use]
47632pub struct RenderingFragmentShadingRateAttachmentInfoKHR<'a> {
47633    pub s_type: StructureType,
47634    pub p_next: *const c_void,
47635    pub image_view: ImageView,
47636    pub image_layout: ImageLayout,
47637    pub shading_rate_attachment_texel_size: Extent2D,
47638    pub _marker: PhantomData<&'a ()>,
47639}
47640unsafe impl Send for RenderingFragmentShadingRateAttachmentInfoKHR<'_> {}
47641unsafe impl Sync for RenderingFragmentShadingRateAttachmentInfoKHR<'_> {}
47642impl ::core::default::Default for RenderingFragmentShadingRateAttachmentInfoKHR<'_> {
47643    #[inline]
47644    fn default() -> Self {
47645        Self {
47646            s_type: Self::STRUCTURE_TYPE,
47647            p_next: ::core::ptr::null(),
47648            image_view: ImageView::default(),
47649            image_layout: ImageLayout::default(),
47650            shading_rate_attachment_texel_size: Extent2D::default(),
47651            _marker: PhantomData,
47652        }
47653    }
47654}
47655unsafe impl<'a> TaggedStructure for RenderingFragmentShadingRateAttachmentInfoKHR<'a> {
47656    const STRUCTURE_TYPE: StructureType =
47657        StructureType::RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR;
47658}
47659unsafe impl ExtendsRenderingInfo for RenderingFragmentShadingRateAttachmentInfoKHR<'_> {}
47660impl<'a> RenderingFragmentShadingRateAttachmentInfoKHR<'a> {
47661    #[inline]
47662    pub fn image_view(mut self, image_view: ImageView) -> Self {
47663        self.image_view = image_view;
47664        self
47665    }
47666    #[inline]
47667    pub fn image_layout(mut self, image_layout: ImageLayout) -> Self {
47668        self.image_layout = image_layout;
47669        self
47670    }
47671    #[inline]
47672    pub fn shading_rate_attachment_texel_size(
47673        mut self,
47674        shading_rate_attachment_texel_size: Extent2D,
47675    ) -> Self {
47676        self.shading_rate_attachment_texel_size = shading_rate_attachment_texel_size;
47677        self
47678    }
47679}
47680#[repr(C)]
47681#[cfg_attr(feature = "debug", derive(Debug))]
47682#[derive(Copy, Clone)]
47683#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingFragmentDensityMapAttachmentInfoEXT.html>"]
47684#[must_use]
47685pub struct RenderingFragmentDensityMapAttachmentInfoEXT<'a> {
47686    pub s_type: StructureType,
47687    pub p_next: *const c_void,
47688    pub image_view: ImageView,
47689    pub image_layout: ImageLayout,
47690    pub _marker: PhantomData<&'a ()>,
47691}
47692unsafe impl Send for RenderingFragmentDensityMapAttachmentInfoEXT<'_> {}
47693unsafe impl Sync for RenderingFragmentDensityMapAttachmentInfoEXT<'_> {}
47694impl ::core::default::Default for RenderingFragmentDensityMapAttachmentInfoEXT<'_> {
47695    #[inline]
47696    fn default() -> Self {
47697        Self {
47698            s_type: Self::STRUCTURE_TYPE,
47699            p_next: ::core::ptr::null(),
47700            image_view: ImageView::default(),
47701            image_layout: ImageLayout::default(),
47702            _marker: PhantomData,
47703        }
47704    }
47705}
47706unsafe impl<'a> TaggedStructure for RenderingFragmentDensityMapAttachmentInfoEXT<'a> {
47707    const STRUCTURE_TYPE: StructureType =
47708        StructureType::RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT;
47709}
47710unsafe impl ExtendsRenderingInfo for RenderingFragmentDensityMapAttachmentInfoEXT<'_> {}
47711impl<'a> RenderingFragmentDensityMapAttachmentInfoEXT<'a> {
47712    #[inline]
47713    pub fn image_view(mut self, image_view: ImageView) -> Self {
47714        self.image_view = image_view;
47715        self
47716    }
47717    #[inline]
47718    pub fn image_layout(mut self, image_layout: ImageLayout) -> Self {
47719        self.image_layout = image_layout;
47720        self
47721    }
47722}
47723#[repr(C)]
47724#[cfg_attr(feature = "debug", derive(Debug))]
47725#[derive(Copy, Clone)]
47726#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDynamicRenderingFeatures.html>"]
47727#[must_use]
47728pub struct PhysicalDeviceDynamicRenderingFeatures<'a> {
47729    pub s_type: StructureType,
47730    pub p_next: *mut c_void,
47731    pub dynamic_rendering: Bool32,
47732    pub _marker: PhantomData<&'a ()>,
47733}
47734unsafe impl Send for PhysicalDeviceDynamicRenderingFeatures<'_> {}
47735unsafe impl Sync for PhysicalDeviceDynamicRenderingFeatures<'_> {}
47736impl ::core::default::Default for PhysicalDeviceDynamicRenderingFeatures<'_> {
47737    #[inline]
47738    fn default() -> Self {
47739        Self {
47740            s_type: Self::STRUCTURE_TYPE,
47741            p_next: ::core::ptr::null_mut(),
47742            dynamic_rendering: Bool32::default(),
47743            _marker: PhantomData,
47744        }
47745    }
47746}
47747unsafe impl<'a> TaggedStructure for PhysicalDeviceDynamicRenderingFeatures<'a> {
47748    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES;
47749}
47750unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDynamicRenderingFeatures<'_> {}
47751unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDynamicRenderingFeatures<'_> {}
47752impl<'a> PhysicalDeviceDynamicRenderingFeatures<'a> {
47753    #[inline]
47754    pub fn dynamic_rendering(mut self, dynamic_rendering: bool) -> Self {
47755        self.dynamic_rendering = dynamic_rendering.into();
47756        self
47757    }
47758}
47759#[repr(C)]
47760#[cfg_attr(feature = "debug", derive(Debug))]
47761#[derive(Copy, Clone)]
47762#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCommandBufferInheritanceRenderingInfo.html>"]
47763#[must_use]
47764pub struct CommandBufferInheritanceRenderingInfo<'a> {
47765    pub s_type: StructureType,
47766    pub p_next: *const c_void,
47767    pub flags: RenderingFlags,
47768    pub view_mask: u32,
47769    pub color_attachment_count: u32,
47770    pub p_color_attachment_formats: *const Format,
47771    pub depth_attachment_format: Format,
47772    pub stencil_attachment_format: Format,
47773    pub rasterization_samples: SampleCountFlags,
47774    pub _marker: PhantomData<&'a ()>,
47775}
47776unsafe impl Send for CommandBufferInheritanceRenderingInfo<'_> {}
47777unsafe impl Sync for CommandBufferInheritanceRenderingInfo<'_> {}
47778impl ::core::default::Default for CommandBufferInheritanceRenderingInfo<'_> {
47779    #[inline]
47780    fn default() -> Self {
47781        Self {
47782            s_type: Self::STRUCTURE_TYPE,
47783            p_next: ::core::ptr::null(),
47784            flags: RenderingFlags::default(),
47785            view_mask: u32::default(),
47786            color_attachment_count: u32::default(),
47787            p_color_attachment_formats: ::core::ptr::null(),
47788            depth_attachment_format: Format::default(),
47789            stencil_attachment_format: Format::default(),
47790            rasterization_samples: SampleCountFlags::default(),
47791            _marker: PhantomData,
47792        }
47793    }
47794}
47795unsafe impl<'a> TaggedStructure for CommandBufferInheritanceRenderingInfo<'a> {
47796    const STRUCTURE_TYPE: StructureType = StructureType::COMMAND_BUFFER_INHERITANCE_RENDERING_INFO;
47797}
47798unsafe impl ExtendsCommandBufferInheritanceInfo for CommandBufferInheritanceRenderingInfo<'_> {}
47799impl<'a> CommandBufferInheritanceRenderingInfo<'a> {
47800    #[inline]
47801    pub fn flags(mut self, flags: RenderingFlags) -> Self {
47802        self.flags = flags;
47803        self
47804    }
47805    #[inline]
47806    pub fn view_mask(mut self, view_mask: u32) -> Self {
47807        self.view_mask = view_mask;
47808        self
47809    }
47810    #[inline]
47811    pub fn color_attachment_formats(mut self, color_attachment_formats: &'a [Format]) -> Self {
47812        self.color_attachment_count = color_attachment_formats.len() as _;
47813        self.p_color_attachment_formats = color_attachment_formats.as_ptr();
47814        self
47815    }
47816    #[inline]
47817    pub fn depth_attachment_format(mut self, depth_attachment_format: Format) -> Self {
47818        self.depth_attachment_format = depth_attachment_format;
47819        self
47820    }
47821    #[inline]
47822    pub fn stencil_attachment_format(mut self, stencil_attachment_format: Format) -> Self {
47823        self.stencil_attachment_format = stencil_attachment_format;
47824        self
47825    }
47826    #[inline]
47827    pub fn rasterization_samples(mut self, rasterization_samples: SampleCountFlags) -> Self {
47828        self.rasterization_samples = rasterization_samples;
47829        self
47830    }
47831}
47832#[repr(C)]
47833#[cfg_attr(feature = "debug", derive(Debug))]
47834#[derive(Copy, Clone)]
47835#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAttachmentSampleCountInfoAMD.html>"]
47836#[must_use]
47837pub struct AttachmentSampleCountInfoAMD<'a> {
47838    pub s_type: StructureType,
47839    pub p_next: *const c_void,
47840    pub color_attachment_count: u32,
47841    pub p_color_attachment_samples: *const SampleCountFlags,
47842    pub depth_stencil_attachment_samples: SampleCountFlags,
47843    pub _marker: PhantomData<&'a ()>,
47844}
47845unsafe impl Send for AttachmentSampleCountInfoAMD<'_> {}
47846unsafe impl Sync for AttachmentSampleCountInfoAMD<'_> {}
47847impl ::core::default::Default for AttachmentSampleCountInfoAMD<'_> {
47848    #[inline]
47849    fn default() -> Self {
47850        Self {
47851            s_type: Self::STRUCTURE_TYPE,
47852            p_next: ::core::ptr::null(),
47853            color_attachment_count: u32::default(),
47854            p_color_attachment_samples: ::core::ptr::null(),
47855            depth_stencil_attachment_samples: SampleCountFlags::default(),
47856            _marker: PhantomData,
47857        }
47858    }
47859}
47860unsafe impl<'a> TaggedStructure for AttachmentSampleCountInfoAMD<'a> {
47861    const STRUCTURE_TYPE: StructureType = StructureType::ATTACHMENT_SAMPLE_COUNT_INFO_AMD;
47862}
47863unsafe impl ExtendsCommandBufferInheritanceInfo for AttachmentSampleCountInfoAMD<'_> {}
47864unsafe impl ExtendsGraphicsPipelineCreateInfo for AttachmentSampleCountInfoAMD<'_> {}
47865impl<'a> AttachmentSampleCountInfoAMD<'a> {
47866    #[inline]
47867    pub fn color_attachment_samples(
47868        mut self,
47869        color_attachment_samples: &'a [SampleCountFlags],
47870    ) -> Self {
47871        self.color_attachment_count = color_attachment_samples.len() as _;
47872        self.p_color_attachment_samples = color_attachment_samples.as_ptr();
47873        self
47874    }
47875    #[inline]
47876    pub fn depth_stencil_attachment_samples(
47877        mut self,
47878        depth_stencil_attachment_samples: SampleCountFlags,
47879    ) -> Self {
47880        self.depth_stencil_attachment_samples = depth_stencil_attachment_samples;
47881        self
47882    }
47883}
47884#[repr(C)]
47885#[cfg_attr(feature = "debug", derive(Debug))]
47886#[derive(Copy, Clone)]
47887#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultiviewPerViewAttributesInfoNVX.html>"]
47888#[must_use]
47889pub struct MultiviewPerViewAttributesInfoNVX<'a> {
47890    pub s_type: StructureType,
47891    pub p_next: *const c_void,
47892    pub per_view_attributes: Bool32,
47893    pub per_view_attributes_position_x_only: Bool32,
47894    pub _marker: PhantomData<&'a ()>,
47895}
47896unsafe impl Send for MultiviewPerViewAttributesInfoNVX<'_> {}
47897unsafe impl Sync for MultiviewPerViewAttributesInfoNVX<'_> {}
47898impl ::core::default::Default for MultiviewPerViewAttributesInfoNVX<'_> {
47899    #[inline]
47900    fn default() -> Self {
47901        Self {
47902            s_type: Self::STRUCTURE_TYPE,
47903            p_next: ::core::ptr::null(),
47904            per_view_attributes: Bool32::default(),
47905            per_view_attributes_position_x_only: Bool32::default(),
47906            _marker: PhantomData,
47907        }
47908    }
47909}
47910unsafe impl<'a> TaggedStructure for MultiviewPerViewAttributesInfoNVX<'a> {
47911    const STRUCTURE_TYPE: StructureType = StructureType::MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX;
47912}
47913unsafe impl ExtendsCommandBufferInheritanceInfo for MultiviewPerViewAttributesInfoNVX<'_> {}
47914unsafe impl ExtendsGraphicsPipelineCreateInfo for MultiviewPerViewAttributesInfoNVX<'_> {}
47915unsafe impl ExtendsRenderingInfo for MultiviewPerViewAttributesInfoNVX<'_> {}
47916impl<'a> MultiviewPerViewAttributesInfoNVX<'a> {
47917    #[inline]
47918    pub fn per_view_attributes(mut self, per_view_attributes: bool) -> Self {
47919        self.per_view_attributes = per_view_attributes.into();
47920        self
47921    }
47922    #[inline]
47923    pub fn per_view_attributes_position_x_only(
47924        mut self,
47925        per_view_attributes_position_x_only: bool,
47926    ) -> Self {
47927        self.per_view_attributes_position_x_only = per_view_attributes_position_x_only.into();
47928        self
47929    }
47930}
47931#[repr(C)]
47932#[cfg_attr(feature = "debug", derive(Debug))]
47933#[derive(Copy, Clone)]
47934#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageViewMinLodFeaturesEXT.html>"]
47935#[must_use]
47936pub struct PhysicalDeviceImageViewMinLodFeaturesEXT<'a> {
47937    pub s_type: StructureType,
47938    pub p_next: *mut c_void,
47939    pub min_lod: Bool32,
47940    pub _marker: PhantomData<&'a ()>,
47941}
47942unsafe impl Send for PhysicalDeviceImageViewMinLodFeaturesEXT<'_> {}
47943unsafe impl Sync for PhysicalDeviceImageViewMinLodFeaturesEXT<'_> {}
47944impl ::core::default::Default for PhysicalDeviceImageViewMinLodFeaturesEXT<'_> {
47945    #[inline]
47946    fn default() -> Self {
47947        Self {
47948            s_type: Self::STRUCTURE_TYPE,
47949            p_next: ::core::ptr::null_mut(),
47950            min_lod: Bool32::default(),
47951            _marker: PhantomData,
47952        }
47953    }
47954}
47955unsafe impl<'a> TaggedStructure for PhysicalDeviceImageViewMinLodFeaturesEXT<'a> {
47956    const STRUCTURE_TYPE: StructureType =
47957        StructureType::PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT;
47958}
47959unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImageViewMinLodFeaturesEXT<'_> {}
47960unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageViewMinLodFeaturesEXT<'_> {}
47961impl<'a> PhysicalDeviceImageViewMinLodFeaturesEXT<'a> {
47962    #[inline]
47963    pub fn min_lod(mut self, min_lod: bool) -> Self {
47964        self.min_lod = min_lod.into();
47965        self
47966    }
47967}
47968#[repr(C)]
47969#[cfg_attr(feature = "debug", derive(Debug))]
47970#[derive(Copy, Clone)]
47971#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewMinLodCreateInfoEXT.html>"]
47972#[must_use]
47973pub struct ImageViewMinLodCreateInfoEXT<'a> {
47974    pub s_type: StructureType,
47975    pub p_next: *const c_void,
47976    pub min_lod: f32,
47977    pub _marker: PhantomData<&'a ()>,
47978}
47979unsafe impl Send for ImageViewMinLodCreateInfoEXT<'_> {}
47980unsafe impl Sync for ImageViewMinLodCreateInfoEXT<'_> {}
47981impl ::core::default::Default for ImageViewMinLodCreateInfoEXT<'_> {
47982    #[inline]
47983    fn default() -> Self {
47984        Self {
47985            s_type: Self::STRUCTURE_TYPE,
47986            p_next: ::core::ptr::null(),
47987            min_lod: f32::default(),
47988            _marker: PhantomData,
47989        }
47990    }
47991}
47992unsafe impl<'a> TaggedStructure for ImageViewMinLodCreateInfoEXT<'a> {
47993    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT;
47994}
47995unsafe impl ExtendsImageViewCreateInfo for ImageViewMinLodCreateInfoEXT<'_> {}
47996impl<'a> ImageViewMinLodCreateInfoEXT<'a> {
47997    #[inline]
47998    pub fn min_lod(mut self, min_lod: f32) -> Self {
47999        self.min_lod = min_lod;
48000        self
48001    }
48002}
48003#[repr(C)]
48004#[cfg_attr(feature = "debug", derive(Debug))]
48005#[derive(Copy, Clone)]
48006#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT.html>"]
48007#[must_use]
48008pub struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'a> {
48009    pub s_type: StructureType,
48010    pub p_next: *mut c_void,
48011    pub rasterization_order_color_attachment_access: Bool32,
48012    pub rasterization_order_depth_attachment_access: Bool32,
48013    pub rasterization_order_stencil_attachment_access: Bool32,
48014    pub _marker: PhantomData<&'a ()>,
48015}
48016unsafe impl Send for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'_> {}
48017unsafe impl Sync for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'_> {}
48018impl ::core::default::Default for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'_> {
48019    #[inline]
48020    fn default() -> Self {
48021        Self {
48022            s_type: Self::STRUCTURE_TYPE,
48023            p_next: ::core::ptr::null_mut(),
48024            rasterization_order_color_attachment_access: Bool32::default(),
48025            rasterization_order_depth_attachment_access: Bool32::default(),
48026            rasterization_order_stencil_attachment_access: Bool32::default(),
48027            _marker: PhantomData,
48028        }
48029    }
48030}
48031unsafe impl<'a> TaggedStructure
48032    for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'a>
48033{
48034    const STRUCTURE_TYPE: StructureType =
48035        StructureType::PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT;
48036}
48037unsafe impl ExtendsPhysicalDeviceFeatures2
48038    for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'_>
48039{
48040}
48041unsafe impl ExtendsDeviceCreateInfo
48042    for PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'_>
48043{
48044}
48045impl<'a> PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT<'a> {
48046    #[inline]
48047    pub fn rasterization_order_color_attachment_access(
48048        mut self,
48049        rasterization_order_color_attachment_access: bool,
48050    ) -> Self {
48051        self.rasterization_order_color_attachment_access =
48052            rasterization_order_color_attachment_access.into();
48053        self
48054    }
48055    #[inline]
48056    pub fn rasterization_order_depth_attachment_access(
48057        mut self,
48058        rasterization_order_depth_attachment_access: bool,
48059    ) -> Self {
48060        self.rasterization_order_depth_attachment_access =
48061            rasterization_order_depth_attachment_access.into();
48062        self
48063    }
48064    #[inline]
48065    pub fn rasterization_order_stencil_attachment_access(
48066        mut self,
48067        rasterization_order_stencil_attachment_access: bool,
48068    ) -> Self {
48069        self.rasterization_order_stencil_attachment_access =
48070            rasterization_order_stencil_attachment_access.into();
48071        self
48072    }
48073}
48074#[repr(C)]
48075#[cfg_attr(feature = "debug", derive(Debug))]
48076#[derive(Copy, Clone)]
48077#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLinearColorAttachmentFeaturesNV.html>"]
48078#[must_use]
48079pub struct PhysicalDeviceLinearColorAttachmentFeaturesNV<'a> {
48080    pub s_type: StructureType,
48081    pub p_next: *mut c_void,
48082    pub linear_color_attachment: Bool32,
48083    pub _marker: PhantomData<&'a ()>,
48084}
48085unsafe impl Send for PhysicalDeviceLinearColorAttachmentFeaturesNV<'_> {}
48086unsafe impl Sync for PhysicalDeviceLinearColorAttachmentFeaturesNV<'_> {}
48087impl ::core::default::Default for PhysicalDeviceLinearColorAttachmentFeaturesNV<'_> {
48088    #[inline]
48089    fn default() -> Self {
48090        Self {
48091            s_type: Self::STRUCTURE_TYPE,
48092            p_next: ::core::ptr::null_mut(),
48093            linear_color_attachment: Bool32::default(),
48094            _marker: PhantomData,
48095        }
48096    }
48097}
48098unsafe impl<'a> TaggedStructure for PhysicalDeviceLinearColorAttachmentFeaturesNV<'a> {
48099    const STRUCTURE_TYPE: StructureType =
48100        StructureType::PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV;
48101}
48102unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceLinearColorAttachmentFeaturesNV<'_> {}
48103unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceLinearColorAttachmentFeaturesNV<'_> {}
48104impl<'a> PhysicalDeviceLinearColorAttachmentFeaturesNV<'a> {
48105    #[inline]
48106    pub fn linear_color_attachment(mut self, linear_color_attachment: bool) -> Self {
48107        self.linear_color_attachment = linear_color_attachment.into();
48108        self
48109    }
48110}
48111#[repr(C)]
48112#[cfg_attr(feature = "debug", derive(Debug))]
48113#[derive(Copy, Clone)]
48114#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT.html>"]
48115#[must_use]
48116pub struct PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'a> {
48117    pub s_type: StructureType,
48118    pub p_next: *mut c_void,
48119    pub graphics_pipeline_library: Bool32,
48120    pub _marker: PhantomData<&'a ()>,
48121}
48122unsafe impl Send for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'_> {}
48123unsafe impl Sync for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'_> {}
48124impl ::core::default::Default for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'_> {
48125    #[inline]
48126    fn default() -> Self {
48127        Self {
48128            s_type: Self::STRUCTURE_TYPE,
48129            p_next: ::core::ptr::null_mut(),
48130            graphics_pipeline_library: Bool32::default(),
48131            _marker: PhantomData,
48132        }
48133    }
48134}
48135unsafe impl<'a> TaggedStructure for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'a> {
48136    const STRUCTURE_TYPE: StructureType =
48137        StructureType::PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT;
48138}
48139unsafe impl ExtendsPhysicalDeviceFeatures2
48140    for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'_>
48141{
48142}
48143unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'_> {}
48144impl<'a> PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT<'a> {
48145    #[inline]
48146    pub fn graphics_pipeline_library(mut self, graphics_pipeline_library: bool) -> Self {
48147        self.graphics_pipeline_library = graphics_pipeline_library.into();
48148        self
48149    }
48150}
48151#[repr(C)]
48152#[cfg_attr(feature = "debug", derive(Debug))]
48153#[derive(Copy, Clone)]
48154#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.html>"]
48155#[must_use]
48156pub struct PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'a> {
48157    pub s_type: StructureType,
48158    pub p_next: *mut c_void,
48159    pub graphics_pipeline_library_fast_linking: Bool32,
48160    pub graphics_pipeline_library_independent_interpolation_decoration: Bool32,
48161    pub _marker: PhantomData<&'a ()>,
48162}
48163unsafe impl Send for PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'_> {}
48164unsafe impl Sync for PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'_> {}
48165impl ::core::default::Default for PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'_> {
48166    #[inline]
48167    fn default() -> Self {
48168        Self {
48169            s_type: Self::STRUCTURE_TYPE,
48170            p_next: ::core::ptr::null_mut(),
48171            graphics_pipeline_library_fast_linking: Bool32::default(),
48172            graphics_pipeline_library_independent_interpolation_decoration: Bool32::default(),
48173            _marker: PhantomData,
48174        }
48175    }
48176}
48177unsafe impl<'a> TaggedStructure for PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'a> {
48178    const STRUCTURE_TYPE: StructureType =
48179        StructureType::PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT;
48180}
48181unsafe impl ExtendsPhysicalDeviceProperties2
48182    for PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'_>
48183{
48184}
48185impl<'a> PhysicalDeviceGraphicsPipelineLibraryPropertiesEXT<'a> {
48186    #[inline]
48187    pub fn graphics_pipeline_library_fast_linking(
48188        mut self,
48189        graphics_pipeline_library_fast_linking: bool,
48190    ) -> Self {
48191        self.graphics_pipeline_library_fast_linking = graphics_pipeline_library_fast_linking.into();
48192        self
48193    }
48194    #[inline]
48195    pub fn graphics_pipeline_library_independent_interpolation_decoration(
48196        mut self,
48197        graphics_pipeline_library_independent_interpolation_decoration: bool,
48198    ) -> Self {
48199        self.graphics_pipeline_library_independent_interpolation_decoration =
48200            graphics_pipeline_library_independent_interpolation_decoration.into();
48201        self
48202    }
48203}
48204#[repr(C)]
48205#[cfg_attr(feature = "debug", derive(Debug))]
48206#[derive(Copy, Clone)]
48207#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGraphicsPipelineLibraryCreateInfoEXT.html>"]
48208#[must_use]
48209pub struct GraphicsPipelineLibraryCreateInfoEXT<'a> {
48210    pub s_type: StructureType,
48211    pub p_next: *const c_void,
48212    pub flags: GraphicsPipelineLibraryFlagsEXT,
48213    pub _marker: PhantomData<&'a ()>,
48214}
48215unsafe impl Send for GraphicsPipelineLibraryCreateInfoEXT<'_> {}
48216unsafe impl Sync for GraphicsPipelineLibraryCreateInfoEXT<'_> {}
48217impl ::core::default::Default for GraphicsPipelineLibraryCreateInfoEXT<'_> {
48218    #[inline]
48219    fn default() -> Self {
48220        Self {
48221            s_type: Self::STRUCTURE_TYPE,
48222            p_next: ::core::ptr::null(),
48223            flags: GraphicsPipelineLibraryFlagsEXT::default(),
48224            _marker: PhantomData,
48225        }
48226    }
48227}
48228unsafe impl<'a> TaggedStructure for GraphicsPipelineLibraryCreateInfoEXT<'a> {
48229    const STRUCTURE_TYPE: StructureType = StructureType::GRAPHICS_PIPELINE_LIBRARY_CREATE_INFO_EXT;
48230}
48231unsafe impl ExtendsGraphicsPipelineCreateInfo for GraphicsPipelineLibraryCreateInfoEXT<'_> {}
48232impl<'a> GraphicsPipelineLibraryCreateInfoEXT<'a> {
48233    #[inline]
48234    pub fn flags(mut self, flags: GraphicsPipelineLibraryFlagsEXT) -> Self {
48235        self.flags = flags;
48236        self
48237    }
48238}
48239#[repr(C)]
48240#[cfg_attr(feature = "debug", derive(Debug))]
48241#[derive(Copy, Clone)]
48242#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorSetHostMappingFeaturesVALVE.html>"]
48243#[must_use]
48244pub struct PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'a> {
48245    pub s_type: StructureType,
48246    pub p_next: *mut c_void,
48247    pub descriptor_set_host_mapping: Bool32,
48248    pub _marker: PhantomData<&'a ()>,
48249}
48250unsafe impl Send for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'_> {}
48251unsafe impl Sync for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'_> {}
48252impl ::core::default::Default for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'_> {
48253    #[inline]
48254    fn default() -> Self {
48255        Self {
48256            s_type: Self::STRUCTURE_TYPE,
48257            p_next: ::core::ptr::null_mut(),
48258            descriptor_set_host_mapping: Bool32::default(),
48259            _marker: PhantomData,
48260        }
48261    }
48262}
48263unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'a> {
48264    const STRUCTURE_TYPE: StructureType =
48265        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE;
48266}
48267unsafe impl ExtendsPhysicalDeviceFeatures2
48268    for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'_>
48269{
48270}
48271unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'_> {}
48272impl<'a> PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE<'a> {
48273    #[inline]
48274    pub fn descriptor_set_host_mapping(mut self, descriptor_set_host_mapping: bool) -> Self {
48275        self.descriptor_set_host_mapping = descriptor_set_host_mapping.into();
48276        self
48277    }
48278}
48279#[repr(C)]
48280#[cfg_attr(feature = "debug", derive(Debug))]
48281#[derive(Copy, Clone)]
48282#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetBindingReferenceVALVE.html>"]
48283#[must_use]
48284pub struct DescriptorSetBindingReferenceVALVE<'a> {
48285    pub s_type: StructureType,
48286    pub p_next: *const c_void,
48287    pub descriptor_set_layout: DescriptorSetLayout,
48288    pub binding: u32,
48289    pub _marker: PhantomData<&'a ()>,
48290}
48291unsafe impl Send for DescriptorSetBindingReferenceVALVE<'_> {}
48292unsafe impl Sync for DescriptorSetBindingReferenceVALVE<'_> {}
48293impl ::core::default::Default for DescriptorSetBindingReferenceVALVE<'_> {
48294    #[inline]
48295    fn default() -> Self {
48296        Self {
48297            s_type: Self::STRUCTURE_TYPE,
48298            p_next: ::core::ptr::null(),
48299            descriptor_set_layout: DescriptorSetLayout::default(),
48300            binding: u32::default(),
48301            _marker: PhantomData,
48302        }
48303    }
48304}
48305unsafe impl<'a> TaggedStructure for DescriptorSetBindingReferenceVALVE<'a> {
48306    const STRUCTURE_TYPE: StructureType = StructureType::DESCRIPTOR_SET_BINDING_REFERENCE_VALVE;
48307}
48308impl<'a> DescriptorSetBindingReferenceVALVE<'a> {
48309    #[inline]
48310    pub fn descriptor_set_layout(mut self, descriptor_set_layout: DescriptorSetLayout) -> Self {
48311        self.descriptor_set_layout = descriptor_set_layout;
48312        self
48313    }
48314    #[inline]
48315    pub fn binding(mut self, binding: u32) -> Self {
48316        self.binding = binding;
48317        self
48318    }
48319}
48320#[repr(C)]
48321#[cfg_attr(feature = "debug", derive(Debug))]
48322#[derive(Copy, Clone)]
48323#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutHostMappingInfoVALVE.html>"]
48324#[must_use]
48325pub struct DescriptorSetLayoutHostMappingInfoVALVE<'a> {
48326    pub s_type: StructureType,
48327    pub p_next: *mut c_void,
48328    pub descriptor_offset: usize,
48329    pub descriptor_size: u32,
48330    pub _marker: PhantomData<&'a ()>,
48331}
48332unsafe impl Send for DescriptorSetLayoutHostMappingInfoVALVE<'_> {}
48333unsafe impl Sync for DescriptorSetLayoutHostMappingInfoVALVE<'_> {}
48334impl ::core::default::Default for DescriptorSetLayoutHostMappingInfoVALVE<'_> {
48335    #[inline]
48336    fn default() -> Self {
48337        Self {
48338            s_type: Self::STRUCTURE_TYPE,
48339            p_next: ::core::ptr::null_mut(),
48340            descriptor_offset: usize::default(),
48341            descriptor_size: u32::default(),
48342            _marker: PhantomData,
48343        }
48344    }
48345}
48346unsafe impl<'a> TaggedStructure for DescriptorSetLayoutHostMappingInfoVALVE<'a> {
48347    const STRUCTURE_TYPE: StructureType =
48348        StructureType::DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE;
48349}
48350impl<'a> DescriptorSetLayoutHostMappingInfoVALVE<'a> {
48351    #[inline]
48352    pub fn descriptor_offset(mut self, descriptor_offset: usize) -> Self {
48353        self.descriptor_offset = descriptor_offset;
48354        self
48355    }
48356    #[inline]
48357    pub fn descriptor_size(mut self, descriptor_size: u32) -> Self {
48358        self.descriptor_size = descriptor_size;
48359        self
48360    }
48361}
48362#[repr(C)]
48363#[cfg_attr(feature = "debug", derive(Debug))]
48364#[derive(Copy, Clone)]
48365#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceNestedCommandBufferFeaturesEXT.html>"]
48366#[must_use]
48367pub struct PhysicalDeviceNestedCommandBufferFeaturesEXT<'a> {
48368    pub s_type: StructureType,
48369    pub p_next: *mut c_void,
48370    pub nested_command_buffer: Bool32,
48371    pub nested_command_buffer_rendering: Bool32,
48372    pub nested_command_buffer_simultaneous_use: Bool32,
48373    pub _marker: PhantomData<&'a ()>,
48374}
48375unsafe impl Send for PhysicalDeviceNestedCommandBufferFeaturesEXT<'_> {}
48376unsafe impl Sync for PhysicalDeviceNestedCommandBufferFeaturesEXT<'_> {}
48377impl ::core::default::Default for PhysicalDeviceNestedCommandBufferFeaturesEXT<'_> {
48378    #[inline]
48379    fn default() -> Self {
48380        Self {
48381            s_type: Self::STRUCTURE_TYPE,
48382            p_next: ::core::ptr::null_mut(),
48383            nested_command_buffer: Bool32::default(),
48384            nested_command_buffer_rendering: Bool32::default(),
48385            nested_command_buffer_simultaneous_use: Bool32::default(),
48386            _marker: PhantomData,
48387        }
48388    }
48389}
48390unsafe impl<'a> TaggedStructure for PhysicalDeviceNestedCommandBufferFeaturesEXT<'a> {
48391    const STRUCTURE_TYPE: StructureType =
48392        StructureType::PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_FEATURES_EXT;
48393}
48394unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceNestedCommandBufferFeaturesEXT<'_> {}
48395unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceNestedCommandBufferFeaturesEXT<'_> {}
48396impl<'a> PhysicalDeviceNestedCommandBufferFeaturesEXT<'a> {
48397    #[inline]
48398    pub fn nested_command_buffer(mut self, nested_command_buffer: bool) -> Self {
48399        self.nested_command_buffer = nested_command_buffer.into();
48400        self
48401    }
48402    #[inline]
48403    pub fn nested_command_buffer_rendering(
48404        mut self,
48405        nested_command_buffer_rendering: bool,
48406    ) -> Self {
48407        self.nested_command_buffer_rendering = nested_command_buffer_rendering.into();
48408        self
48409    }
48410    #[inline]
48411    pub fn nested_command_buffer_simultaneous_use(
48412        mut self,
48413        nested_command_buffer_simultaneous_use: bool,
48414    ) -> Self {
48415        self.nested_command_buffer_simultaneous_use = nested_command_buffer_simultaneous_use.into();
48416        self
48417    }
48418}
48419#[repr(C)]
48420#[cfg_attr(feature = "debug", derive(Debug))]
48421#[derive(Copy, Clone)]
48422#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceNestedCommandBufferPropertiesEXT.html>"]
48423#[must_use]
48424pub struct PhysicalDeviceNestedCommandBufferPropertiesEXT<'a> {
48425    pub s_type: StructureType,
48426    pub p_next: *mut c_void,
48427    pub max_command_buffer_nesting_level: u32,
48428    pub _marker: PhantomData<&'a ()>,
48429}
48430unsafe impl Send for PhysicalDeviceNestedCommandBufferPropertiesEXT<'_> {}
48431unsafe impl Sync for PhysicalDeviceNestedCommandBufferPropertiesEXT<'_> {}
48432impl ::core::default::Default for PhysicalDeviceNestedCommandBufferPropertiesEXT<'_> {
48433    #[inline]
48434    fn default() -> Self {
48435        Self {
48436            s_type: Self::STRUCTURE_TYPE,
48437            p_next: ::core::ptr::null_mut(),
48438            max_command_buffer_nesting_level: u32::default(),
48439            _marker: PhantomData,
48440        }
48441    }
48442}
48443unsafe impl<'a> TaggedStructure for PhysicalDeviceNestedCommandBufferPropertiesEXT<'a> {
48444    const STRUCTURE_TYPE: StructureType =
48445        StructureType::PHYSICAL_DEVICE_NESTED_COMMAND_BUFFER_PROPERTIES_EXT;
48446}
48447unsafe impl ExtendsPhysicalDeviceProperties2
48448    for PhysicalDeviceNestedCommandBufferPropertiesEXT<'_>
48449{
48450}
48451impl<'a> PhysicalDeviceNestedCommandBufferPropertiesEXT<'a> {
48452    #[inline]
48453    pub fn max_command_buffer_nesting_level(
48454        mut self,
48455        max_command_buffer_nesting_level: u32,
48456    ) -> Self {
48457        self.max_command_buffer_nesting_level = max_command_buffer_nesting_level;
48458        self
48459    }
48460}
48461#[repr(C)]
48462#[cfg_attr(feature = "debug", derive(Debug))]
48463#[derive(Copy, Clone)]
48464#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT.html>"]
48465#[must_use]
48466pub struct PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'a> {
48467    pub s_type: StructureType,
48468    pub p_next: *mut c_void,
48469    pub shader_module_identifier: Bool32,
48470    pub _marker: PhantomData<&'a ()>,
48471}
48472unsafe impl Send for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'_> {}
48473unsafe impl Sync for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'_> {}
48474impl ::core::default::Default for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'_> {
48475    #[inline]
48476    fn default() -> Self {
48477        Self {
48478            s_type: Self::STRUCTURE_TYPE,
48479            p_next: ::core::ptr::null_mut(),
48480            shader_module_identifier: Bool32::default(),
48481            _marker: PhantomData,
48482        }
48483    }
48484}
48485unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'a> {
48486    const STRUCTURE_TYPE: StructureType =
48487        StructureType::PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT;
48488}
48489unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'_> {}
48490unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'_> {}
48491impl<'a> PhysicalDeviceShaderModuleIdentifierFeaturesEXT<'a> {
48492    #[inline]
48493    pub fn shader_module_identifier(mut self, shader_module_identifier: bool) -> Self {
48494        self.shader_module_identifier = shader_module_identifier.into();
48495        self
48496    }
48497}
48498#[repr(C)]
48499#[cfg_attr(feature = "debug", derive(Debug))]
48500#[derive(Copy, Clone)]
48501#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT.html>"]
48502#[must_use]
48503pub struct PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'a> {
48504    pub s_type: StructureType,
48505    pub p_next: *mut c_void,
48506    pub shader_module_identifier_algorithm_uuid: [u8; UUID_SIZE],
48507    pub _marker: PhantomData<&'a ()>,
48508}
48509unsafe impl Send for PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'_> {}
48510unsafe impl Sync for PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'_> {}
48511impl ::core::default::Default for PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'_> {
48512    #[inline]
48513    fn default() -> Self {
48514        Self {
48515            s_type: Self::STRUCTURE_TYPE,
48516            p_next: ::core::ptr::null_mut(),
48517            shader_module_identifier_algorithm_uuid: unsafe { ::core::mem::zeroed() },
48518            _marker: PhantomData,
48519        }
48520    }
48521}
48522unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'a> {
48523    const STRUCTURE_TYPE: StructureType =
48524        StructureType::PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT;
48525}
48526unsafe impl ExtendsPhysicalDeviceProperties2
48527    for PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'_>
48528{
48529}
48530impl<'a> PhysicalDeviceShaderModuleIdentifierPropertiesEXT<'a> {
48531    #[inline]
48532    pub fn shader_module_identifier_algorithm_uuid(
48533        mut self,
48534        shader_module_identifier_algorithm_uuid: [u8; UUID_SIZE],
48535    ) -> Self {
48536        self.shader_module_identifier_algorithm_uuid = shader_module_identifier_algorithm_uuid;
48537        self
48538    }
48539}
48540#[repr(C)]
48541#[cfg_attr(feature = "debug", derive(Debug))]
48542#[derive(Copy, Clone)]
48543#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineShaderStageModuleIdentifierCreateInfoEXT.html>"]
48544#[must_use]
48545pub struct PipelineShaderStageModuleIdentifierCreateInfoEXT<'a> {
48546    pub s_type: StructureType,
48547    pub p_next: *const c_void,
48548    pub identifier_size: u32,
48549    pub p_identifier: *const u8,
48550    pub _marker: PhantomData<&'a ()>,
48551}
48552unsafe impl Send for PipelineShaderStageModuleIdentifierCreateInfoEXT<'_> {}
48553unsafe impl Sync for PipelineShaderStageModuleIdentifierCreateInfoEXT<'_> {}
48554impl ::core::default::Default for PipelineShaderStageModuleIdentifierCreateInfoEXT<'_> {
48555    #[inline]
48556    fn default() -> Self {
48557        Self {
48558            s_type: Self::STRUCTURE_TYPE,
48559            p_next: ::core::ptr::null(),
48560            identifier_size: u32::default(),
48561            p_identifier: ::core::ptr::null(),
48562            _marker: PhantomData,
48563        }
48564    }
48565}
48566unsafe impl<'a> TaggedStructure for PipelineShaderStageModuleIdentifierCreateInfoEXT<'a> {
48567    const STRUCTURE_TYPE: StructureType =
48568        StructureType::PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT;
48569}
48570unsafe impl ExtendsPipelineShaderStageCreateInfo
48571    for PipelineShaderStageModuleIdentifierCreateInfoEXT<'_>
48572{
48573}
48574impl<'a> PipelineShaderStageModuleIdentifierCreateInfoEXT<'a> {
48575    #[inline]
48576    pub fn identifier(mut self, identifier: &'a [u8]) -> Self {
48577        self.identifier_size = identifier.len() as _;
48578        self.p_identifier = identifier.as_ptr();
48579        self
48580    }
48581}
48582#[repr(C)]
48583#[derive(Copy, Clone)]
48584#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderModuleIdentifierEXT.html>"]
48585#[must_use]
48586pub struct ShaderModuleIdentifierEXT<'a> {
48587    pub s_type: StructureType,
48588    pub p_next: *mut c_void,
48589    pub identifier_size: u32,
48590    pub identifier: [u8; MAX_SHADER_MODULE_IDENTIFIER_SIZE_EXT],
48591    pub _marker: PhantomData<&'a ()>,
48592}
48593unsafe impl Send for ShaderModuleIdentifierEXT<'_> {}
48594unsafe impl Sync for ShaderModuleIdentifierEXT<'_> {}
48595#[cfg(feature = "debug")]
48596impl fmt::Debug for ShaderModuleIdentifierEXT<'_> {
48597    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
48598        fmt.debug_struct("ShaderModuleIdentifierEXT")
48599            .field("s_type", &self.s_type)
48600            .field("p_next", &self.p_next)
48601            .field("identifier_size", &self.identifier_size)
48602            .field("identifier", &self.identifier_as_slice())
48603            .finish()
48604    }
48605}
48606impl ::core::default::Default for ShaderModuleIdentifierEXT<'_> {
48607    #[inline]
48608    fn default() -> Self {
48609        Self {
48610            s_type: Self::STRUCTURE_TYPE,
48611            p_next: ::core::ptr::null_mut(),
48612            identifier_size: u32::default(),
48613            identifier: unsafe { ::core::mem::zeroed() },
48614            _marker: PhantomData,
48615        }
48616    }
48617}
48618unsafe impl<'a> TaggedStructure for ShaderModuleIdentifierEXT<'a> {
48619    const STRUCTURE_TYPE: StructureType = StructureType::SHADER_MODULE_IDENTIFIER_EXT;
48620}
48621impl<'a> ShaderModuleIdentifierEXT<'a> {
48622    #[inline]
48623    pub fn identifier(mut self, identifier: &'_ [u8]) -> Self {
48624        self.identifier_size = identifier.len() as _;
48625        self.identifier[..identifier.len()].copy_from_slice(identifier);
48626        self
48627    }
48628    #[inline]
48629    pub fn identifier_as_slice(&self) -> &[u8] {
48630        &self.identifier[..self.identifier_size as _]
48631    }
48632}
48633#[repr(C)]
48634#[cfg_attr(feature = "debug", derive(Debug))]
48635#[derive(Copy, Clone)]
48636#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCompressionControlEXT.html>"]
48637#[must_use]
48638pub struct ImageCompressionControlEXT<'a> {
48639    pub s_type: StructureType,
48640    pub p_next: *const c_void,
48641    pub flags: ImageCompressionFlagsEXT,
48642    pub compression_control_plane_count: u32,
48643    pub p_fixed_rate_flags: *mut ImageCompressionFixedRateFlagsEXT,
48644    pub _marker: PhantomData<&'a ()>,
48645}
48646unsafe impl Send for ImageCompressionControlEXT<'_> {}
48647unsafe impl Sync for ImageCompressionControlEXT<'_> {}
48648impl ::core::default::Default for ImageCompressionControlEXT<'_> {
48649    #[inline]
48650    fn default() -> Self {
48651        Self {
48652            s_type: Self::STRUCTURE_TYPE,
48653            p_next: ::core::ptr::null(),
48654            flags: ImageCompressionFlagsEXT::default(),
48655            compression_control_plane_count: u32::default(),
48656            p_fixed_rate_flags: ::core::ptr::null_mut(),
48657            _marker: PhantomData,
48658        }
48659    }
48660}
48661unsafe impl<'a> TaggedStructure for ImageCompressionControlEXT<'a> {
48662    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_COMPRESSION_CONTROL_EXT;
48663}
48664unsafe impl ExtendsImageCreateInfo for ImageCompressionControlEXT<'_> {}
48665unsafe impl ExtendsSwapchainCreateInfoKHR for ImageCompressionControlEXT<'_> {}
48666unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for ImageCompressionControlEXT<'_> {}
48667impl<'a> ImageCompressionControlEXT<'a> {
48668    #[inline]
48669    pub fn flags(mut self, flags: ImageCompressionFlagsEXT) -> Self {
48670        self.flags = flags;
48671        self
48672    }
48673    #[inline]
48674    pub fn fixed_rate_flags(
48675        mut self,
48676        fixed_rate_flags: &'a mut [ImageCompressionFixedRateFlagsEXT],
48677    ) -> Self {
48678        self.compression_control_plane_count = fixed_rate_flags.len() as _;
48679        self.p_fixed_rate_flags = fixed_rate_flags.as_mut_ptr();
48680        self
48681    }
48682}
48683#[repr(C)]
48684#[cfg_attr(feature = "debug", derive(Debug))]
48685#[derive(Copy, Clone)]
48686#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageCompressionControlFeaturesEXT.html>"]
48687#[must_use]
48688pub struct PhysicalDeviceImageCompressionControlFeaturesEXT<'a> {
48689    pub s_type: StructureType,
48690    pub p_next: *mut c_void,
48691    pub image_compression_control: Bool32,
48692    pub _marker: PhantomData<&'a ()>,
48693}
48694unsafe impl Send for PhysicalDeviceImageCompressionControlFeaturesEXT<'_> {}
48695unsafe impl Sync for PhysicalDeviceImageCompressionControlFeaturesEXT<'_> {}
48696impl ::core::default::Default for PhysicalDeviceImageCompressionControlFeaturesEXT<'_> {
48697    #[inline]
48698    fn default() -> Self {
48699        Self {
48700            s_type: Self::STRUCTURE_TYPE,
48701            p_next: ::core::ptr::null_mut(),
48702            image_compression_control: Bool32::default(),
48703            _marker: PhantomData,
48704        }
48705    }
48706}
48707unsafe impl<'a> TaggedStructure for PhysicalDeviceImageCompressionControlFeaturesEXT<'a> {
48708    const STRUCTURE_TYPE: StructureType =
48709        StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT;
48710}
48711unsafe impl ExtendsPhysicalDeviceFeatures2
48712    for PhysicalDeviceImageCompressionControlFeaturesEXT<'_>
48713{
48714}
48715unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageCompressionControlFeaturesEXT<'_> {}
48716impl<'a> PhysicalDeviceImageCompressionControlFeaturesEXT<'a> {
48717    #[inline]
48718    pub fn image_compression_control(mut self, image_compression_control: bool) -> Self {
48719        self.image_compression_control = image_compression_control.into();
48720        self
48721    }
48722}
48723#[repr(C)]
48724#[cfg_attr(feature = "debug", derive(Debug))]
48725#[derive(Copy, Clone)]
48726#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCompressionPropertiesEXT.html>"]
48727#[must_use]
48728pub struct ImageCompressionPropertiesEXT<'a> {
48729    pub s_type: StructureType,
48730    pub p_next: *mut c_void,
48731    pub image_compression_flags: ImageCompressionFlagsEXT,
48732    pub image_compression_fixed_rate_flags: ImageCompressionFixedRateFlagsEXT,
48733    pub _marker: PhantomData<&'a ()>,
48734}
48735unsafe impl Send for ImageCompressionPropertiesEXT<'_> {}
48736unsafe impl Sync for ImageCompressionPropertiesEXT<'_> {}
48737impl ::core::default::Default for ImageCompressionPropertiesEXT<'_> {
48738    #[inline]
48739    fn default() -> Self {
48740        Self {
48741            s_type: Self::STRUCTURE_TYPE,
48742            p_next: ::core::ptr::null_mut(),
48743            image_compression_flags: ImageCompressionFlagsEXT::default(),
48744            image_compression_fixed_rate_flags: ImageCompressionFixedRateFlagsEXT::default(),
48745            _marker: PhantomData,
48746        }
48747    }
48748}
48749unsafe impl<'a> TaggedStructure for ImageCompressionPropertiesEXT<'a> {
48750    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_COMPRESSION_PROPERTIES_EXT;
48751}
48752unsafe impl ExtendsImageFormatProperties2 for ImageCompressionPropertiesEXT<'_> {}
48753unsafe impl ExtendsSurfaceFormat2KHR for ImageCompressionPropertiesEXT<'_> {}
48754unsafe impl ExtendsSubresourceLayout2KHR for ImageCompressionPropertiesEXT<'_> {}
48755impl<'a> ImageCompressionPropertiesEXT<'a> {
48756    #[inline]
48757    pub fn image_compression_flags(
48758        mut self,
48759        image_compression_flags: ImageCompressionFlagsEXT,
48760    ) -> Self {
48761        self.image_compression_flags = image_compression_flags;
48762        self
48763    }
48764    #[inline]
48765    pub fn image_compression_fixed_rate_flags(
48766        mut self,
48767        image_compression_fixed_rate_flags: ImageCompressionFixedRateFlagsEXT,
48768    ) -> Self {
48769        self.image_compression_fixed_rate_flags = image_compression_fixed_rate_flags;
48770        self
48771    }
48772}
48773#[repr(C)]
48774#[cfg_attr(feature = "debug", derive(Debug))]
48775#[derive(Copy, Clone)]
48776#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT.html>"]
48777#[must_use]
48778pub struct PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'a> {
48779    pub s_type: StructureType,
48780    pub p_next: *mut c_void,
48781    pub image_compression_control_swapchain: Bool32,
48782    pub _marker: PhantomData<&'a ()>,
48783}
48784unsafe impl Send for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'_> {}
48785unsafe impl Sync for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'_> {}
48786impl ::core::default::Default for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'_> {
48787    #[inline]
48788    fn default() -> Self {
48789        Self {
48790            s_type: Self::STRUCTURE_TYPE,
48791            p_next: ::core::ptr::null_mut(),
48792            image_compression_control_swapchain: Bool32::default(),
48793            _marker: PhantomData,
48794        }
48795    }
48796}
48797unsafe impl<'a> TaggedStructure for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'a> {
48798    const STRUCTURE_TYPE: StructureType =
48799        StructureType::PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT;
48800}
48801unsafe impl ExtendsPhysicalDeviceFeatures2
48802    for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'_>
48803{
48804}
48805unsafe impl ExtendsDeviceCreateInfo
48806    for PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'_>
48807{
48808}
48809impl<'a> PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT<'a> {
48810    #[inline]
48811    pub fn image_compression_control_swapchain(
48812        mut self,
48813        image_compression_control_swapchain: bool,
48814    ) -> Self {
48815        self.image_compression_control_swapchain = image_compression_control_swapchain.into();
48816        self
48817    }
48818}
48819#[repr(C)]
48820#[cfg_attr(feature = "debug", derive(Debug))]
48821#[derive(Copy, Clone)]
48822#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageSubresource2KHR.html>"]
48823#[must_use]
48824pub struct ImageSubresource2KHR<'a> {
48825    pub s_type: StructureType,
48826    pub p_next: *mut c_void,
48827    pub image_subresource: ImageSubresource,
48828    pub _marker: PhantomData<&'a ()>,
48829}
48830unsafe impl Send for ImageSubresource2KHR<'_> {}
48831unsafe impl Sync for ImageSubresource2KHR<'_> {}
48832impl ::core::default::Default for ImageSubresource2KHR<'_> {
48833    #[inline]
48834    fn default() -> Self {
48835        Self {
48836            s_type: Self::STRUCTURE_TYPE,
48837            p_next: ::core::ptr::null_mut(),
48838            image_subresource: ImageSubresource::default(),
48839            _marker: PhantomData,
48840        }
48841    }
48842}
48843unsafe impl<'a> TaggedStructure for ImageSubresource2KHR<'a> {
48844    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_SUBRESOURCE_2_KHR;
48845}
48846impl<'a> ImageSubresource2KHR<'a> {
48847    #[inline]
48848    pub fn image_subresource(mut self, image_subresource: ImageSubresource) -> Self {
48849        self.image_subresource = image_subresource;
48850        self
48851    }
48852}
48853#[repr(C)]
48854#[cfg_attr(feature = "debug", derive(Debug))]
48855#[derive(Copy, Clone)]
48856#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSubresourceLayout2KHR.html>"]
48857#[must_use]
48858pub struct SubresourceLayout2KHR<'a> {
48859    pub s_type: StructureType,
48860    pub p_next: *mut c_void,
48861    pub subresource_layout: SubresourceLayout,
48862    pub _marker: PhantomData<&'a ()>,
48863}
48864unsafe impl Send for SubresourceLayout2KHR<'_> {}
48865unsafe impl Sync for SubresourceLayout2KHR<'_> {}
48866impl ::core::default::Default for SubresourceLayout2KHR<'_> {
48867    #[inline]
48868    fn default() -> Self {
48869        Self {
48870            s_type: Self::STRUCTURE_TYPE,
48871            p_next: ::core::ptr::null_mut(),
48872            subresource_layout: SubresourceLayout::default(),
48873            _marker: PhantomData,
48874        }
48875    }
48876}
48877unsafe impl<'a> TaggedStructure for SubresourceLayout2KHR<'a> {
48878    const STRUCTURE_TYPE: StructureType = StructureType::SUBRESOURCE_LAYOUT_2_KHR;
48879}
48880pub unsafe trait ExtendsSubresourceLayout2KHR {}
48881impl<'a> SubresourceLayout2KHR<'a> {
48882    #[inline]
48883    pub fn subresource_layout(mut self, subresource_layout: SubresourceLayout) -> Self {
48884        self.subresource_layout = subresource_layout;
48885        self
48886    }
48887    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
48888    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
48889    #[doc = r" valid extension structs can be pushed into the chain."]
48890    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
48891    #[doc = r" chain will look like `A -> D -> B -> C`."]
48892    pub fn push_next<T: ExtendsSubresourceLayout2KHR + ?Sized>(mut self, next: &'a mut T) -> Self {
48893        unsafe {
48894            let next_ptr = <*mut T>::cast(next);
48895            let last_next = ptr_chain_iter(next).last().unwrap();
48896            (*last_next).p_next = self.p_next as _;
48897            self.p_next = next_ptr;
48898        }
48899        self
48900    }
48901}
48902#[repr(C)]
48903#[cfg_attr(feature = "debug", derive(Debug))]
48904#[derive(Copy, Clone)]
48905#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassCreationControlEXT.html>"]
48906#[must_use]
48907pub struct RenderPassCreationControlEXT<'a> {
48908    pub s_type: StructureType,
48909    pub p_next: *const c_void,
48910    pub disallow_merging: Bool32,
48911    pub _marker: PhantomData<&'a ()>,
48912}
48913unsafe impl Send for RenderPassCreationControlEXT<'_> {}
48914unsafe impl Sync for RenderPassCreationControlEXT<'_> {}
48915impl ::core::default::Default for RenderPassCreationControlEXT<'_> {
48916    #[inline]
48917    fn default() -> Self {
48918        Self {
48919            s_type: Self::STRUCTURE_TYPE,
48920            p_next: ::core::ptr::null(),
48921            disallow_merging: Bool32::default(),
48922            _marker: PhantomData,
48923        }
48924    }
48925}
48926unsafe impl<'a> TaggedStructure for RenderPassCreationControlEXT<'a> {
48927    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_CREATION_CONTROL_EXT;
48928}
48929unsafe impl ExtendsRenderPassCreateInfo2 for RenderPassCreationControlEXT<'_> {}
48930unsafe impl ExtendsSubpassDescription2 for RenderPassCreationControlEXT<'_> {}
48931impl<'a> RenderPassCreationControlEXT<'a> {
48932    #[inline]
48933    pub fn disallow_merging(mut self, disallow_merging: bool) -> Self {
48934        self.disallow_merging = disallow_merging.into();
48935        self
48936    }
48937}
48938#[repr(C)]
48939#[cfg_attr(feature = "debug", derive(Debug))]
48940#[derive(Copy, Clone, Default)]
48941#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassCreationFeedbackInfoEXT.html>"]
48942#[must_use]
48943pub struct RenderPassCreationFeedbackInfoEXT {
48944    pub post_merge_subpass_count: u32,
48945}
48946impl RenderPassCreationFeedbackInfoEXT {
48947    #[inline]
48948    pub fn post_merge_subpass_count(mut self, post_merge_subpass_count: u32) -> Self {
48949        self.post_merge_subpass_count = post_merge_subpass_count;
48950        self
48951    }
48952}
48953#[repr(C)]
48954#[cfg_attr(feature = "debug", derive(Debug))]
48955#[derive(Copy, Clone)]
48956#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassCreationFeedbackCreateInfoEXT.html>"]
48957#[must_use]
48958pub struct RenderPassCreationFeedbackCreateInfoEXT<'a> {
48959    pub s_type: StructureType,
48960    pub p_next: *const c_void,
48961    pub p_render_pass_feedback: *mut RenderPassCreationFeedbackInfoEXT,
48962    pub _marker: PhantomData<&'a ()>,
48963}
48964unsafe impl Send for RenderPassCreationFeedbackCreateInfoEXT<'_> {}
48965unsafe impl Sync for RenderPassCreationFeedbackCreateInfoEXT<'_> {}
48966impl ::core::default::Default for RenderPassCreationFeedbackCreateInfoEXT<'_> {
48967    #[inline]
48968    fn default() -> Self {
48969        Self {
48970            s_type: Self::STRUCTURE_TYPE,
48971            p_next: ::core::ptr::null(),
48972            p_render_pass_feedback: ::core::ptr::null_mut(),
48973            _marker: PhantomData,
48974        }
48975    }
48976}
48977unsafe impl<'a> TaggedStructure for RenderPassCreationFeedbackCreateInfoEXT<'a> {
48978    const STRUCTURE_TYPE: StructureType =
48979        StructureType::RENDER_PASS_CREATION_FEEDBACK_CREATE_INFO_EXT;
48980}
48981unsafe impl ExtendsRenderPassCreateInfo2 for RenderPassCreationFeedbackCreateInfoEXT<'_> {}
48982impl<'a> RenderPassCreationFeedbackCreateInfoEXT<'a> {
48983    #[inline]
48984    pub fn render_pass_feedback(
48985        mut self,
48986        render_pass_feedback: &'a mut RenderPassCreationFeedbackInfoEXT,
48987    ) -> Self {
48988        self.p_render_pass_feedback = render_pass_feedback;
48989        self
48990    }
48991}
48992#[repr(C)]
48993#[derive(Copy, Clone)]
48994#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassSubpassFeedbackInfoEXT.html>"]
48995#[must_use]
48996pub struct RenderPassSubpassFeedbackInfoEXT {
48997    pub subpass_merge_status: SubpassMergeStatusEXT,
48998    pub description: [c_char; MAX_DESCRIPTION_SIZE],
48999    pub post_merge_index: u32,
49000}
49001#[cfg(feature = "debug")]
49002impl fmt::Debug for RenderPassSubpassFeedbackInfoEXT {
49003    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49004        fmt.debug_struct("RenderPassSubpassFeedbackInfoEXT")
49005            .field("subpass_merge_status", &self.subpass_merge_status)
49006            .field("description", &self.description_as_c_str())
49007            .field("post_merge_index", &self.post_merge_index)
49008            .finish()
49009    }
49010}
49011impl ::core::default::Default for RenderPassSubpassFeedbackInfoEXT {
49012    #[inline]
49013    fn default() -> Self {
49014        Self {
49015            subpass_merge_status: SubpassMergeStatusEXT::default(),
49016            description: unsafe { ::core::mem::zeroed() },
49017            post_merge_index: u32::default(),
49018        }
49019    }
49020}
49021impl RenderPassSubpassFeedbackInfoEXT {
49022    #[inline]
49023    pub fn subpass_merge_status(mut self, subpass_merge_status: SubpassMergeStatusEXT) -> Self {
49024        self.subpass_merge_status = subpass_merge_status;
49025        self
49026    }
49027    #[inline]
49028    pub fn description(
49029        mut self,
49030        description: &CStr,
49031    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
49032        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
49033    }
49034    #[inline]
49035    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
49036        wrap_c_str_slice_until_nul(&self.description)
49037    }
49038    #[inline]
49039    pub fn post_merge_index(mut self, post_merge_index: u32) -> Self {
49040        self.post_merge_index = post_merge_index;
49041        self
49042    }
49043}
49044#[repr(C)]
49045#[cfg_attr(feature = "debug", derive(Debug))]
49046#[derive(Copy, Clone)]
49047#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassSubpassFeedbackCreateInfoEXT.html>"]
49048#[must_use]
49049pub struct RenderPassSubpassFeedbackCreateInfoEXT<'a> {
49050    pub s_type: StructureType,
49051    pub p_next: *const c_void,
49052    pub p_subpass_feedback: *mut RenderPassSubpassFeedbackInfoEXT,
49053    pub _marker: PhantomData<&'a ()>,
49054}
49055unsafe impl Send for RenderPassSubpassFeedbackCreateInfoEXT<'_> {}
49056unsafe impl Sync for RenderPassSubpassFeedbackCreateInfoEXT<'_> {}
49057impl ::core::default::Default for RenderPassSubpassFeedbackCreateInfoEXT<'_> {
49058    #[inline]
49059    fn default() -> Self {
49060        Self {
49061            s_type: Self::STRUCTURE_TYPE,
49062            p_next: ::core::ptr::null(),
49063            p_subpass_feedback: ::core::ptr::null_mut(),
49064            _marker: PhantomData,
49065        }
49066    }
49067}
49068unsafe impl<'a> TaggedStructure for RenderPassSubpassFeedbackCreateInfoEXT<'a> {
49069    const STRUCTURE_TYPE: StructureType =
49070        StructureType::RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT;
49071}
49072unsafe impl ExtendsSubpassDescription2 for RenderPassSubpassFeedbackCreateInfoEXT<'_> {}
49073impl<'a> RenderPassSubpassFeedbackCreateInfoEXT<'a> {
49074    #[inline]
49075    pub fn subpass_feedback(
49076        mut self,
49077        subpass_feedback: &'a mut RenderPassSubpassFeedbackInfoEXT,
49078    ) -> Self {
49079        self.p_subpass_feedback = subpass_feedback;
49080        self
49081    }
49082}
49083#[repr(C)]
49084#[cfg_attr(feature = "debug", derive(Debug))]
49085#[derive(Copy, Clone)]
49086#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSubpassMergeFeedbackFeaturesEXT.html>"]
49087#[must_use]
49088pub struct PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'a> {
49089    pub s_type: StructureType,
49090    pub p_next: *mut c_void,
49091    pub subpass_merge_feedback: Bool32,
49092    pub _marker: PhantomData<&'a ()>,
49093}
49094unsafe impl Send for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'_> {}
49095unsafe impl Sync for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'_> {}
49096impl ::core::default::Default for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'_> {
49097    #[inline]
49098    fn default() -> Self {
49099        Self {
49100            s_type: Self::STRUCTURE_TYPE,
49101            p_next: ::core::ptr::null_mut(),
49102            subpass_merge_feedback: Bool32::default(),
49103            _marker: PhantomData,
49104        }
49105    }
49106}
49107unsafe impl<'a> TaggedStructure for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'a> {
49108    const STRUCTURE_TYPE: StructureType =
49109        StructureType::PHYSICAL_DEVICE_SUBPASS_MERGE_FEEDBACK_FEATURES_EXT;
49110}
49111unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'_> {}
49112unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'_> {}
49113impl<'a> PhysicalDeviceSubpassMergeFeedbackFeaturesEXT<'a> {
49114    #[inline]
49115    pub fn subpass_merge_feedback(mut self, subpass_merge_feedback: bool) -> Self {
49116        self.subpass_merge_feedback = subpass_merge_feedback.into();
49117        self
49118    }
49119}
49120#[repr(C)]
49121#[derive(Copy, Clone)]
49122#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapBuildInfoEXT.html>"]
49123#[must_use]
49124pub struct MicromapBuildInfoEXT<'a> {
49125    pub s_type: StructureType,
49126    pub p_next: *const c_void,
49127    pub ty: MicromapTypeEXT,
49128    pub flags: BuildMicromapFlagsEXT,
49129    pub mode: BuildMicromapModeEXT,
49130    pub dst_micromap: MicromapEXT,
49131    pub usage_counts_count: u32,
49132    pub p_usage_counts: *const MicromapUsageEXT,
49133    pub pp_usage_counts: *const *const MicromapUsageEXT,
49134    pub data: DeviceOrHostAddressConstKHR,
49135    pub scratch_data: DeviceOrHostAddressKHR,
49136    pub triangle_array: DeviceOrHostAddressConstKHR,
49137    pub triangle_array_stride: DeviceSize,
49138    pub _marker: PhantomData<&'a ()>,
49139}
49140unsafe impl Send for MicromapBuildInfoEXT<'_> {}
49141unsafe impl Sync for MicromapBuildInfoEXT<'_> {}
49142#[cfg(feature = "debug")]
49143impl fmt::Debug for MicromapBuildInfoEXT<'_> {
49144    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49145        fmt.debug_struct("MicromapBuildInfoEXT")
49146            .field("s_type", &self.s_type)
49147            .field("p_next", &self.p_next)
49148            .field("ty", &self.ty)
49149            .field("flags", &self.flags)
49150            .field("mode", &self.mode)
49151            .field("dst_micromap", &self.dst_micromap)
49152            .field("usage_counts_count", &self.usage_counts_count)
49153            .field("p_usage_counts", &self.p_usage_counts)
49154            .field("pp_usage_counts", &self.pp_usage_counts)
49155            .field("data", &"union")
49156            .field("scratch_data", &"union")
49157            .field("triangle_array", &"union")
49158            .field("triangle_array_stride", &self.triangle_array_stride)
49159            .finish()
49160    }
49161}
49162impl ::core::default::Default for MicromapBuildInfoEXT<'_> {
49163    #[inline]
49164    fn default() -> Self {
49165        Self {
49166            s_type: Self::STRUCTURE_TYPE,
49167            p_next: ::core::ptr::null(),
49168            ty: MicromapTypeEXT::default(),
49169            flags: BuildMicromapFlagsEXT::default(),
49170            mode: BuildMicromapModeEXT::default(),
49171            dst_micromap: MicromapEXT::default(),
49172            usage_counts_count: u32::default(),
49173            p_usage_counts: ::core::ptr::null(),
49174            pp_usage_counts: ::core::ptr::null(),
49175            data: DeviceOrHostAddressConstKHR::default(),
49176            scratch_data: DeviceOrHostAddressKHR::default(),
49177            triangle_array: DeviceOrHostAddressConstKHR::default(),
49178            triangle_array_stride: DeviceSize::default(),
49179            _marker: PhantomData,
49180        }
49181    }
49182}
49183unsafe impl<'a> TaggedStructure for MicromapBuildInfoEXT<'a> {
49184    const STRUCTURE_TYPE: StructureType = StructureType::MICROMAP_BUILD_INFO_EXT;
49185}
49186impl<'a> MicromapBuildInfoEXT<'a> {
49187    #[inline]
49188    pub fn ty(mut self, ty: MicromapTypeEXT) -> Self {
49189        self.ty = ty;
49190        self
49191    }
49192    #[inline]
49193    pub fn flags(mut self, flags: BuildMicromapFlagsEXT) -> Self {
49194        self.flags = flags;
49195        self
49196    }
49197    #[inline]
49198    pub fn mode(mut self, mode: BuildMicromapModeEXT) -> Self {
49199        self.mode = mode;
49200        self
49201    }
49202    #[inline]
49203    pub fn dst_micromap(mut self, dst_micromap: MicromapEXT) -> Self {
49204        self.dst_micromap = dst_micromap;
49205        self
49206    }
49207    #[inline]
49208    pub fn usage_counts(mut self, usage_counts: &'a [MicromapUsageEXT]) -> Self {
49209        self.usage_counts_count = usage_counts.len() as _;
49210        self.p_usage_counts = usage_counts.as_ptr();
49211        self
49212    }
49213    #[inline]
49214    pub fn usage_counts_ptrs(mut self, usage_counts_ptrs: &'a [&'a MicromapUsageEXT]) -> Self {
49215        self.usage_counts_count = usage_counts_ptrs.len() as _;
49216        self.pp_usage_counts = usage_counts_ptrs.as_ptr().cast();
49217        self
49218    }
49219    #[inline]
49220    pub fn data(mut self, data: DeviceOrHostAddressConstKHR) -> Self {
49221        self.data = data;
49222        self
49223    }
49224    #[inline]
49225    pub fn scratch_data(mut self, scratch_data: DeviceOrHostAddressKHR) -> Self {
49226        self.scratch_data = scratch_data;
49227        self
49228    }
49229    #[inline]
49230    pub fn triangle_array(mut self, triangle_array: DeviceOrHostAddressConstKHR) -> Self {
49231        self.triangle_array = triangle_array;
49232        self
49233    }
49234    #[inline]
49235    pub fn triangle_array_stride(mut self, triangle_array_stride: DeviceSize) -> Self {
49236        self.triangle_array_stride = triangle_array_stride;
49237        self
49238    }
49239}
49240#[repr(C)]
49241#[cfg_attr(feature = "debug", derive(Debug))]
49242#[derive(Copy, Clone)]
49243#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapCreateInfoEXT.html>"]
49244#[must_use]
49245pub struct MicromapCreateInfoEXT<'a> {
49246    pub s_type: StructureType,
49247    pub p_next: *const c_void,
49248    pub create_flags: MicromapCreateFlagsEXT,
49249    pub buffer: Buffer,
49250    pub offset: DeviceSize,
49251    pub size: DeviceSize,
49252    pub ty: MicromapTypeEXT,
49253    pub device_address: DeviceAddress,
49254    pub _marker: PhantomData<&'a ()>,
49255}
49256unsafe impl Send for MicromapCreateInfoEXT<'_> {}
49257unsafe impl Sync for MicromapCreateInfoEXT<'_> {}
49258impl ::core::default::Default for MicromapCreateInfoEXT<'_> {
49259    #[inline]
49260    fn default() -> Self {
49261        Self {
49262            s_type: Self::STRUCTURE_TYPE,
49263            p_next: ::core::ptr::null(),
49264            create_flags: MicromapCreateFlagsEXT::default(),
49265            buffer: Buffer::default(),
49266            offset: DeviceSize::default(),
49267            size: DeviceSize::default(),
49268            ty: MicromapTypeEXT::default(),
49269            device_address: DeviceAddress::default(),
49270            _marker: PhantomData,
49271        }
49272    }
49273}
49274unsafe impl<'a> TaggedStructure for MicromapCreateInfoEXT<'a> {
49275    const STRUCTURE_TYPE: StructureType = StructureType::MICROMAP_CREATE_INFO_EXT;
49276}
49277impl<'a> MicromapCreateInfoEXT<'a> {
49278    #[inline]
49279    pub fn create_flags(mut self, create_flags: MicromapCreateFlagsEXT) -> Self {
49280        self.create_flags = create_flags;
49281        self
49282    }
49283    #[inline]
49284    pub fn buffer(mut self, buffer: Buffer) -> Self {
49285        self.buffer = buffer;
49286        self
49287    }
49288    #[inline]
49289    pub fn offset(mut self, offset: DeviceSize) -> Self {
49290        self.offset = offset;
49291        self
49292    }
49293    #[inline]
49294    pub fn size(mut self, size: DeviceSize) -> Self {
49295        self.size = size;
49296        self
49297    }
49298    #[inline]
49299    pub fn ty(mut self, ty: MicromapTypeEXT) -> Self {
49300        self.ty = ty;
49301        self
49302    }
49303    #[inline]
49304    pub fn device_address(mut self, device_address: DeviceAddress) -> Self {
49305        self.device_address = device_address;
49306        self
49307    }
49308}
49309#[repr(C)]
49310#[cfg_attr(feature = "debug", derive(Debug))]
49311#[derive(Copy, Clone)]
49312#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapVersionInfoEXT.html>"]
49313#[must_use]
49314pub struct MicromapVersionInfoEXT<'a> {
49315    pub s_type: StructureType,
49316    pub p_next: *const c_void,
49317    pub p_version_data: *const [u8; 2 * UUID_SIZE],
49318    pub _marker: PhantomData<&'a ()>,
49319}
49320unsafe impl Send for MicromapVersionInfoEXT<'_> {}
49321unsafe impl Sync for MicromapVersionInfoEXT<'_> {}
49322impl ::core::default::Default for MicromapVersionInfoEXT<'_> {
49323    #[inline]
49324    fn default() -> Self {
49325        Self {
49326            s_type: Self::STRUCTURE_TYPE,
49327            p_next: ::core::ptr::null(),
49328            p_version_data: ::core::ptr::null(),
49329            _marker: PhantomData,
49330        }
49331    }
49332}
49333unsafe impl<'a> TaggedStructure for MicromapVersionInfoEXT<'a> {
49334    const STRUCTURE_TYPE: StructureType = StructureType::MICROMAP_VERSION_INFO_EXT;
49335}
49336impl<'a> MicromapVersionInfoEXT<'a> {
49337    #[inline]
49338    pub fn version_data(mut self, version_data: &'a [u8; 2 * UUID_SIZE]) -> Self {
49339        self.p_version_data = version_data;
49340        self
49341    }
49342}
49343#[repr(C)]
49344#[cfg_attr(feature = "debug", derive(Debug))]
49345#[derive(Copy, Clone)]
49346#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMicromapInfoEXT.html>"]
49347#[must_use]
49348pub struct CopyMicromapInfoEXT<'a> {
49349    pub s_type: StructureType,
49350    pub p_next: *const c_void,
49351    pub src: MicromapEXT,
49352    pub dst: MicromapEXT,
49353    pub mode: CopyMicromapModeEXT,
49354    pub _marker: PhantomData<&'a ()>,
49355}
49356unsafe impl Send for CopyMicromapInfoEXT<'_> {}
49357unsafe impl Sync for CopyMicromapInfoEXT<'_> {}
49358impl ::core::default::Default for CopyMicromapInfoEXT<'_> {
49359    #[inline]
49360    fn default() -> Self {
49361        Self {
49362            s_type: Self::STRUCTURE_TYPE,
49363            p_next: ::core::ptr::null(),
49364            src: MicromapEXT::default(),
49365            dst: MicromapEXT::default(),
49366            mode: CopyMicromapModeEXT::default(),
49367            _marker: PhantomData,
49368        }
49369    }
49370}
49371unsafe impl<'a> TaggedStructure for CopyMicromapInfoEXT<'a> {
49372    const STRUCTURE_TYPE: StructureType = StructureType::COPY_MICROMAP_INFO_EXT;
49373}
49374impl<'a> CopyMicromapInfoEXT<'a> {
49375    #[inline]
49376    pub fn src(mut self, src: MicromapEXT) -> Self {
49377        self.src = src;
49378        self
49379    }
49380    #[inline]
49381    pub fn dst(mut self, dst: MicromapEXT) -> Self {
49382        self.dst = dst;
49383        self
49384    }
49385    #[inline]
49386    pub fn mode(mut self, mode: CopyMicromapModeEXT) -> Self {
49387        self.mode = mode;
49388        self
49389    }
49390}
49391#[repr(C)]
49392#[derive(Copy, Clone)]
49393#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMicromapToMemoryInfoEXT.html>"]
49394#[must_use]
49395pub struct CopyMicromapToMemoryInfoEXT<'a> {
49396    pub s_type: StructureType,
49397    pub p_next: *const c_void,
49398    pub src: MicromapEXT,
49399    pub dst: DeviceOrHostAddressKHR,
49400    pub mode: CopyMicromapModeEXT,
49401    pub _marker: PhantomData<&'a ()>,
49402}
49403unsafe impl Send for CopyMicromapToMemoryInfoEXT<'_> {}
49404unsafe impl Sync for CopyMicromapToMemoryInfoEXT<'_> {}
49405#[cfg(feature = "debug")]
49406impl fmt::Debug for CopyMicromapToMemoryInfoEXT<'_> {
49407    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49408        fmt.debug_struct("CopyMicromapToMemoryInfoEXT")
49409            .field("s_type", &self.s_type)
49410            .field("p_next", &self.p_next)
49411            .field("src", &self.src)
49412            .field("dst", &"union")
49413            .field("mode", &self.mode)
49414            .finish()
49415    }
49416}
49417impl ::core::default::Default for CopyMicromapToMemoryInfoEXT<'_> {
49418    #[inline]
49419    fn default() -> Self {
49420        Self {
49421            s_type: Self::STRUCTURE_TYPE,
49422            p_next: ::core::ptr::null(),
49423            src: MicromapEXT::default(),
49424            dst: DeviceOrHostAddressKHR::default(),
49425            mode: CopyMicromapModeEXT::default(),
49426            _marker: PhantomData,
49427        }
49428    }
49429}
49430unsafe impl<'a> TaggedStructure for CopyMicromapToMemoryInfoEXT<'a> {
49431    const STRUCTURE_TYPE: StructureType = StructureType::COPY_MICROMAP_TO_MEMORY_INFO_EXT;
49432}
49433impl<'a> CopyMicromapToMemoryInfoEXT<'a> {
49434    #[inline]
49435    pub fn src(mut self, src: MicromapEXT) -> Self {
49436        self.src = src;
49437        self
49438    }
49439    #[inline]
49440    pub fn dst(mut self, dst: DeviceOrHostAddressKHR) -> Self {
49441        self.dst = dst;
49442        self
49443    }
49444    #[inline]
49445    pub fn mode(mut self, mode: CopyMicromapModeEXT) -> Self {
49446        self.mode = mode;
49447        self
49448    }
49449}
49450#[repr(C)]
49451#[derive(Copy, Clone)]
49452#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryToMicromapInfoEXT.html>"]
49453#[must_use]
49454pub struct CopyMemoryToMicromapInfoEXT<'a> {
49455    pub s_type: StructureType,
49456    pub p_next: *const c_void,
49457    pub src: DeviceOrHostAddressConstKHR,
49458    pub dst: MicromapEXT,
49459    pub mode: CopyMicromapModeEXT,
49460    pub _marker: PhantomData<&'a ()>,
49461}
49462unsafe impl Send for CopyMemoryToMicromapInfoEXT<'_> {}
49463unsafe impl Sync for CopyMemoryToMicromapInfoEXT<'_> {}
49464#[cfg(feature = "debug")]
49465impl fmt::Debug for CopyMemoryToMicromapInfoEXT<'_> {
49466    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49467        fmt.debug_struct("CopyMemoryToMicromapInfoEXT")
49468            .field("s_type", &self.s_type)
49469            .field("p_next", &self.p_next)
49470            .field("src", &"union")
49471            .field("dst", &self.dst)
49472            .field("mode", &self.mode)
49473            .finish()
49474    }
49475}
49476impl ::core::default::Default for CopyMemoryToMicromapInfoEXT<'_> {
49477    #[inline]
49478    fn default() -> Self {
49479        Self {
49480            s_type: Self::STRUCTURE_TYPE,
49481            p_next: ::core::ptr::null(),
49482            src: DeviceOrHostAddressConstKHR::default(),
49483            dst: MicromapEXT::default(),
49484            mode: CopyMicromapModeEXT::default(),
49485            _marker: PhantomData,
49486        }
49487    }
49488}
49489unsafe impl<'a> TaggedStructure for CopyMemoryToMicromapInfoEXT<'a> {
49490    const STRUCTURE_TYPE: StructureType = StructureType::COPY_MEMORY_TO_MICROMAP_INFO_EXT;
49491}
49492impl<'a> CopyMemoryToMicromapInfoEXT<'a> {
49493    #[inline]
49494    pub fn src(mut self, src: DeviceOrHostAddressConstKHR) -> Self {
49495        self.src = src;
49496        self
49497    }
49498    #[inline]
49499    pub fn dst(mut self, dst: MicromapEXT) -> Self {
49500        self.dst = dst;
49501        self
49502    }
49503    #[inline]
49504    pub fn mode(mut self, mode: CopyMicromapModeEXT) -> Self {
49505        self.mode = mode;
49506        self
49507    }
49508}
49509#[repr(C)]
49510#[cfg_attr(feature = "debug", derive(Debug))]
49511#[derive(Copy, Clone)]
49512#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapBuildSizesInfoEXT.html>"]
49513#[must_use]
49514pub struct MicromapBuildSizesInfoEXT<'a> {
49515    pub s_type: StructureType,
49516    pub p_next: *const c_void,
49517    pub micromap_size: DeviceSize,
49518    pub build_scratch_size: DeviceSize,
49519    pub discardable: Bool32,
49520    pub _marker: PhantomData<&'a ()>,
49521}
49522unsafe impl Send for MicromapBuildSizesInfoEXT<'_> {}
49523unsafe impl Sync for MicromapBuildSizesInfoEXT<'_> {}
49524impl ::core::default::Default for MicromapBuildSizesInfoEXT<'_> {
49525    #[inline]
49526    fn default() -> Self {
49527        Self {
49528            s_type: Self::STRUCTURE_TYPE,
49529            p_next: ::core::ptr::null(),
49530            micromap_size: DeviceSize::default(),
49531            build_scratch_size: DeviceSize::default(),
49532            discardable: Bool32::default(),
49533            _marker: PhantomData,
49534        }
49535    }
49536}
49537unsafe impl<'a> TaggedStructure for MicromapBuildSizesInfoEXT<'a> {
49538    const STRUCTURE_TYPE: StructureType = StructureType::MICROMAP_BUILD_SIZES_INFO_EXT;
49539}
49540impl<'a> MicromapBuildSizesInfoEXT<'a> {
49541    #[inline]
49542    pub fn micromap_size(mut self, micromap_size: DeviceSize) -> Self {
49543        self.micromap_size = micromap_size;
49544        self
49545    }
49546    #[inline]
49547    pub fn build_scratch_size(mut self, build_scratch_size: DeviceSize) -> Self {
49548        self.build_scratch_size = build_scratch_size;
49549        self
49550    }
49551    #[inline]
49552    pub fn discardable(mut self, discardable: bool) -> Self {
49553        self.discardable = discardable.into();
49554        self
49555    }
49556}
49557#[repr(C)]
49558#[cfg_attr(feature = "debug", derive(Debug))]
49559#[derive(Copy, Clone, Default)]
49560#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapUsageEXT.html>"]
49561#[must_use]
49562pub struct MicromapUsageEXT {
49563    pub count: u32,
49564    pub subdivision_level: u32,
49565    pub format: u32,
49566}
49567impl MicromapUsageEXT {
49568    #[inline]
49569    pub fn count(mut self, count: u32) -> Self {
49570        self.count = count;
49571        self
49572    }
49573    #[inline]
49574    pub fn subdivision_level(mut self, subdivision_level: u32) -> Self {
49575        self.subdivision_level = subdivision_level;
49576        self
49577    }
49578    #[inline]
49579    pub fn format(mut self, format: u32) -> Self {
49580        self.format = format;
49581        self
49582    }
49583}
49584#[repr(C)]
49585#[cfg_attr(feature = "debug", derive(Debug))]
49586#[derive(Copy, Clone, Default)]
49587#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMicromapTriangleEXT.html>"]
49588#[must_use]
49589pub struct MicromapTriangleEXT {
49590    pub data_offset: u32,
49591    pub subdivision_level: u16,
49592    pub format: u16,
49593}
49594impl MicromapTriangleEXT {
49595    #[inline]
49596    pub fn data_offset(mut self, data_offset: u32) -> Self {
49597        self.data_offset = data_offset;
49598        self
49599    }
49600    #[inline]
49601    pub fn subdivision_level(mut self, subdivision_level: u16) -> Self {
49602        self.subdivision_level = subdivision_level;
49603        self
49604    }
49605    #[inline]
49606    pub fn format(mut self, format: u16) -> Self {
49607        self.format = format;
49608        self
49609    }
49610}
49611#[repr(C)]
49612#[cfg_attr(feature = "debug", derive(Debug))]
49613#[derive(Copy, Clone)]
49614#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceOpacityMicromapFeaturesEXT.html>"]
49615#[must_use]
49616pub struct PhysicalDeviceOpacityMicromapFeaturesEXT<'a> {
49617    pub s_type: StructureType,
49618    pub p_next: *mut c_void,
49619    pub micromap: Bool32,
49620    pub micromap_capture_replay: Bool32,
49621    pub micromap_host_commands: Bool32,
49622    pub _marker: PhantomData<&'a ()>,
49623}
49624unsafe impl Send for PhysicalDeviceOpacityMicromapFeaturesEXT<'_> {}
49625unsafe impl Sync for PhysicalDeviceOpacityMicromapFeaturesEXT<'_> {}
49626impl ::core::default::Default for PhysicalDeviceOpacityMicromapFeaturesEXT<'_> {
49627    #[inline]
49628    fn default() -> Self {
49629        Self {
49630            s_type: Self::STRUCTURE_TYPE,
49631            p_next: ::core::ptr::null_mut(),
49632            micromap: Bool32::default(),
49633            micromap_capture_replay: Bool32::default(),
49634            micromap_host_commands: Bool32::default(),
49635            _marker: PhantomData,
49636        }
49637    }
49638}
49639unsafe impl<'a> TaggedStructure for PhysicalDeviceOpacityMicromapFeaturesEXT<'a> {
49640    const STRUCTURE_TYPE: StructureType =
49641        StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_FEATURES_EXT;
49642}
49643unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceOpacityMicromapFeaturesEXT<'_> {}
49644unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceOpacityMicromapFeaturesEXT<'_> {}
49645impl<'a> PhysicalDeviceOpacityMicromapFeaturesEXT<'a> {
49646    #[inline]
49647    pub fn micromap(mut self, micromap: bool) -> Self {
49648        self.micromap = micromap.into();
49649        self
49650    }
49651    #[inline]
49652    pub fn micromap_capture_replay(mut self, micromap_capture_replay: bool) -> Self {
49653        self.micromap_capture_replay = micromap_capture_replay.into();
49654        self
49655    }
49656    #[inline]
49657    pub fn micromap_host_commands(mut self, micromap_host_commands: bool) -> Self {
49658        self.micromap_host_commands = micromap_host_commands.into();
49659        self
49660    }
49661}
49662#[repr(C)]
49663#[cfg_attr(feature = "debug", derive(Debug))]
49664#[derive(Copy, Clone)]
49665#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceOpacityMicromapPropertiesEXT.html>"]
49666#[must_use]
49667pub struct PhysicalDeviceOpacityMicromapPropertiesEXT<'a> {
49668    pub s_type: StructureType,
49669    pub p_next: *mut c_void,
49670    pub max_opacity2_state_subdivision_level: u32,
49671    pub max_opacity4_state_subdivision_level: u32,
49672    pub _marker: PhantomData<&'a ()>,
49673}
49674unsafe impl Send for PhysicalDeviceOpacityMicromapPropertiesEXT<'_> {}
49675unsafe impl Sync for PhysicalDeviceOpacityMicromapPropertiesEXT<'_> {}
49676impl ::core::default::Default for PhysicalDeviceOpacityMicromapPropertiesEXT<'_> {
49677    #[inline]
49678    fn default() -> Self {
49679        Self {
49680            s_type: Self::STRUCTURE_TYPE,
49681            p_next: ::core::ptr::null_mut(),
49682            max_opacity2_state_subdivision_level: u32::default(),
49683            max_opacity4_state_subdivision_level: u32::default(),
49684            _marker: PhantomData,
49685        }
49686    }
49687}
49688unsafe impl<'a> TaggedStructure for PhysicalDeviceOpacityMicromapPropertiesEXT<'a> {
49689    const STRUCTURE_TYPE: StructureType =
49690        StructureType::PHYSICAL_DEVICE_OPACITY_MICROMAP_PROPERTIES_EXT;
49691}
49692unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceOpacityMicromapPropertiesEXT<'_> {}
49693impl<'a> PhysicalDeviceOpacityMicromapPropertiesEXT<'a> {
49694    #[inline]
49695    pub fn max_opacity2_state_subdivision_level(
49696        mut self,
49697        max_opacity2_state_subdivision_level: u32,
49698    ) -> Self {
49699        self.max_opacity2_state_subdivision_level = max_opacity2_state_subdivision_level;
49700        self
49701    }
49702    #[inline]
49703    pub fn max_opacity4_state_subdivision_level(
49704        mut self,
49705        max_opacity4_state_subdivision_level: u32,
49706    ) -> Self {
49707        self.max_opacity4_state_subdivision_level = max_opacity4_state_subdivision_level;
49708        self
49709    }
49710}
49711#[repr(C)]
49712#[derive(Copy, Clone)]
49713#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureTrianglesOpacityMicromapEXT.html>"]
49714#[must_use]
49715pub struct AccelerationStructureTrianglesOpacityMicromapEXT<'a> {
49716    pub s_type: StructureType,
49717    pub p_next: *mut c_void,
49718    pub index_type: IndexType,
49719    pub index_buffer: DeviceOrHostAddressConstKHR,
49720    pub index_stride: DeviceSize,
49721    pub base_triangle: u32,
49722    pub usage_counts_count: u32,
49723    pub p_usage_counts: *const MicromapUsageEXT,
49724    pub pp_usage_counts: *const *const MicromapUsageEXT,
49725    pub micromap: MicromapEXT,
49726    pub _marker: PhantomData<&'a ()>,
49727}
49728unsafe impl Send for AccelerationStructureTrianglesOpacityMicromapEXT<'_> {}
49729unsafe impl Sync for AccelerationStructureTrianglesOpacityMicromapEXT<'_> {}
49730#[cfg(feature = "debug")]
49731impl fmt::Debug for AccelerationStructureTrianglesOpacityMicromapEXT<'_> {
49732    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49733        fmt.debug_struct("AccelerationStructureTrianglesOpacityMicromapEXT")
49734            .field("s_type", &self.s_type)
49735            .field("p_next", &self.p_next)
49736            .field("index_type", &self.index_type)
49737            .field("index_buffer", &"union")
49738            .field("index_stride", &self.index_stride)
49739            .field("base_triangle", &self.base_triangle)
49740            .field("usage_counts_count", &self.usage_counts_count)
49741            .field("p_usage_counts", &self.p_usage_counts)
49742            .field("pp_usage_counts", &self.pp_usage_counts)
49743            .field("micromap", &self.micromap)
49744            .finish()
49745    }
49746}
49747impl ::core::default::Default for AccelerationStructureTrianglesOpacityMicromapEXT<'_> {
49748    #[inline]
49749    fn default() -> Self {
49750        Self {
49751            s_type: Self::STRUCTURE_TYPE,
49752            p_next: ::core::ptr::null_mut(),
49753            index_type: IndexType::default(),
49754            index_buffer: DeviceOrHostAddressConstKHR::default(),
49755            index_stride: DeviceSize::default(),
49756            base_triangle: u32::default(),
49757            usage_counts_count: u32::default(),
49758            p_usage_counts: ::core::ptr::null(),
49759            pp_usage_counts: ::core::ptr::null(),
49760            micromap: MicromapEXT::default(),
49761            _marker: PhantomData,
49762        }
49763    }
49764}
49765unsafe impl<'a> TaggedStructure for AccelerationStructureTrianglesOpacityMicromapEXT<'a> {
49766    const STRUCTURE_TYPE: StructureType =
49767        StructureType::ACCELERATION_STRUCTURE_TRIANGLES_OPACITY_MICROMAP_EXT;
49768}
49769unsafe impl ExtendsAccelerationStructureGeometryTrianglesDataKHR
49770    for AccelerationStructureTrianglesOpacityMicromapEXT<'_>
49771{
49772}
49773impl<'a> AccelerationStructureTrianglesOpacityMicromapEXT<'a> {
49774    #[inline]
49775    pub fn index_type(mut self, index_type: IndexType) -> Self {
49776        self.index_type = index_type;
49777        self
49778    }
49779    #[inline]
49780    pub fn index_buffer(mut self, index_buffer: DeviceOrHostAddressConstKHR) -> Self {
49781        self.index_buffer = index_buffer;
49782        self
49783    }
49784    #[inline]
49785    pub fn index_stride(mut self, index_stride: DeviceSize) -> Self {
49786        self.index_stride = index_stride;
49787        self
49788    }
49789    #[inline]
49790    pub fn base_triangle(mut self, base_triangle: u32) -> Self {
49791        self.base_triangle = base_triangle;
49792        self
49793    }
49794    #[inline]
49795    pub fn usage_counts(mut self, usage_counts: &'a [MicromapUsageEXT]) -> Self {
49796        self.usage_counts_count = usage_counts.len() as _;
49797        self.p_usage_counts = usage_counts.as_ptr();
49798        self
49799    }
49800    #[inline]
49801    pub fn usage_counts_ptrs(mut self, usage_counts_ptrs: &'a [&'a MicromapUsageEXT]) -> Self {
49802        self.usage_counts_count = usage_counts_ptrs.len() as _;
49803        self.pp_usage_counts = usage_counts_ptrs.as_ptr().cast();
49804        self
49805    }
49806    #[inline]
49807    pub fn micromap(mut self, micromap: MicromapEXT) -> Self {
49808        self.micromap = micromap;
49809        self
49810    }
49811}
49812#[repr(C)]
49813#[cfg_attr(feature = "debug", derive(Debug))]
49814#[derive(Copy, Clone)]
49815#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDisplacementMicromapFeaturesNV.html>"]
49816#[must_use]
49817pub struct PhysicalDeviceDisplacementMicromapFeaturesNV<'a> {
49818    pub s_type: StructureType,
49819    pub p_next: *mut c_void,
49820    pub displacement_micromap: Bool32,
49821    pub _marker: PhantomData<&'a ()>,
49822}
49823unsafe impl Send for PhysicalDeviceDisplacementMicromapFeaturesNV<'_> {}
49824unsafe impl Sync for PhysicalDeviceDisplacementMicromapFeaturesNV<'_> {}
49825impl ::core::default::Default for PhysicalDeviceDisplacementMicromapFeaturesNV<'_> {
49826    #[inline]
49827    fn default() -> Self {
49828        Self {
49829            s_type: Self::STRUCTURE_TYPE,
49830            p_next: ::core::ptr::null_mut(),
49831            displacement_micromap: Bool32::default(),
49832            _marker: PhantomData,
49833        }
49834    }
49835}
49836unsafe impl<'a> TaggedStructure for PhysicalDeviceDisplacementMicromapFeaturesNV<'a> {
49837    const STRUCTURE_TYPE: StructureType =
49838        StructureType::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_FEATURES_NV;
49839}
49840unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDisplacementMicromapFeaturesNV<'_> {}
49841unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDisplacementMicromapFeaturesNV<'_> {}
49842impl<'a> PhysicalDeviceDisplacementMicromapFeaturesNV<'a> {
49843    #[inline]
49844    pub fn displacement_micromap(mut self, displacement_micromap: bool) -> Self {
49845        self.displacement_micromap = displacement_micromap.into();
49846        self
49847    }
49848}
49849#[repr(C)]
49850#[cfg_attr(feature = "debug", derive(Debug))]
49851#[derive(Copy, Clone)]
49852#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDisplacementMicromapPropertiesNV.html>"]
49853#[must_use]
49854pub struct PhysicalDeviceDisplacementMicromapPropertiesNV<'a> {
49855    pub s_type: StructureType,
49856    pub p_next: *mut c_void,
49857    pub max_displacement_micromap_subdivision_level: u32,
49858    pub _marker: PhantomData<&'a ()>,
49859}
49860unsafe impl Send for PhysicalDeviceDisplacementMicromapPropertiesNV<'_> {}
49861unsafe impl Sync for PhysicalDeviceDisplacementMicromapPropertiesNV<'_> {}
49862impl ::core::default::Default for PhysicalDeviceDisplacementMicromapPropertiesNV<'_> {
49863    #[inline]
49864    fn default() -> Self {
49865        Self {
49866            s_type: Self::STRUCTURE_TYPE,
49867            p_next: ::core::ptr::null_mut(),
49868            max_displacement_micromap_subdivision_level: u32::default(),
49869            _marker: PhantomData,
49870        }
49871    }
49872}
49873unsafe impl<'a> TaggedStructure for PhysicalDeviceDisplacementMicromapPropertiesNV<'a> {
49874    const STRUCTURE_TYPE: StructureType =
49875        StructureType::PHYSICAL_DEVICE_DISPLACEMENT_MICROMAP_PROPERTIES_NV;
49876}
49877unsafe impl ExtendsPhysicalDeviceProperties2
49878    for PhysicalDeviceDisplacementMicromapPropertiesNV<'_>
49879{
49880}
49881impl<'a> PhysicalDeviceDisplacementMicromapPropertiesNV<'a> {
49882    #[inline]
49883    pub fn max_displacement_micromap_subdivision_level(
49884        mut self,
49885        max_displacement_micromap_subdivision_level: u32,
49886    ) -> Self {
49887        self.max_displacement_micromap_subdivision_level =
49888            max_displacement_micromap_subdivision_level;
49889        self
49890    }
49891}
49892#[repr(C)]
49893#[derive(Copy, Clone)]
49894#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAccelerationStructureTrianglesDisplacementMicromapNV.html>"]
49895#[must_use]
49896pub struct AccelerationStructureTrianglesDisplacementMicromapNV<'a> {
49897    pub s_type: StructureType,
49898    pub p_next: *mut c_void,
49899    pub displacement_bias_and_scale_format: Format,
49900    pub displacement_vector_format: Format,
49901    pub displacement_bias_and_scale_buffer: DeviceOrHostAddressConstKHR,
49902    pub displacement_bias_and_scale_stride: DeviceSize,
49903    pub displacement_vector_buffer: DeviceOrHostAddressConstKHR,
49904    pub displacement_vector_stride: DeviceSize,
49905    pub displaced_micromap_primitive_flags: DeviceOrHostAddressConstKHR,
49906    pub displaced_micromap_primitive_flags_stride: DeviceSize,
49907    pub index_type: IndexType,
49908    pub index_buffer: DeviceOrHostAddressConstKHR,
49909    pub index_stride: DeviceSize,
49910    pub base_triangle: u32,
49911    pub usage_counts_count: u32,
49912    pub p_usage_counts: *const MicromapUsageEXT,
49913    pub pp_usage_counts: *const *const MicromapUsageEXT,
49914    pub micromap: MicromapEXT,
49915    pub _marker: PhantomData<&'a ()>,
49916}
49917unsafe impl Send for AccelerationStructureTrianglesDisplacementMicromapNV<'_> {}
49918unsafe impl Sync for AccelerationStructureTrianglesDisplacementMicromapNV<'_> {}
49919#[cfg(feature = "debug")]
49920impl fmt::Debug for AccelerationStructureTrianglesDisplacementMicromapNV<'_> {
49921    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
49922        fmt.debug_struct("AccelerationStructureTrianglesDisplacementMicromapNV")
49923            .field("s_type", &self.s_type)
49924            .field("p_next", &self.p_next)
49925            .field(
49926                "displacement_bias_and_scale_format",
49927                &self.displacement_bias_and_scale_format,
49928            )
49929            .field(
49930                "displacement_vector_format",
49931                &self.displacement_vector_format,
49932            )
49933            .field("displacement_bias_and_scale_buffer", &"union")
49934            .field(
49935                "displacement_bias_and_scale_stride",
49936                &self.displacement_bias_and_scale_stride,
49937            )
49938            .field("displacement_vector_buffer", &"union")
49939            .field(
49940                "displacement_vector_stride",
49941                &self.displacement_vector_stride,
49942            )
49943            .field("displaced_micromap_primitive_flags", &"union")
49944            .field(
49945                "displaced_micromap_primitive_flags_stride",
49946                &self.displaced_micromap_primitive_flags_stride,
49947            )
49948            .field("index_type", &self.index_type)
49949            .field("index_buffer", &"union")
49950            .field("index_stride", &self.index_stride)
49951            .field("base_triangle", &self.base_triangle)
49952            .field("usage_counts_count", &self.usage_counts_count)
49953            .field("p_usage_counts", &self.p_usage_counts)
49954            .field("pp_usage_counts", &self.pp_usage_counts)
49955            .field("micromap", &self.micromap)
49956            .finish()
49957    }
49958}
49959impl ::core::default::Default for AccelerationStructureTrianglesDisplacementMicromapNV<'_> {
49960    #[inline]
49961    fn default() -> Self {
49962        Self {
49963            s_type: Self::STRUCTURE_TYPE,
49964            p_next: ::core::ptr::null_mut(),
49965            displacement_bias_and_scale_format: Format::default(),
49966            displacement_vector_format: Format::default(),
49967            displacement_bias_and_scale_buffer: DeviceOrHostAddressConstKHR::default(),
49968            displacement_bias_and_scale_stride: DeviceSize::default(),
49969            displacement_vector_buffer: DeviceOrHostAddressConstKHR::default(),
49970            displacement_vector_stride: DeviceSize::default(),
49971            displaced_micromap_primitive_flags: DeviceOrHostAddressConstKHR::default(),
49972            displaced_micromap_primitive_flags_stride: DeviceSize::default(),
49973            index_type: IndexType::default(),
49974            index_buffer: DeviceOrHostAddressConstKHR::default(),
49975            index_stride: DeviceSize::default(),
49976            base_triangle: u32::default(),
49977            usage_counts_count: u32::default(),
49978            p_usage_counts: ::core::ptr::null(),
49979            pp_usage_counts: ::core::ptr::null(),
49980            micromap: MicromapEXT::default(),
49981            _marker: PhantomData,
49982        }
49983    }
49984}
49985unsafe impl<'a> TaggedStructure for AccelerationStructureTrianglesDisplacementMicromapNV<'a> {
49986    const STRUCTURE_TYPE: StructureType =
49987        StructureType::ACCELERATION_STRUCTURE_TRIANGLES_DISPLACEMENT_MICROMAP_NV;
49988}
49989unsafe impl ExtendsAccelerationStructureGeometryTrianglesDataKHR
49990    for AccelerationStructureTrianglesDisplacementMicromapNV<'_>
49991{
49992}
49993impl<'a> AccelerationStructureTrianglesDisplacementMicromapNV<'a> {
49994    #[inline]
49995    pub fn displacement_bias_and_scale_format(
49996        mut self,
49997        displacement_bias_and_scale_format: Format,
49998    ) -> Self {
49999        self.displacement_bias_and_scale_format = displacement_bias_and_scale_format;
50000        self
50001    }
50002    #[inline]
50003    pub fn displacement_vector_format(mut self, displacement_vector_format: Format) -> Self {
50004        self.displacement_vector_format = displacement_vector_format;
50005        self
50006    }
50007    #[inline]
50008    pub fn displacement_bias_and_scale_buffer(
50009        mut self,
50010        displacement_bias_and_scale_buffer: DeviceOrHostAddressConstKHR,
50011    ) -> Self {
50012        self.displacement_bias_and_scale_buffer = displacement_bias_and_scale_buffer;
50013        self
50014    }
50015    #[inline]
50016    pub fn displacement_bias_and_scale_stride(
50017        mut self,
50018        displacement_bias_and_scale_stride: DeviceSize,
50019    ) -> Self {
50020        self.displacement_bias_and_scale_stride = displacement_bias_and_scale_stride;
50021        self
50022    }
50023    #[inline]
50024    pub fn displacement_vector_buffer(
50025        mut self,
50026        displacement_vector_buffer: DeviceOrHostAddressConstKHR,
50027    ) -> Self {
50028        self.displacement_vector_buffer = displacement_vector_buffer;
50029        self
50030    }
50031    #[inline]
50032    pub fn displacement_vector_stride(mut self, displacement_vector_stride: DeviceSize) -> Self {
50033        self.displacement_vector_stride = displacement_vector_stride;
50034        self
50035    }
50036    #[inline]
50037    pub fn displaced_micromap_primitive_flags(
50038        mut self,
50039        displaced_micromap_primitive_flags: DeviceOrHostAddressConstKHR,
50040    ) -> Self {
50041        self.displaced_micromap_primitive_flags = displaced_micromap_primitive_flags;
50042        self
50043    }
50044    #[inline]
50045    pub fn displaced_micromap_primitive_flags_stride(
50046        mut self,
50047        displaced_micromap_primitive_flags_stride: DeviceSize,
50048    ) -> Self {
50049        self.displaced_micromap_primitive_flags_stride = displaced_micromap_primitive_flags_stride;
50050        self
50051    }
50052    #[inline]
50053    pub fn index_type(mut self, index_type: IndexType) -> Self {
50054        self.index_type = index_type;
50055        self
50056    }
50057    #[inline]
50058    pub fn index_buffer(mut self, index_buffer: DeviceOrHostAddressConstKHR) -> Self {
50059        self.index_buffer = index_buffer;
50060        self
50061    }
50062    #[inline]
50063    pub fn index_stride(mut self, index_stride: DeviceSize) -> Self {
50064        self.index_stride = index_stride;
50065        self
50066    }
50067    #[inline]
50068    pub fn base_triangle(mut self, base_triangle: u32) -> Self {
50069        self.base_triangle = base_triangle;
50070        self
50071    }
50072    #[inline]
50073    pub fn usage_counts(mut self, usage_counts: &'a [MicromapUsageEXT]) -> Self {
50074        self.usage_counts_count = usage_counts.len() as _;
50075        self.p_usage_counts = usage_counts.as_ptr();
50076        self
50077    }
50078    #[inline]
50079    pub fn usage_counts_ptrs(mut self, usage_counts_ptrs: &'a [&'a MicromapUsageEXT]) -> Self {
50080        self.usage_counts_count = usage_counts_ptrs.len() as _;
50081        self.pp_usage_counts = usage_counts_ptrs.as_ptr().cast();
50082        self
50083    }
50084    #[inline]
50085    pub fn micromap(mut self, micromap: MicromapEXT) -> Self {
50086        self.micromap = micromap;
50087        self
50088    }
50089}
50090#[repr(C)]
50091#[cfg_attr(feature = "debug", derive(Debug))]
50092#[derive(Copy, Clone)]
50093#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelinePropertiesIdentifierEXT.html>"]
50094#[must_use]
50095pub struct PipelinePropertiesIdentifierEXT<'a> {
50096    pub s_type: StructureType,
50097    pub p_next: *mut c_void,
50098    pub pipeline_identifier: [u8; UUID_SIZE],
50099    pub _marker: PhantomData<&'a ()>,
50100}
50101unsafe impl Send for PipelinePropertiesIdentifierEXT<'_> {}
50102unsafe impl Sync for PipelinePropertiesIdentifierEXT<'_> {}
50103impl ::core::default::Default for PipelinePropertiesIdentifierEXT<'_> {
50104    #[inline]
50105    fn default() -> Self {
50106        Self {
50107            s_type: Self::STRUCTURE_TYPE,
50108            p_next: ::core::ptr::null_mut(),
50109            pipeline_identifier: unsafe { ::core::mem::zeroed() },
50110            _marker: PhantomData,
50111        }
50112    }
50113}
50114unsafe impl<'a> TaggedStructure for PipelinePropertiesIdentifierEXT<'a> {
50115    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_PROPERTIES_IDENTIFIER_EXT;
50116}
50117impl<'a> PipelinePropertiesIdentifierEXT<'a> {
50118    #[inline]
50119    pub fn pipeline_identifier(mut self, pipeline_identifier: [u8; UUID_SIZE]) -> Self {
50120        self.pipeline_identifier = pipeline_identifier;
50121        self
50122    }
50123}
50124#[repr(C)]
50125#[cfg_attr(feature = "debug", derive(Debug))]
50126#[derive(Copy, Clone)]
50127#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelinePropertiesFeaturesEXT.html>"]
50128#[must_use]
50129pub struct PhysicalDevicePipelinePropertiesFeaturesEXT<'a> {
50130    pub s_type: StructureType,
50131    pub p_next: *mut c_void,
50132    pub pipeline_properties_identifier: Bool32,
50133    pub _marker: PhantomData<&'a ()>,
50134}
50135unsafe impl Send for PhysicalDevicePipelinePropertiesFeaturesEXT<'_> {}
50136unsafe impl Sync for PhysicalDevicePipelinePropertiesFeaturesEXT<'_> {}
50137impl ::core::default::Default for PhysicalDevicePipelinePropertiesFeaturesEXT<'_> {
50138    #[inline]
50139    fn default() -> Self {
50140        Self {
50141            s_type: Self::STRUCTURE_TYPE,
50142            p_next: ::core::ptr::null_mut(),
50143            pipeline_properties_identifier: Bool32::default(),
50144            _marker: PhantomData,
50145        }
50146    }
50147}
50148unsafe impl<'a> TaggedStructure for PhysicalDevicePipelinePropertiesFeaturesEXT<'a> {
50149    const STRUCTURE_TYPE: StructureType =
50150        StructureType::PHYSICAL_DEVICE_PIPELINE_PROPERTIES_FEATURES_EXT;
50151}
50152unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePipelinePropertiesFeaturesEXT<'_> {}
50153unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelinePropertiesFeaturesEXT<'_> {}
50154impl<'a> PhysicalDevicePipelinePropertiesFeaturesEXT<'a> {
50155    #[inline]
50156    pub fn pipeline_properties_identifier(mut self, pipeline_properties_identifier: bool) -> Self {
50157        self.pipeline_properties_identifier = pipeline_properties_identifier.into();
50158        self
50159    }
50160}
50161#[repr(C)]
50162#[cfg_attr(feature = "debug", derive(Debug))]
50163#[derive(Copy, Clone)]
50164#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD.html>"]
50165#[must_use]
50166pub struct PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'a> {
50167    pub s_type: StructureType,
50168    pub p_next: *mut c_void,
50169    pub shader_early_and_late_fragment_tests: Bool32,
50170    pub _marker: PhantomData<&'a ()>,
50171}
50172unsafe impl Send for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'_> {}
50173unsafe impl Sync for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'_> {}
50174impl ::core::default::Default for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'_> {
50175    #[inline]
50176    fn default() -> Self {
50177        Self {
50178            s_type: Self::STRUCTURE_TYPE,
50179            p_next: ::core::ptr::null_mut(),
50180            shader_early_and_late_fragment_tests: Bool32::default(),
50181            _marker: PhantomData,
50182        }
50183    }
50184}
50185unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'a> {
50186    const STRUCTURE_TYPE: StructureType =
50187        StructureType::PHYSICAL_DEVICE_SHADER_EARLY_AND_LATE_FRAGMENT_TESTS_FEATURES_AMD;
50188}
50189unsafe impl ExtendsPhysicalDeviceFeatures2
50190    for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'_>
50191{
50192}
50193unsafe impl ExtendsDeviceCreateInfo
50194    for PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'_>
50195{
50196}
50197impl<'a> PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD<'a> {
50198    #[inline]
50199    pub fn shader_early_and_late_fragment_tests(
50200        mut self,
50201        shader_early_and_late_fragment_tests: bool,
50202    ) -> Self {
50203        self.shader_early_and_late_fragment_tests = shader_early_and_late_fragment_tests.into();
50204        self
50205    }
50206}
50207#[repr(C)]
50208#[cfg_attr(feature = "debug", derive(Debug))]
50209#[derive(Copy, Clone)]
50210#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalMemoryAcquireUnmodifiedEXT.html>"]
50211#[must_use]
50212pub struct ExternalMemoryAcquireUnmodifiedEXT<'a> {
50213    pub s_type: StructureType,
50214    pub p_next: *const c_void,
50215    pub acquire_unmodified_memory: Bool32,
50216    pub _marker: PhantomData<&'a ()>,
50217}
50218unsafe impl Send for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50219unsafe impl Sync for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50220impl ::core::default::Default for ExternalMemoryAcquireUnmodifiedEXT<'_> {
50221    #[inline]
50222    fn default() -> Self {
50223        Self {
50224            s_type: Self::STRUCTURE_TYPE,
50225            p_next: ::core::ptr::null(),
50226            acquire_unmodified_memory: Bool32::default(),
50227            _marker: PhantomData,
50228        }
50229    }
50230}
50231unsafe impl<'a> TaggedStructure for ExternalMemoryAcquireUnmodifiedEXT<'a> {
50232    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_MEMORY_ACQUIRE_UNMODIFIED_EXT;
50233}
50234unsafe impl ExtendsBufferMemoryBarrier for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50235unsafe impl ExtendsBufferMemoryBarrier2 for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50236unsafe impl ExtendsImageMemoryBarrier for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50237unsafe impl ExtendsImageMemoryBarrier2 for ExternalMemoryAcquireUnmodifiedEXT<'_> {}
50238impl<'a> ExternalMemoryAcquireUnmodifiedEXT<'a> {
50239    #[inline]
50240    pub fn acquire_unmodified_memory(mut self, acquire_unmodified_memory: bool) -> Self {
50241        self.acquire_unmodified_memory = acquire_unmodified_memory.into();
50242        self
50243    }
50244}
50245#[repr(C)]
50246#[cfg_attr(feature = "debug", derive(Debug))]
50247#[derive(Copy, Clone)]
50248#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalObjectCreateInfoEXT.html>"]
50249#[must_use]
50250pub struct ExportMetalObjectCreateInfoEXT<'a> {
50251    pub s_type: StructureType,
50252    pub p_next: *const c_void,
50253    pub export_object_type: ExportMetalObjectTypeFlagsEXT,
50254    pub _marker: PhantomData<&'a ()>,
50255}
50256unsafe impl Send for ExportMetalObjectCreateInfoEXT<'_> {}
50257unsafe impl Sync for ExportMetalObjectCreateInfoEXT<'_> {}
50258impl ::core::default::Default for ExportMetalObjectCreateInfoEXT<'_> {
50259    #[inline]
50260    fn default() -> Self {
50261        Self {
50262            s_type: Self::STRUCTURE_TYPE,
50263            p_next: ::core::ptr::null(),
50264            export_object_type: ExportMetalObjectTypeFlagsEXT::default(),
50265            _marker: PhantomData,
50266        }
50267    }
50268}
50269unsafe impl<'a> TaggedStructure for ExportMetalObjectCreateInfoEXT<'a> {
50270    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_OBJECT_CREATE_INFO_EXT;
50271}
50272unsafe impl ExtendsInstanceCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50273unsafe impl ExtendsMemoryAllocateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50274unsafe impl ExtendsImageCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50275unsafe impl ExtendsImageViewCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50276unsafe impl ExtendsBufferViewCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50277unsafe impl ExtendsSemaphoreCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50278unsafe impl ExtendsEventCreateInfo for ExportMetalObjectCreateInfoEXT<'_> {}
50279impl<'a> ExportMetalObjectCreateInfoEXT<'a> {
50280    #[inline]
50281    pub fn export_object_type(mut self, export_object_type: ExportMetalObjectTypeFlagsEXT) -> Self {
50282        self.export_object_type = export_object_type;
50283        self
50284    }
50285}
50286#[repr(C)]
50287#[cfg_attr(feature = "debug", derive(Debug))]
50288#[derive(Copy, Clone)]
50289#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalObjectsInfoEXT.html>"]
50290#[must_use]
50291pub struct ExportMetalObjectsInfoEXT<'a> {
50292    pub s_type: StructureType,
50293    pub p_next: *const c_void,
50294    pub _marker: PhantomData<&'a ()>,
50295}
50296unsafe impl Send for ExportMetalObjectsInfoEXT<'_> {}
50297unsafe impl Sync for ExportMetalObjectsInfoEXT<'_> {}
50298impl ::core::default::Default for ExportMetalObjectsInfoEXT<'_> {
50299    #[inline]
50300    fn default() -> Self {
50301        Self {
50302            s_type: Self::STRUCTURE_TYPE,
50303            p_next: ::core::ptr::null(),
50304            _marker: PhantomData,
50305        }
50306    }
50307}
50308unsafe impl<'a> TaggedStructure for ExportMetalObjectsInfoEXT<'a> {
50309    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_OBJECTS_INFO_EXT;
50310}
50311pub unsafe trait ExtendsExportMetalObjectsInfoEXT {}
50312impl<'a> ExportMetalObjectsInfoEXT<'a> {
50313    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
50314    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
50315    #[doc = r" valid extension structs can be pushed into the chain."]
50316    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
50317    #[doc = r" chain will look like `A -> D -> B -> C`."]
50318    pub fn push_next<T: ExtendsExportMetalObjectsInfoEXT + ?Sized>(
50319        mut self,
50320        next: &'a mut T,
50321    ) -> Self {
50322        unsafe {
50323            let next_ptr = <*const T>::cast(next);
50324            let last_next = ptr_chain_iter(next).last().unwrap();
50325            (*last_next).p_next = self.p_next as _;
50326            self.p_next = next_ptr;
50327        }
50328        self
50329    }
50330}
50331#[repr(C)]
50332#[cfg_attr(feature = "debug", derive(Debug))]
50333#[derive(Copy, Clone)]
50334#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalDeviceInfoEXT.html>"]
50335#[must_use]
50336pub struct ExportMetalDeviceInfoEXT<'a> {
50337    pub s_type: StructureType,
50338    pub p_next: *const c_void,
50339    pub mtl_device: MTLDevice_id,
50340    pub _marker: PhantomData<&'a ()>,
50341}
50342unsafe impl Send for ExportMetalDeviceInfoEXT<'_> {}
50343unsafe impl Sync for ExportMetalDeviceInfoEXT<'_> {}
50344impl ::core::default::Default for ExportMetalDeviceInfoEXT<'_> {
50345    #[inline]
50346    fn default() -> Self {
50347        Self {
50348            s_type: Self::STRUCTURE_TYPE,
50349            p_next: ::core::ptr::null(),
50350            mtl_device: unsafe { ::core::mem::zeroed() },
50351            _marker: PhantomData,
50352        }
50353    }
50354}
50355unsafe impl<'a> TaggedStructure for ExportMetalDeviceInfoEXT<'a> {
50356    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_DEVICE_INFO_EXT;
50357}
50358unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalDeviceInfoEXT<'_> {}
50359impl<'a> ExportMetalDeviceInfoEXT<'a> {
50360    #[inline]
50361    pub fn mtl_device(mut self, mtl_device: MTLDevice_id) -> Self {
50362        self.mtl_device = mtl_device;
50363        self
50364    }
50365}
50366#[repr(C)]
50367#[cfg_attr(feature = "debug", derive(Debug))]
50368#[derive(Copy, Clone)]
50369#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalCommandQueueInfoEXT.html>"]
50370#[must_use]
50371pub struct ExportMetalCommandQueueInfoEXT<'a> {
50372    pub s_type: StructureType,
50373    pub p_next: *const c_void,
50374    pub queue: Queue,
50375    pub mtl_command_queue: MTLCommandQueue_id,
50376    pub _marker: PhantomData<&'a ()>,
50377}
50378unsafe impl Send for ExportMetalCommandQueueInfoEXT<'_> {}
50379unsafe impl Sync for ExportMetalCommandQueueInfoEXT<'_> {}
50380impl ::core::default::Default for ExportMetalCommandQueueInfoEXT<'_> {
50381    #[inline]
50382    fn default() -> Self {
50383        Self {
50384            s_type: Self::STRUCTURE_TYPE,
50385            p_next: ::core::ptr::null(),
50386            queue: Queue::default(),
50387            mtl_command_queue: unsafe { ::core::mem::zeroed() },
50388            _marker: PhantomData,
50389        }
50390    }
50391}
50392unsafe impl<'a> TaggedStructure for ExportMetalCommandQueueInfoEXT<'a> {
50393    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_COMMAND_QUEUE_INFO_EXT;
50394}
50395unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalCommandQueueInfoEXT<'_> {}
50396impl<'a> ExportMetalCommandQueueInfoEXT<'a> {
50397    #[inline]
50398    pub fn queue(mut self, queue: Queue) -> Self {
50399        self.queue = queue;
50400        self
50401    }
50402    #[inline]
50403    pub fn mtl_command_queue(mut self, mtl_command_queue: MTLCommandQueue_id) -> Self {
50404        self.mtl_command_queue = mtl_command_queue;
50405        self
50406    }
50407}
50408#[repr(C)]
50409#[cfg_attr(feature = "debug", derive(Debug))]
50410#[derive(Copy, Clone)]
50411#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalBufferInfoEXT.html>"]
50412#[must_use]
50413pub struct ExportMetalBufferInfoEXT<'a> {
50414    pub s_type: StructureType,
50415    pub p_next: *const c_void,
50416    pub memory: DeviceMemory,
50417    pub mtl_buffer: MTLBuffer_id,
50418    pub _marker: PhantomData<&'a ()>,
50419}
50420unsafe impl Send for ExportMetalBufferInfoEXT<'_> {}
50421unsafe impl Sync for ExportMetalBufferInfoEXT<'_> {}
50422impl ::core::default::Default for ExportMetalBufferInfoEXT<'_> {
50423    #[inline]
50424    fn default() -> Self {
50425        Self {
50426            s_type: Self::STRUCTURE_TYPE,
50427            p_next: ::core::ptr::null(),
50428            memory: DeviceMemory::default(),
50429            mtl_buffer: unsafe { ::core::mem::zeroed() },
50430            _marker: PhantomData,
50431        }
50432    }
50433}
50434unsafe impl<'a> TaggedStructure for ExportMetalBufferInfoEXT<'a> {
50435    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_BUFFER_INFO_EXT;
50436}
50437unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalBufferInfoEXT<'_> {}
50438impl<'a> ExportMetalBufferInfoEXT<'a> {
50439    #[inline]
50440    pub fn memory(mut self, memory: DeviceMemory) -> Self {
50441        self.memory = memory;
50442        self
50443    }
50444    #[inline]
50445    pub fn mtl_buffer(mut self, mtl_buffer: MTLBuffer_id) -> Self {
50446        self.mtl_buffer = mtl_buffer;
50447        self
50448    }
50449}
50450#[repr(C)]
50451#[cfg_attr(feature = "debug", derive(Debug))]
50452#[derive(Copy, Clone)]
50453#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMetalBufferInfoEXT.html>"]
50454#[must_use]
50455pub struct ImportMetalBufferInfoEXT<'a> {
50456    pub s_type: StructureType,
50457    pub p_next: *const c_void,
50458    pub mtl_buffer: MTLBuffer_id,
50459    pub _marker: PhantomData<&'a ()>,
50460}
50461unsafe impl Send for ImportMetalBufferInfoEXT<'_> {}
50462unsafe impl Sync for ImportMetalBufferInfoEXT<'_> {}
50463impl ::core::default::Default for ImportMetalBufferInfoEXT<'_> {
50464    #[inline]
50465    fn default() -> Self {
50466        Self {
50467            s_type: Self::STRUCTURE_TYPE,
50468            p_next: ::core::ptr::null(),
50469            mtl_buffer: unsafe { ::core::mem::zeroed() },
50470            _marker: PhantomData,
50471        }
50472    }
50473}
50474unsafe impl<'a> TaggedStructure for ImportMetalBufferInfoEXT<'a> {
50475    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_METAL_BUFFER_INFO_EXT;
50476}
50477unsafe impl ExtendsMemoryAllocateInfo for ImportMetalBufferInfoEXT<'_> {}
50478impl<'a> ImportMetalBufferInfoEXT<'a> {
50479    #[inline]
50480    pub fn mtl_buffer(mut self, mtl_buffer: MTLBuffer_id) -> Self {
50481        self.mtl_buffer = mtl_buffer;
50482        self
50483    }
50484}
50485#[repr(C)]
50486#[cfg_attr(feature = "debug", derive(Debug))]
50487#[derive(Copy, Clone)]
50488#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalTextureInfoEXT.html>"]
50489#[must_use]
50490pub struct ExportMetalTextureInfoEXT<'a> {
50491    pub s_type: StructureType,
50492    pub p_next: *const c_void,
50493    pub image: Image,
50494    pub image_view: ImageView,
50495    pub buffer_view: BufferView,
50496    pub plane: ImageAspectFlags,
50497    pub mtl_texture: MTLTexture_id,
50498    pub _marker: PhantomData<&'a ()>,
50499}
50500unsafe impl Send for ExportMetalTextureInfoEXT<'_> {}
50501unsafe impl Sync for ExportMetalTextureInfoEXT<'_> {}
50502impl ::core::default::Default for ExportMetalTextureInfoEXT<'_> {
50503    #[inline]
50504    fn default() -> Self {
50505        Self {
50506            s_type: Self::STRUCTURE_TYPE,
50507            p_next: ::core::ptr::null(),
50508            image: Image::default(),
50509            image_view: ImageView::default(),
50510            buffer_view: BufferView::default(),
50511            plane: ImageAspectFlags::default(),
50512            mtl_texture: unsafe { ::core::mem::zeroed() },
50513            _marker: PhantomData,
50514        }
50515    }
50516}
50517unsafe impl<'a> TaggedStructure for ExportMetalTextureInfoEXT<'a> {
50518    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_TEXTURE_INFO_EXT;
50519}
50520unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalTextureInfoEXT<'_> {}
50521impl<'a> ExportMetalTextureInfoEXT<'a> {
50522    #[inline]
50523    pub fn image(mut self, image: Image) -> Self {
50524        self.image = image;
50525        self
50526    }
50527    #[inline]
50528    pub fn image_view(mut self, image_view: ImageView) -> Self {
50529        self.image_view = image_view;
50530        self
50531    }
50532    #[inline]
50533    pub fn buffer_view(mut self, buffer_view: BufferView) -> Self {
50534        self.buffer_view = buffer_view;
50535        self
50536    }
50537    #[inline]
50538    pub fn plane(mut self, plane: ImageAspectFlags) -> Self {
50539        self.plane = plane;
50540        self
50541    }
50542    #[inline]
50543    pub fn mtl_texture(mut self, mtl_texture: MTLTexture_id) -> Self {
50544        self.mtl_texture = mtl_texture;
50545        self
50546    }
50547}
50548#[repr(C)]
50549#[cfg_attr(feature = "debug", derive(Debug))]
50550#[derive(Copy, Clone)]
50551#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMetalTextureInfoEXT.html>"]
50552#[must_use]
50553pub struct ImportMetalTextureInfoEXT<'a> {
50554    pub s_type: StructureType,
50555    pub p_next: *const c_void,
50556    pub plane: ImageAspectFlags,
50557    pub mtl_texture: MTLTexture_id,
50558    pub _marker: PhantomData<&'a ()>,
50559}
50560unsafe impl Send for ImportMetalTextureInfoEXT<'_> {}
50561unsafe impl Sync for ImportMetalTextureInfoEXT<'_> {}
50562impl ::core::default::Default for ImportMetalTextureInfoEXT<'_> {
50563    #[inline]
50564    fn default() -> Self {
50565        Self {
50566            s_type: Self::STRUCTURE_TYPE,
50567            p_next: ::core::ptr::null(),
50568            plane: ImageAspectFlags::default(),
50569            mtl_texture: unsafe { ::core::mem::zeroed() },
50570            _marker: PhantomData,
50571        }
50572    }
50573}
50574unsafe impl<'a> TaggedStructure for ImportMetalTextureInfoEXT<'a> {
50575    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_METAL_TEXTURE_INFO_EXT;
50576}
50577unsafe impl ExtendsImageCreateInfo for ImportMetalTextureInfoEXT<'_> {}
50578impl<'a> ImportMetalTextureInfoEXT<'a> {
50579    #[inline]
50580    pub fn plane(mut self, plane: ImageAspectFlags) -> Self {
50581        self.plane = plane;
50582        self
50583    }
50584    #[inline]
50585    pub fn mtl_texture(mut self, mtl_texture: MTLTexture_id) -> Self {
50586        self.mtl_texture = mtl_texture;
50587        self
50588    }
50589}
50590#[repr(C)]
50591#[cfg_attr(feature = "debug", derive(Debug))]
50592#[derive(Copy, Clone)]
50593#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalIOSurfaceInfoEXT.html>"]
50594#[must_use]
50595pub struct ExportMetalIOSurfaceInfoEXT<'a> {
50596    pub s_type: StructureType,
50597    pub p_next: *const c_void,
50598    pub image: Image,
50599    pub io_surface: IOSurfaceRef,
50600    pub _marker: PhantomData<&'a ()>,
50601}
50602unsafe impl Send for ExportMetalIOSurfaceInfoEXT<'_> {}
50603unsafe impl Sync for ExportMetalIOSurfaceInfoEXT<'_> {}
50604impl ::core::default::Default for ExportMetalIOSurfaceInfoEXT<'_> {
50605    #[inline]
50606    fn default() -> Self {
50607        Self {
50608            s_type: Self::STRUCTURE_TYPE,
50609            p_next: ::core::ptr::null(),
50610            image: Image::default(),
50611            io_surface: unsafe { ::core::mem::zeroed() },
50612            _marker: PhantomData,
50613        }
50614    }
50615}
50616unsafe impl<'a> TaggedStructure for ExportMetalIOSurfaceInfoEXT<'a> {
50617    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_IO_SURFACE_INFO_EXT;
50618}
50619unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalIOSurfaceInfoEXT<'_> {}
50620impl<'a> ExportMetalIOSurfaceInfoEXT<'a> {
50621    #[inline]
50622    pub fn image(mut self, image: Image) -> Self {
50623        self.image = image;
50624        self
50625    }
50626    #[inline]
50627    pub fn io_surface(mut self, io_surface: IOSurfaceRef) -> Self {
50628        self.io_surface = io_surface;
50629        self
50630    }
50631}
50632#[repr(C)]
50633#[cfg_attr(feature = "debug", derive(Debug))]
50634#[derive(Copy, Clone)]
50635#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMetalIOSurfaceInfoEXT.html>"]
50636#[must_use]
50637pub struct ImportMetalIOSurfaceInfoEXT<'a> {
50638    pub s_type: StructureType,
50639    pub p_next: *const c_void,
50640    pub io_surface: IOSurfaceRef,
50641    pub _marker: PhantomData<&'a ()>,
50642}
50643unsafe impl Send for ImportMetalIOSurfaceInfoEXT<'_> {}
50644unsafe impl Sync for ImportMetalIOSurfaceInfoEXT<'_> {}
50645impl ::core::default::Default for ImportMetalIOSurfaceInfoEXT<'_> {
50646    #[inline]
50647    fn default() -> Self {
50648        Self {
50649            s_type: Self::STRUCTURE_TYPE,
50650            p_next: ::core::ptr::null(),
50651            io_surface: unsafe { ::core::mem::zeroed() },
50652            _marker: PhantomData,
50653        }
50654    }
50655}
50656unsafe impl<'a> TaggedStructure for ImportMetalIOSurfaceInfoEXT<'a> {
50657    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_METAL_IO_SURFACE_INFO_EXT;
50658}
50659unsafe impl ExtendsImageCreateInfo for ImportMetalIOSurfaceInfoEXT<'_> {}
50660impl<'a> ImportMetalIOSurfaceInfoEXT<'a> {
50661    #[inline]
50662    pub fn io_surface(mut self, io_surface: IOSurfaceRef) -> Self {
50663        self.io_surface = io_surface;
50664        self
50665    }
50666}
50667#[repr(C)]
50668#[cfg_attr(feature = "debug", derive(Debug))]
50669#[derive(Copy, Clone)]
50670#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExportMetalSharedEventInfoEXT.html>"]
50671#[must_use]
50672pub struct ExportMetalSharedEventInfoEXT<'a> {
50673    pub s_type: StructureType,
50674    pub p_next: *const c_void,
50675    pub semaphore: Semaphore,
50676    pub event: Event,
50677    pub mtl_shared_event: MTLSharedEvent_id,
50678    pub _marker: PhantomData<&'a ()>,
50679}
50680unsafe impl Send for ExportMetalSharedEventInfoEXT<'_> {}
50681unsafe impl Sync for ExportMetalSharedEventInfoEXT<'_> {}
50682impl ::core::default::Default for ExportMetalSharedEventInfoEXT<'_> {
50683    #[inline]
50684    fn default() -> Self {
50685        Self {
50686            s_type: Self::STRUCTURE_TYPE,
50687            p_next: ::core::ptr::null(),
50688            semaphore: Semaphore::default(),
50689            event: Event::default(),
50690            mtl_shared_event: unsafe { ::core::mem::zeroed() },
50691            _marker: PhantomData,
50692        }
50693    }
50694}
50695unsafe impl<'a> TaggedStructure for ExportMetalSharedEventInfoEXT<'a> {
50696    const STRUCTURE_TYPE: StructureType = StructureType::EXPORT_METAL_SHARED_EVENT_INFO_EXT;
50697}
50698unsafe impl ExtendsExportMetalObjectsInfoEXT for ExportMetalSharedEventInfoEXT<'_> {}
50699impl<'a> ExportMetalSharedEventInfoEXT<'a> {
50700    #[inline]
50701    pub fn semaphore(mut self, semaphore: Semaphore) -> Self {
50702        self.semaphore = semaphore;
50703        self
50704    }
50705    #[inline]
50706    pub fn event(mut self, event: Event) -> Self {
50707        self.event = event;
50708        self
50709    }
50710    #[inline]
50711    pub fn mtl_shared_event(mut self, mtl_shared_event: MTLSharedEvent_id) -> Self {
50712        self.mtl_shared_event = mtl_shared_event;
50713        self
50714    }
50715}
50716#[repr(C)]
50717#[cfg_attr(feature = "debug", derive(Debug))]
50718#[derive(Copy, Clone)]
50719#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportMetalSharedEventInfoEXT.html>"]
50720#[must_use]
50721pub struct ImportMetalSharedEventInfoEXT<'a> {
50722    pub s_type: StructureType,
50723    pub p_next: *const c_void,
50724    pub mtl_shared_event: MTLSharedEvent_id,
50725    pub _marker: PhantomData<&'a ()>,
50726}
50727unsafe impl Send for ImportMetalSharedEventInfoEXT<'_> {}
50728unsafe impl Sync for ImportMetalSharedEventInfoEXT<'_> {}
50729impl ::core::default::Default for ImportMetalSharedEventInfoEXT<'_> {
50730    #[inline]
50731    fn default() -> Self {
50732        Self {
50733            s_type: Self::STRUCTURE_TYPE,
50734            p_next: ::core::ptr::null(),
50735            mtl_shared_event: unsafe { ::core::mem::zeroed() },
50736            _marker: PhantomData,
50737        }
50738    }
50739}
50740unsafe impl<'a> TaggedStructure for ImportMetalSharedEventInfoEXT<'a> {
50741    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_METAL_SHARED_EVENT_INFO_EXT;
50742}
50743unsafe impl ExtendsSemaphoreCreateInfo for ImportMetalSharedEventInfoEXT<'_> {}
50744unsafe impl ExtendsEventCreateInfo for ImportMetalSharedEventInfoEXT<'_> {}
50745impl<'a> ImportMetalSharedEventInfoEXT<'a> {
50746    #[inline]
50747    pub fn mtl_shared_event(mut self, mtl_shared_event: MTLSharedEvent_id) -> Self {
50748        self.mtl_shared_event = mtl_shared_event;
50749        self
50750    }
50751}
50752#[repr(C)]
50753#[cfg_attr(feature = "debug", derive(Debug))]
50754#[derive(Copy, Clone)]
50755#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT.html>"]
50756#[must_use]
50757pub struct PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'a> {
50758    pub s_type: StructureType,
50759    pub p_next: *mut c_void,
50760    pub non_seamless_cube_map: Bool32,
50761    pub _marker: PhantomData<&'a ()>,
50762}
50763unsafe impl Send for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'_> {}
50764unsafe impl Sync for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'_> {}
50765impl ::core::default::Default for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'_> {
50766    #[inline]
50767    fn default() -> Self {
50768        Self {
50769            s_type: Self::STRUCTURE_TYPE,
50770            p_next: ::core::ptr::null_mut(),
50771            non_seamless_cube_map: Bool32::default(),
50772            _marker: PhantomData,
50773        }
50774    }
50775}
50776unsafe impl<'a> TaggedStructure for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'a> {
50777    const STRUCTURE_TYPE: StructureType =
50778        StructureType::PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT;
50779}
50780unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'_> {}
50781unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'_> {}
50782impl<'a> PhysicalDeviceNonSeamlessCubeMapFeaturesEXT<'a> {
50783    #[inline]
50784    pub fn non_seamless_cube_map(mut self, non_seamless_cube_map: bool) -> Self {
50785        self.non_seamless_cube_map = non_seamless_cube_map.into();
50786        self
50787    }
50788}
50789#[repr(C)]
50790#[cfg_attr(feature = "debug", derive(Debug))]
50791#[derive(Copy, Clone)]
50792#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineRobustnessFeaturesEXT.html>"]
50793#[must_use]
50794pub struct PhysicalDevicePipelineRobustnessFeaturesEXT<'a> {
50795    pub s_type: StructureType,
50796    pub p_next: *mut c_void,
50797    pub pipeline_robustness: Bool32,
50798    pub _marker: PhantomData<&'a ()>,
50799}
50800unsafe impl Send for PhysicalDevicePipelineRobustnessFeaturesEXT<'_> {}
50801unsafe impl Sync for PhysicalDevicePipelineRobustnessFeaturesEXT<'_> {}
50802impl ::core::default::Default for PhysicalDevicePipelineRobustnessFeaturesEXT<'_> {
50803    #[inline]
50804    fn default() -> Self {
50805        Self {
50806            s_type: Self::STRUCTURE_TYPE,
50807            p_next: ::core::ptr::null_mut(),
50808            pipeline_robustness: Bool32::default(),
50809            _marker: PhantomData,
50810        }
50811    }
50812}
50813unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineRobustnessFeaturesEXT<'a> {
50814    const STRUCTURE_TYPE: StructureType =
50815        StructureType::PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT;
50816}
50817unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePipelineRobustnessFeaturesEXT<'_> {}
50818unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelineRobustnessFeaturesEXT<'_> {}
50819impl<'a> PhysicalDevicePipelineRobustnessFeaturesEXT<'a> {
50820    #[inline]
50821    pub fn pipeline_robustness(mut self, pipeline_robustness: bool) -> Self {
50822        self.pipeline_robustness = pipeline_robustness.into();
50823        self
50824    }
50825}
50826#[repr(C)]
50827#[cfg_attr(feature = "debug", derive(Debug))]
50828#[derive(Copy, Clone)]
50829#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineRobustnessCreateInfoEXT.html>"]
50830#[must_use]
50831pub struct PipelineRobustnessCreateInfoEXT<'a> {
50832    pub s_type: StructureType,
50833    pub p_next: *const c_void,
50834    pub storage_buffers: PipelineRobustnessBufferBehaviorEXT,
50835    pub uniform_buffers: PipelineRobustnessBufferBehaviorEXT,
50836    pub vertex_inputs: PipelineRobustnessBufferBehaviorEXT,
50837    pub images: PipelineRobustnessImageBehaviorEXT,
50838    pub _marker: PhantomData<&'a ()>,
50839}
50840unsafe impl Send for PipelineRobustnessCreateInfoEXT<'_> {}
50841unsafe impl Sync for PipelineRobustnessCreateInfoEXT<'_> {}
50842impl ::core::default::Default for PipelineRobustnessCreateInfoEXT<'_> {
50843    #[inline]
50844    fn default() -> Self {
50845        Self {
50846            s_type: Self::STRUCTURE_TYPE,
50847            p_next: ::core::ptr::null(),
50848            storage_buffers: PipelineRobustnessBufferBehaviorEXT::default(),
50849            uniform_buffers: PipelineRobustnessBufferBehaviorEXT::default(),
50850            vertex_inputs: PipelineRobustnessBufferBehaviorEXT::default(),
50851            images: PipelineRobustnessImageBehaviorEXT::default(),
50852            _marker: PhantomData,
50853        }
50854    }
50855}
50856unsafe impl<'a> TaggedStructure for PipelineRobustnessCreateInfoEXT<'a> {
50857    const STRUCTURE_TYPE: StructureType = StructureType::PIPELINE_ROBUSTNESS_CREATE_INFO_EXT;
50858}
50859unsafe impl ExtendsGraphicsPipelineCreateInfo for PipelineRobustnessCreateInfoEXT<'_> {}
50860unsafe impl ExtendsComputePipelineCreateInfo for PipelineRobustnessCreateInfoEXT<'_> {}
50861unsafe impl ExtendsPipelineShaderStageCreateInfo for PipelineRobustnessCreateInfoEXT<'_> {}
50862unsafe impl ExtendsRayTracingPipelineCreateInfoKHR for PipelineRobustnessCreateInfoEXT<'_> {}
50863impl<'a> PipelineRobustnessCreateInfoEXT<'a> {
50864    #[inline]
50865    pub fn storage_buffers(mut self, storage_buffers: PipelineRobustnessBufferBehaviorEXT) -> Self {
50866        self.storage_buffers = storage_buffers;
50867        self
50868    }
50869    #[inline]
50870    pub fn uniform_buffers(mut self, uniform_buffers: PipelineRobustnessBufferBehaviorEXT) -> Self {
50871        self.uniform_buffers = uniform_buffers;
50872        self
50873    }
50874    #[inline]
50875    pub fn vertex_inputs(mut self, vertex_inputs: PipelineRobustnessBufferBehaviorEXT) -> Self {
50876        self.vertex_inputs = vertex_inputs;
50877        self
50878    }
50879    #[inline]
50880    pub fn images(mut self, images: PipelineRobustnessImageBehaviorEXT) -> Self {
50881        self.images = images;
50882        self
50883    }
50884}
50885#[repr(C)]
50886#[cfg_attr(feature = "debug", derive(Debug))]
50887#[derive(Copy, Clone)]
50888#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineRobustnessPropertiesEXT.html>"]
50889#[must_use]
50890pub struct PhysicalDevicePipelineRobustnessPropertiesEXT<'a> {
50891    pub s_type: StructureType,
50892    pub p_next: *mut c_void,
50893    pub default_robustness_storage_buffers: PipelineRobustnessBufferBehaviorEXT,
50894    pub default_robustness_uniform_buffers: PipelineRobustnessBufferBehaviorEXT,
50895    pub default_robustness_vertex_inputs: PipelineRobustnessBufferBehaviorEXT,
50896    pub default_robustness_images: PipelineRobustnessImageBehaviorEXT,
50897    pub _marker: PhantomData<&'a ()>,
50898}
50899unsafe impl Send for PhysicalDevicePipelineRobustnessPropertiesEXT<'_> {}
50900unsafe impl Sync for PhysicalDevicePipelineRobustnessPropertiesEXT<'_> {}
50901impl ::core::default::Default for PhysicalDevicePipelineRobustnessPropertiesEXT<'_> {
50902    #[inline]
50903    fn default() -> Self {
50904        Self {
50905            s_type: Self::STRUCTURE_TYPE,
50906            p_next: ::core::ptr::null_mut(),
50907            default_robustness_storage_buffers: PipelineRobustnessBufferBehaviorEXT::default(),
50908            default_robustness_uniform_buffers: PipelineRobustnessBufferBehaviorEXT::default(),
50909            default_robustness_vertex_inputs: PipelineRobustnessBufferBehaviorEXT::default(),
50910            default_robustness_images: PipelineRobustnessImageBehaviorEXT::default(),
50911            _marker: PhantomData,
50912        }
50913    }
50914}
50915unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineRobustnessPropertiesEXT<'a> {
50916    const STRUCTURE_TYPE: StructureType =
50917        StructureType::PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT;
50918}
50919unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDevicePipelineRobustnessPropertiesEXT<'_> {}
50920impl<'a> PhysicalDevicePipelineRobustnessPropertiesEXT<'a> {
50921    #[inline]
50922    pub fn default_robustness_storage_buffers(
50923        mut self,
50924        default_robustness_storage_buffers: PipelineRobustnessBufferBehaviorEXT,
50925    ) -> Self {
50926        self.default_robustness_storage_buffers = default_robustness_storage_buffers;
50927        self
50928    }
50929    #[inline]
50930    pub fn default_robustness_uniform_buffers(
50931        mut self,
50932        default_robustness_uniform_buffers: PipelineRobustnessBufferBehaviorEXT,
50933    ) -> Self {
50934        self.default_robustness_uniform_buffers = default_robustness_uniform_buffers;
50935        self
50936    }
50937    #[inline]
50938    pub fn default_robustness_vertex_inputs(
50939        mut self,
50940        default_robustness_vertex_inputs: PipelineRobustnessBufferBehaviorEXT,
50941    ) -> Self {
50942        self.default_robustness_vertex_inputs = default_robustness_vertex_inputs;
50943        self
50944    }
50945    #[inline]
50946    pub fn default_robustness_images(
50947        mut self,
50948        default_robustness_images: PipelineRobustnessImageBehaviorEXT,
50949    ) -> Self {
50950        self.default_robustness_images = default_robustness_images;
50951        self
50952    }
50953}
50954#[repr(C)]
50955#[cfg_attr(feature = "debug", derive(Debug))]
50956#[derive(Copy, Clone)]
50957#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageViewSampleWeightCreateInfoQCOM.html>"]
50958#[must_use]
50959pub struct ImageViewSampleWeightCreateInfoQCOM<'a> {
50960    pub s_type: StructureType,
50961    pub p_next: *const c_void,
50962    pub filter_center: Offset2D,
50963    pub filter_size: Extent2D,
50964    pub num_phases: u32,
50965    pub _marker: PhantomData<&'a ()>,
50966}
50967unsafe impl Send for ImageViewSampleWeightCreateInfoQCOM<'_> {}
50968unsafe impl Sync for ImageViewSampleWeightCreateInfoQCOM<'_> {}
50969impl ::core::default::Default for ImageViewSampleWeightCreateInfoQCOM<'_> {
50970    #[inline]
50971    fn default() -> Self {
50972        Self {
50973            s_type: Self::STRUCTURE_TYPE,
50974            p_next: ::core::ptr::null(),
50975            filter_center: Offset2D::default(),
50976            filter_size: Extent2D::default(),
50977            num_phases: u32::default(),
50978            _marker: PhantomData,
50979        }
50980    }
50981}
50982unsafe impl<'a> TaggedStructure for ImageViewSampleWeightCreateInfoQCOM<'a> {
50983    const STRUCTURE_TYPE: StructureType = StructureType::IMAGE_VIEW_SAMPLE_WEIGHT_CREATE_INFO_QCOM;
50984}
50985unsafe impl ExtendsImageViewCreateInfo for ImageViewSampleWeightCreateInfoQCOM<'_> {}
50986impl<'a> ImageViewSampleWeightCreateInfoQCOM<'a> {
50987    #[inline]
50988    pub fn filter_center(mut self, filter_center: Offset2D) -> Self {
50989        self.filter_center = filter_center;
50990        self
50991    }
50992    #[inline]
50993    pub fn filter_size(mut self, filter_size: Extent2D) -> Self {
50994        self.filter_size = filter_size;
50995        self
50996    }
50997    #[inline]
50998    pub fn num_phases(mut self, num_phases: u32) -> Self {
50999        self.num_phases = num_phases;
51000        self
51001    }
51002}
51003#[repr(C)]
51004#[cfg_attr(feature = "debug", derive(Debug))]
51005#[derive(Copy, Clone)]
51006#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageProcessingFeaturesQCOM.html>"]
51007#[must_use]
51008pub struct PhysicalDeviceImageProcessingFeaturesQCOM<'a> {
51009    pub s_type: StructureType,
51010    pub p_next: *mut c_void,
51011    pub texture_sample_weighted: Bool32,
51012    pub texture_box_filter: Bool32,
51013    pub texture_block_match: Bool32,
51014    pub _marker: PhantomData<&'a ()>,
51015}
51016unsafe impl Send for PhysicalDeviceImageProcessingFeaturesQCOM<'_> {}
51017unsafe impl Sync for PhysicalDeviceImageProcessingFeaturesQCOM<'_> {}
51018impl ::core::default::Default for PhysicalDeviceImageProcessingFeaturesQCOM<'_> {
51019    #[inline]
51020    fn default() -> Self {
51021        Self {
51022            s_type: Self::STRUCTURE_TYPE,
51023            p_next: ::core::ptr::null_mut(),
51024            texture_sample_weighted: Bool32::default(),
51025            texture_box_filter: Bool32::default(),
51026            texture_block_match: Bool32::default(),
51027            _marker: PhantomData,
51028        }
51029    }
51030}
51031unsafe impl<'a> TaggedStructure for PhysicalDeviceImageProcessingFeaturesQCOM<'a> {
51032    const STRUCTURE_TYPE: StructureType =
51033        StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_FEATURES_QCOM;
51034}
51035unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImageProcessingFeaturesQCOM<'_> {}
51036unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageProcessingFeaturesQCOM<'_> {}
51037impl<'a> PhysicalDeviceImageProcessingFeaturesQCOM<'a> {
51038    #[inline]
51039    pub fn texture_sample_weighted(mut self, texture_sample_weighted: bool) -> Self {
51040        self.texture_sample_weighted = texture_sample_weighted.into();
51041        self
51042    }
51043    #[inline]
51044    pub fn texture_box_filter(mut self, texture_box_filter: bool) -> Self {
51045        self.texture_box_filter = texture_box_filter.into();
51046        self
51047    }
51048    #[inline]
51049    pub fn texture_block_match(mut self, texture_block_match: bool) -> Self {
51050        self.texture_block_match = texture_block_match.into();
51051        self
51052    }
51053}
51054#[repr(C)]
51055#[cfg_attr(feature = "debug", derive(Debug))]
51056#[derive(Copy, Clone)]
51057#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageProcessingPropertiesQCOM.html>"]
51058#[must_use]
51059pub struct PhysicalDeviceImageProcessingPropertiesQCOM<'a> {
51060    pub s_type: StructureType,
51061    pub p_next: *mut c_void,
51062    pub max_weight_filter_phases: u32,
51063    pub max_weight_filter_dimension: Extent2D,
51064    pub max_block_match_region: Extent2D,
51065    pub max_box_filter_block_size: Extent2D,
51066    pub _marker: PhantomData<&'a ()>,
51067}
51068unsafe impl Send for PhysicalDeviceImageProcessingPropertiesQCOM<'_> {}
51069unsafe impl Sync for PhysicalDeviceImageProcessingPropertiesQCOM<'_> {}
51070impl ::core::default::Default for PhysicalDeviceImageProcessingPropertiesQCOM<'_> {
51071    #[inline]
51072    fn default() -> Self {
51073        Self {
51074            s_type: Self::STRUCTURE_TYPE,
51075            p_next: ::core::ptr::null_mut(),
51076            max_weight_filter_phases: u32::default(),
51077            max_weight_filter_dimension: Extent2D::default(),
51078            max_block_match_region: Extent2D::default(),
51079            max_box_filter_block_size: Extent2D::default(),
51080            _marker: PhantomData,
51081        }
51082    }
51083}
51084unsafe impl<'a> TaggedStructure for PhysicalDeviceImageProcessingPropertiesQCOM<'a> {
51085    const STRUCTURE_TYPE: StructureType =
51086        StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_PROPERTIES_QCOM;
51087}
51088unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceImageProcessingPropertiesQCOM<'_> {}
51089impl<'a> PhysicalDeviceImageProcessingPropertiesQCOM<'a> {
51090    #[inline]
51091    pub fn max_weight_filter_phases(mut self, max_weight_filter_phases: u32) -> Self {
51092        self.max_weight_filter_phases = max_weight_filter_phases;
51093        self
51094    }
51095    #[inline]
51096    pub fn max_weight_filter_dimension(mut self, max_weight_filter_dimension: Extent2D) -> Self {
51097        self.max_weight_filter_dimension = max_weight_filter_dimension;
51098        self
51099    }
51100    #[inline]
51101    pub fn max_block_match_region(mut self, max_block_match_region: Extent2D) -> Self {
51102        self.max_block_match_region = max_block_match_region;
51103        self
51104    }
51105    #[inline]
51106    pub fn max_box_filter_block_size(mut self, max_box_filter_block_size: Extent2D) -> Self {
51107        self.max_box_filter_block_size = max_box_filter_block_size;
51108        self
51109    }
51110}
51111#[repr(C)]
51112#[cfg_attr(feature = "debug", derive(Debug))]
51113#[derive(Copy, Clone)]
51114#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceTilePropertiesFeaturesQCOM.html>"]
51115#[must_use]
51116pub struct PhysicalDeviceTilePropertiesFeaturesQCOM<'a> {
51117    pub s_type: StructureType,
51118    pub p_next: *mut c_void,
51119    pub tile_properties: Bool32,
51120    pub _marker: PhantomData<&'a ()>,
51121}
51122unsafe impl Send for PhysicalDeviceTilePropertiesFeaturesQCOM<'_> {}
51123unsafe impl Sync for PhysicalDeviceTilePropertiesFeaturesQCOM<'_> {}
51124impl ::core::default::Default for PhysicalDeviceTilePropertiesFeaturesQCOM<'_> {
51125    #[inline]
51126    fn default() -> Self {
51127        Self {
51128            s_type: Self::STRUCTURE_TYPE,
51129            p_next: ::core::ptr::null_mut(),
51130            tile_properties: Bool32::default(),
51131            _marker: PhantomData,
51132        }
51133    }
51134}
51135unsafe impl<'a> TaggedStructure for PhysicalDeviceTilePropertiesFeaturesQCOM<'a> {
51136    const STRUCTURE_TYPE: StructureType =
51137        StructureType::PHYSICAL_DEVICE_TILE_PROPERTIES_FEATURES_QCOM;
51138}
51139unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceTilePropertiesFeaturesQCOM<'_> {}
51140unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceTilePropertiesFeaturesQCOM<'_> {}
51141impl<'a> PhysicalDeviceTilePropertiesFeaturesQCOM<'a> {
51142    #[inline]
51143    pub fn tile_properties(mut self, tile_properties: bool) -> Self {
51144        self.tile_properties = tile_properties.into();
51145        self
51146    }
51147}
51148#[repr(C)]
51149#[cfg_attr(feature = "debug", derive(Debug))]
51150#[derive(Copy, Clone)]
51151#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTilePropertiesQCOM.html>"]
51152#[must_use]
51153pub struct TilePropertiesQCOM<'a> {
51154    pub s_type: StructureType,
51155    pub p_next: *mut c_void,
51156    pub tile_size: Extent3D,
51157    pub apron_size: Extent2D,
51158    pub origin: Offset2D,
51159    pub _marker: PhantomData<&'a ()>,
51160}
51161unsafe impl Send for TilePropertiesQCOM<'_> {}
51162unsafe impl Sync for TilePropertiesQCOM<'_> {}
51163impl ::core::default::Default for TilePropertiesQCOM<'_> {
51164    #[inline]
51165    fn default() -> Self {
51166        Self {
51167            s_type: Self::STRUCTURE_TYPE,
51168            p_next: ::core::ptr::null_mut(),
51169            tile_size: Extent3D::default(),
51170            apron_size: Extent2D::default(),
51171            origin: Offset2D::default(),
51172            _marker: PhantomData,
51173        }
51174    }
51175}
51176unsafe impl<'a> TaggedStructure for TilePropertiesQCOM<'a> {
51177    const STRUCTURE_TYPE: StructureType = StructureType::TILE_PROPERTIES_QCOM;
51178}
51179impl<'a> TilePropertiesQCOM<'a> {
51180    #[inline]
51181    pub fn tile_size(mut self, tile_size: Extent3D) -> Self {
51182        self.tile_size = tile_size;
51183        self
51184    }
51185    #[inline]
51186    pub fn apron_size(mut self, apron_size: Extent2D) -> Self {
51187        self.apron_size = apron_size;
51188        self
51189    }
51190    #[inline]
51191    pub fn origin(mut self, origin: Offset2D) -> Self {
51192        self.origin = origin;
51193        self
51194    }
51195}
51196#[repr(C)]
51197#[cfg_attr(feature = "debug", derive(Debug))]
51198#[derive(Copy, Clone)]
51199#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAmigoProfilingFeaturesSEC.html>"]
51200#[must_use]
51201pub struct PhysicalDeviceAmigoProfilingFeaturesSEC<'a> {
51202    pub s_type: StructureType,
51203    pub p_next: *mut c_void,
51204    pub amigo_profiling: Bool32,
51205    pub _marker: PhantomData<&'a ()>,
51206}
51207unsafe impl Send for PhysicalDeviceAmigoProfilingFeaturesSEC<'_> {}
51208unsafe impl Sync for PhysicalDeviceAmigoProfilingFeaturesSEC<'_> {}
51209impl ::core::default::Default for PhysicalDeviceAmigoProfilingFeaturesSEC<'_> {
51210    #[inline]
51211    fn default() -> Self {
51212        Self {
51213            s_type: Self::STRUCTURE_TYPE,
51214            p_next: ::core::ptr::null_mut(),
51215            amigo_profiling: Bool32::default(),
51216            _marker: PhantomData,
51217        }
51218    }
51219}
51220unsafe impl<'a> TaggedStructure for PhysicalDeviceAmigoProfilingFeaturesSEC<'a> {
51221    const STRUCTURE_TYPE: StructureType =
51222        StructureType::PHYSICAL_DEVICE_AMIGO_PROFILING_FEATURES_SEC;
51223}
51224unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceAmigoProfilingFeaturesSEC<'_> {}
51225unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceAmigoProfilingFeaturesSEC<'_> {}
51226impl<'a> PhysicalDeviceAmigoProfilingFeaturesSEC<'a> {
51227    #[inline]
51228    pub fn amigo_profiling(mut self, amigo_profiling: bool) -> Self {
51229        self.amigo_profiling = amigo_profiling.into();
51230        self
51231    }
51232}
51233#[repr(C)]
51234#[cfg_attr(feature = "debug", derive(Debug))]
51235#[derive(Copy, Clone)]
51236#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAmigoProfilingSubmitInfoSEC.html>"]
51237#[must_use]
51238pub struct AmigoProfilingSubmitInfoSEC<'a> {
51239    pub s_type: StructureType,
51240    pub p_next: *const c_void,
51241    pub first_draw_timestamp: u64,
51242    pub swap_buffer_timestamp: u64,
51243    pub _marker: PhantomData<&'a ()>,
51244}
51245unsafe impl Send for AmigoProfilingSubmitInfoSEC<'_> {}
51246unsafe impl Sync for AmigoProfilingSubmitInfoSEC<'_> {}
51247impl ::core::default::Default for AmigoProfilingSubmitInfoSEC<'_> {
51248    #[inline]
51249    fn default() -> Self {
51250        Self {
51251            s_type: Self::STRUCTURE_TYPE,
51252            p_next: ::core::ptr::null(),
51253            first_draw_timestamp: u64::default(),
51254            swap_buffer_timestamp: u64::default(),
51255            _marker: PhantomData,
51256        }
51257    }
51258}
51259unsafe impl<'a> TaggedStructure for AmigoProfilingSubmitInfoSEC<'a> {
51260    const STRUCTURE_TYPE: StructureType = StructureType::AMIGO_PROFILING_SUBMIT_INFO_SEC;
51261}
51262unsafe impl ExtendsSubmitInfo for AmigoProfilingSubmitInfoSEC<'_> {}
51263impl<'a> AmigoProfilingSubmitInfoSEC<'a> {
51264    #[inline]
51265    pub fn first_draw_timestamp(mut self, first_draw_timestamp: u64) -> Self {
51266        self.first_draw_timestamp = first_draw_timestamp;
51267        self
51268    }
51269    #[inline]
51270    pub fn swap_buffer_timestamp(mut self, swap_buffer_timestamp: u64) -> Self {
51271        self.swap_buffer_timestamp = swap_buffer_timestamp;
51272        self
51273    }
51274}
51275#[repr(C)]
51276#[cfg_attr(feature = "debug", derive(Debug))]
51277#[derive(Copy, Clone)]
51278#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT.html>"]
51279#[must_use]
51280pub struct PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'a> {
51281    pub s_type: StructureType,
51282    pub p_next: *mut c_void,
51283    pub attachment_feedback_loop_layout: Bool32,
51284    pub _marker: PhantomData<&'a ()>,
51285}
51286unsafe impl Send for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'_> {}
51287unsafe impl Sync for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'_> {}
51288impl ::core::default::Default for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'_> {
51289    #[inline]
51290    fn default() -> Self {
51291        Self {
51292            s_type: Self::STRUCTURE_TYPE,
51293            p_next: ::core::ptr::null_mut(),
51294            attachment_feedback_loop_layout: Bool32::default(),
51295            _marker: PhantomData,
51296        }
51297    }
51298}
51299unsafe impl<'a> TaggedStructure for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'a> {
51300    const STRUCTURE_TYPE: StructureType =
51301        StructureType::PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_LAYOUT_FEATURES_EXT;
51302}
51303unsafe impl ExtendsPhysicalDeviceFeatures2
51304    for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'_>
51305{
51306}
51307unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'_> {}
51308impl<'a> PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT<'a> {
51309    #[inline]
51310    pub fn attachment_feedback_loop_layout(
51311        mut self,
51312        attachment_feedback_loop_layout: bool,
51313    ) -> Self {
51314        self.attachment_feedback_loop_layout = attachment_feedback_loop_layout.into();
51315        self
51316    }
51317}
51318#[repr(C)]
51319#[cfg_attr(feature = "debug", derive(Debug))]
51320#[derive(Copy, Clone)]
51321#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthClampZeroOneFeaturesEXT.html>"]
51322#[must_use]
51323pub struct PhysicalDeviceDepthClampZeroOneFeaturesEXT<'a> {
51324    pub s_type: StructureType,
51325    pub p_next: *mut c_void,
51326    pub depth_clamp_zero_one: Bool32,
51327    pub _marker: PhantomData<&'a ()>,
51328}
51329unsafe impl Send for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'_> {}
51330unsafe impl Sync for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'_> {}
51331impl ::core::default::Default for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'_> {
51332    #[inline]
51333    fn default() -> Self {
51334        Self {
51335            s_type: Self::STRUCTURE_TYPE,
51336            p_next: ::core::ptr::null_mut(),
51337            depth_clamp_zero_one: Bool32::default(),
51338            _marker: PhantomData,
51339        }
51340    }
51341}
51342unsafe impl<'a> TaggedStructure for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'a> {
51343    const STRUCTURE_TYPE: StructureType =
51344        StructureType::PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT;
51345}
51346unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'_> {}
51347unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDepthClampZeroOneFeaturesEXT<'_> {}
51348impl<'a> PhysicalDeviceDepthClampZeroOneFeaturesEXT<'a> {
51349    #[inline]
51350    pub fn depth_clamp_zero_one(mut self, depth_clamp_zero_one: bool) -> Self {
51351        self.depth_clamp_zero_one = depth_clamp_zero_one.into();
51352        self
51353    }
51354}
51355#[repr(C)]
51356#[cfg_attr(feature = "debug", derive(Debug))]
51357#[derive(Copy, Clone)]
51358#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceAddressBindingReportFeaturesEXT.html>"]
51359#[must_use]
51360pub struct PhysicalDeviceAddressBindingReportFeaturesEXT<'a> {
51361    pub s_type: StructureType,
51362    pub p_next: *mut c_void,
51363    pub report_address_binding: Bool32,
51364    pub _marker: PhantomData<&'a ()>,
51365}
51366unsafe impl Send for PhysicalDeviceAddressBindingReportFeaturesEXT<'_> {}
51367unsafe impl Sync for PhysicalDeviceAddressBindingReportFeaturesEXT<'_> {}
51368impl ::core::default::Default for PhysicalDeviceAddressBindingReportFeaturesEXT<'_> {
51369    #[inline]
51370    fn default() -> Self {
51371        Self {
51372            s_type: Self::STRUCTURE_TYPE,
51373            p_next: ::core::ptr::null_mut(),
51374            report_address_binding: Bool32::default(),
51375            _marker: PhantomData,
51376        }
51377    }
51378}
51379unsafe impl<'a> TaggedStructure for PhysicalDeviceAddressBindingReportFeaturesEXT<'a> {
51380    const STRUCTURE_TYPE: StructureType =
51381        StructureType::PHYSICAL_DEVICE_ADDRESS_BINDING_REPORT_FEATURES_EXT;
51382}
51383unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceAddressBindingReportFeaturesEXT<'_> {}
51384unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceAddressBindingReportFeaturesEXT<'_> {}
51385impl<'a> PhysicalDeviceAddressBindingReportFeaturesEXT<'a> {
51386    #[inline]
51387    pub fn report_address_binding(mut self, report_address_binding: bool) -> Self {
51388        self.report_address_binding = report_address_binding.into();
51389        self
51390    }
51391}
51392#[repr(C)]
51393#[cfg_attr(feature = "debug", derive(Debug))]
51394#[derive(Copy, Clone)]
51395#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceAddressBindingCallbackDataEXT.html>"]
51396#[must_use]
51397pub struct DeviceAddressBindingCallbackDataEXT<'a> {
51398    pub s_type: StructureType,
51399    pub p_next: *mut c_void,
51400    pub flags: DeviceAddressBindingFlagsEXT,
51401    pub base_address: DeviceAddress,
51402    pub size: DeviceSize,
51403    pub binding_type: DeviceAddressBindingTypeEXT,
51404    pub _marker: PhantomData<&'a ()>,
51405}
51406unsafe impl Send for DeviceAddressBindingCallbackDataEXT<'_> {}
51407unsafe impl Sync for DeviceAddressBindingCallbackDataEXT<'_> {}
51408impl ::core::default::Default for DeviceAddressBindingCallbackDataEXT<'_> {
51409    #[inline]
51410    fn default() -> Self {
51411        Self {
51412            s_type: Self::STRUCTURE_TYPE,
51413            p_next: ::core::ptr::null_mut(),
51414            flags: DeviceAddressBindingFlagsEXT::default(),
51415            base_address: DeviceAddress::default(),
51416            size: DeviceSize::default(),
51417            binding_type: DeviceAddressBindingTypeEXT::default(),
51418            _marker: PhantomData,
51419        }
51420    }
51421}
51422unsafe impl<'a> TaggedStructure for DeviceAddressBindingCallbackDataEXT<'a> {
51423    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_ADDRESS_BINDING_CALLBACK_DATA_EXT;
51424}
51425unsafe impl ExtendsDebugUtilsMessengerCallbackDataEXT for DeviceAddressBindingCallbackDataEXT<'_> {}
51426impl<'a> DeviceAddressBindingCallbackDataEXT<'a> {
51427    #[inline]
51428    pub fn flags(mut self, flags: DeviceAddressBindingFlagsEXT) -> Self {
51429        self.flags = flags;
51430        self
51431    }
51432    #[inline]
51433    pub fn base_address(mut self, base_address: DeviceAddress) -> Self {
51434        self.base_address = base_address;
51435        self
51436    }
51437    #[inline]
51438    pub fn size(mut self, size: DeviceSize) -> Self {
51439        self.size = size;
51440        self
51441    }
51442    #[inline]
51443    pub fn binding_type(mut self, binding_type: DeviceAddressBindingTypeEXT) -> Self {
51444        self.binding_type = binding_type;
51445        self
51446    }
51447}
51448#[repr(C)]
51449#[cfg_attr(feature = "debug", derive(Debug))]
51450#[derive(Copy, Clone)]
51451#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceOpticalFlowFeaturesNV.html>"]
51452#[must_use]
51453pub struct PhysicalDeviceOpticalFlowFeaturesNV<'a> {
51454    pub s_type: StructureType,
51455    pub p_next: *mut c_void,
51456    pub optical_flow: Bool32,
51457    pub _marker: PhantomData<&'a ()>,
51458}
51459unsafe impl Send for PhysicalDeviceOpticalFlowFeaturesNV<'_> {}
51460unsafe impl Sync for PhysicalDeviceOpticalFlowFeaturesNV<'_> {}
51461impl ::core::default::Default for PhysicalDeviceOpticalFlowFeaturesNV<'_> {
51462    #[inline]
51463    fn default() -> Self {
51464        Self {
51465            s_type: Self::STRUCTURE_TYPE,
51466            p_next: ::core::ptr::null_mut(),
51467            optical_flow: Bool32::default(),
51468            _marker: PhantomData,
51469        }
51470    }
51471}
51472unsafe impl<'a> TaggedStructure for PhysicalDeviceOpticalFlowFeaturesNV<'a> {
51473    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV;
51474}
51475unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceOpticalFlowFeaturesNV<'_> {}
51476unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceOpticalFlowFeaturesNV<'_> {}
51477impl<'a> PhysicalDeviceOpticalFlowFeaturesNV<'a> {
51478    #[inline]
51479    pub fn optical_flow(mut self, optical_flow: bool) -> Self {
51480        self.optical_flow = optical_flow.into();
51481        self
51482    }
51483}
51484#[repr(C)]
51485#[cfg_attr(feature = "debug", derive(Debug))]
51486#[derive(Copy, Clone)]
51487#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceOpticalFlowPropertiesNV.html>"]
51488#[must_use]
51489pub struct PhysicalDeviceOpticalFlowPropertiesNV<'a> {
51490    pub s_type: StructureType,
51491    pub p_next: *mut c_void,
51492    pub supported_output_grid_sizes: OpticalFlowGridSizeFlagsNV,
51493    pub supported_hint_grid_sizes: OpticalFlowGridSizeFlagsNV,
51494    pub hint_supported: Bool32,
51495    pub cost_supported: Bool32,
51496    pub bidirectional_flow_supported: Bool32,
51497    pub global_flow_supported: Bool32,
51498    pub min_width: u32,
51499    pub min_height: u32,
51500    pub max_width: u32,
51501    pub max_height: u32,
51502    pub max_num_regions_of_interest: u32,
51503    pub _marker: PhantomData<&'a ()>,
51504}
51505unsafe impl Send for PhysicalDeviceOpticalFlowPropertiesNV<'_> {}
51506unsafe impl Sync for PhysicalDeviceOpticalFlowPropertiesNV<'_> {}
51507impl ::core::default::Default for PhysicalDeviceOpticalFlowPropertiesNV<'_> {
51508    #[inline]
51509    fn default() -> Self {
51510        Self {
51511            s_type: Self::STRUCTURE_TYPE,
51512            p_next: ::core::ptr::null_mut(),
51513            supported_output_grid_sizes: OpticalFlowGridSizeFlagsNV::default(),
51514            supported_hint_grid_sizes: OpticalFlowGridSizeFlagsNV::default(),
51515            hint_supported: Bool32::default(),
51516            cost_supported: Bool32::default(),
51517            bidirectional_flow_supported: Bool32::default(),
51518            global_flow_supported: Bool32::default(),
51519            min_width: u32::default(),
51520            min_height: u32::default(),
51521            max_width: u32::default(),
51522            max_height: u32::default(),
51523            max_num_regions_of_interest: u32::default(),
51524            _marker: PhantomData,
51525        }
51526    }
51527}
51528unsafe impl<'a> TaggedStructure for PhysicalDeviceOpticalFlowPropertiesNV<'a> {
51529    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV;
51530}
51531unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceOpticalFlowPropertiesNV<'_> {}
51532impl<'a> PhysicalDeviceOpticalFlowPropertiesNV<'a> {
51533    #[inline]
51534    pub fn supported_output_grid_sizes(
51535        mut self,
51536        supported_output_grid_sizes: OpticalFlowGridSizeFlagsNV,
51537    ) -> Self {
51538        self.supported_output_grid_sizes = supported_output_grid_sizes;
51539        self
51540    }
51541    #[inline]
51542    pub fn supported_hint_grid_sizes(
51543        mut self,
51544        supported_hint_grid_sizes: OpticalFlowGridSizeFlagsNV,
51545    ) -> Self {
51546        self.supported_hint_grid_sizes = supported_hint_grid_sizes;
51547        self
51548    }
51549    #[inline]
51550    pub fn hint_supported(mut self, hint_supported: bool) -> Self {
51551        self.hint_supported = hint_supported.into();
51552        self
51553    }
51554    #[inline]
51555    pub fn cost_supported(mut self, cost_supported: bool) -> Self {
51556        self.cost_supported = cost_supported.into();
51557        self
51558    }
51559    #[inline]
51560    pub fn bidirectional_flow_supported(mut self, bidirectional_flow_supported: bool) -> Self {
51561        self.bidirectional_flow_supported = bidirectional_flow_supported.into();
51562        self
51563    }
51564    #[inline]
51565    pub fn global_flow_supported(mut self, global_flow_supported: bool) -> Self {
51566        self.global_flow_supported = global_flow_supported.into();
51567        self
51568    }
51569    #[inline]
51570    pub fn min_width(mut self, min_width: u32) -> Self {
51571        self.min_width = min_width;
51572        self
51573    }
51574    #[inline]
51575    pub fn min_height(mut self, min_height: u32) -> Self {
51576        self.min_height = min_height;
51577        self
51578    }
51579    #[inline]
51580    pub fn max_width(mut self, max_width: u32) -> Self {
51581        self.max_width = max_width;
51582        self
51583    }
51584    #[inline]
51585    pub fn max_height(mut self, max_height: u32) -> Self {
51586        self.max_height = max_height;
51587        self
51588    }
51589    #[inline]
51590    pub fn max_num_regions_of_interest(mut self, max_num_regions_of_interest: u32) -> Self {
51591        self.max_num_regions_of_interest = max_num_regions_of_interest;
51592        self
51593    }
51594}
51595#[repr(C)]
51596#[cfg_attr(feature = "debug", derive(Debug))]
51597#[derive(Copy, Clone)]
51598#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowImageFormatInfoNV.html>"]
51599#[must_use]
51600pub struct OpticalFlowImageFormatInfoNV<'a> {
51601    pub s_type: StructureType,
51602    pub p_next: *const c_void,
51603    pub usage: OpticalFlowUsageFlagsNV,
51604    pub _marker: PhantomData<&'a ()>,
51605}
51606unsafe impl Send for OpticalFlowImageFormatInfoNV<'_> {}
51607unsafe impl Sync for OpticalFlowImageFormatInfoNV<'_> {}
51608impl ::core::default::Default for OpticalFlowImageFormatInfoNV<'_> {
51609    #[inline]
51610    fn default() -> Self {
51611        Self {
51612            s_type: Self::STRUCTURE_TYPE,
51613            p_next: ::core::ptr::null(),
51614            usage: OpticalFlowUsageFlagsNV::default(),
51615            _marker: PhantomData,
51616        }
51617    }
51618}
51619unsafe impl<'a> TaggedStructure for OpticalFlowImageFormatInfoNV<'a> {
51620    const STRUCTURE_TYPE: StructureType = StructureType::OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV;
51621}
51622unsafe impl ExtendsPhysicalDeviceImageFormatInfo2 for OpticalFlowImageFormatInfoNV<'_> {}
51623unsafe impl ExtendsImageCreateInfo for OpticalFlowImageFormatInfoNV<'_> {}
51624impl<'a> OpticalFlowImageFormatInfoNV<'a> {
51625    #[inline]
51626    pub fn usage(mut self, usage: OpticalFlowUsageFlagsNV) -> Self {
51627        self.usage = usage;
51628        self
51629    }
51630}
51631#[repr(C)]
51632#[cfg_attr(feature = "debug", derive(Debug))]
51633#[derive(Copy, Clone)]
51634#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowImageFormatPropertiesNV.html>"]
51635#[must_use]
51636pub struct OpticalFlowImageFormatPropertiesNV<'a> {
51637    pub s_type: StructureType,
51638    pub p_next: *const c_void,
51639    pub format: Format,
51640    pub _marker: PhantomData<&'a ()>,
51641}
51642unsafe impl Send for OpticalFlowImageFormatPropertiesNV<'_> {}
51643unsafe impl Sync for OpticalFlowImageFormatPropertiesNV<'_> {}
51644impl ::core::default::Default for OpticalFlowImageFormatPropertiesNV<'_> {
51645    #[inline]
51646    fn default() -> Self {
51647        Self {
51648            s_type: Self::STRUCTURE_TYPE,
51649            p_next: ::core::ptr::null(),
51650            format: Format::default(),
51651            _marker: PhantomData,
51652        }
51653    }
51654}
51655unsafe impl<'a> TaggedStructure for OpticalFlowImageFormatPropertiesNV<'a> {
51656    const STRUCTURE_TYPE: StructureType = StructureType::OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV;
51657}
51658impl<'a> OpticalFlowImageFormatPropertiesNV<'a> {
51659    #[inline]
51660    pub fn format(mut self, format: Format) -> Self {
51661        self.format = format;
51662        self
51663    }
51664}
51665#[repr(C)]
51666#[cfg_attr(feature = "debug", derive(Debug))]
51667#[derive(Copy, Clone)]
51668#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowSessionCreateInfoNV.html>"]
51669#[must_use]
51670pub struct OpticalFlowSessionCreateInfoNV<'a> {
51671    pub s_type: StructureType,
51672    pub p_next: *mut c_void,
51673    pub width: u32,
51674    pub height: u32,
51675    pub image_format: Format,
51676    pub flow_vector_format: Format,
51677    pub cost_format: Format,
51678    pub output_grid_size: OpticalFlowGridSizeFlagsNV,
51679    pub hint_grid_size: OpticalFlowGridSizeFlagsNV,
51680    pub performance_level: OpticalFlowPerformanceLevelNV,
51681    pub flags: OpticalFlowSessionCreateFlagsNV,
51682    pub _marker: PhantomData<&'a ()>,
51683}
51684unsafe impl Send for OpticalFlowSessionCreateInfoNV<'_> {}
51685unsafe impl Sync for OpticalFlowSessionCreateInfoNV<'_> {}
51686impl ::core::default::Default for OpticalFlowSessionCreateInfoNV<'_> {
51687    #[inline]
51688    fn default() -> Self {
51689        Self {
51690            s_type: Self::STRUCTURE_TYPE,
51691            p_next: ::core::ptr::null_mut(),
51692            width: u32::default(),
51693            height: u32::default(),
51694            image_format: Format::default(),
51695            flow_vector_format: Format::default(),
51696            cost_format: Format::default(),
51697            output_grid_size: OpticalFlowGridSizeFlagsNV::default(),
51698            hint_grid_size: OpticalFlowGridSizeFlagsNV::default(),
51699            performance_level: OpticalFlowPerformanceLevelNV::default(),
51700            flags: OpticalFlowSessionCreateFlagsNV::default(),
51701            _marker: PhantomData,
51702        }
51703    }
51704}
51705unsafe impl<'a> TaggedStructure for OpticalFlowSessionCreateInfoNV<'a> {
51706    const STRUCTURE_TYPE: StructureType = StructureType::OPTICAL_FLOW_SESSION_CREATE_INFO_NV;
51707}
51708pub unsafe trait ExtendsOpticalFlowSessionCreateInfoNV {}
51709impl<'a> OpticalFlowSessionCreateInfoNV<'a> {
51710    #[inline]
51711    pub fn width(mut self, width: u32) -> Self {
51712        self.width = width;
51713        self
51714    }
51715    #[inline]
51716    pub fn height(mut self, height: u32) -> Self {
51717        self.height = height;
51718        self
51719    }
51720    #[inline]
51721    pub fn image_format(mut self, image_format: Format) -> Self {
51722        self.image_format = image_format;
51723        self
51724    }
51725    #[inline]
51726    pub fn flow_vector_format(mut self, flow_vector_format: Format) -> Self {
51727        self.flow_vector_format = flow_vector_format;
51728        self
51729    }
51730    #[inline]
51731    pub fn cost_format(mut self, cost_format: Format) -> Self {
51732        self.cost_format = cost_format;
51733        self
51734    }
51735    #[inline]
51736    pub fn output_grid_size(mut self, output_grid_size: OpticalFlowGridSizeFlagsNV) -> Self {
51737        self.output_grid_size = output_grid_size;
51738        self
51739    }
51740    #[inline]
51741    pub fn hint_grid_size(mut self, hint_grid_size: OpticalFlowGridSizeFlagsNV) -> Self {
51742        self.hint_grid_size = hint_grid_size;
51743        self
51744    }
51745    #[inline]
51746    pub fn performance_level(mut self, performance_level: OpticalFlowPerformanceLevelNV) -> Self {
51747        self.performance_level = performance_level;
51748        self
51749    }
51750    #[inline]
51751    pub fn flags(mut self, flags: OpticalFlowSessionCreateFlagsNV) -> Self {
51752        self.flags = flags;
51753        self
51754    }
51755    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
51756    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
51757    #[doc = r" valid extension structs can be pushed into the chain."]
51758    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
51759    #[doc = r" chain will look like `A -> D -> B -> C`."]
51760    pub fn push_next<T: ExtendsOpticalFlowSessionCreateInfoNV + ?Sized>(
51761        mut self,
51762        next: &'a mut T,
51763    ) -> Self {
51764        unsafe {
51765            let next_ptr = <*mut T>::cast(next);
51766            let last_next = ptr_chain_iter(next).last().unwrap();
51767            (*last_next).p_next = self.p_next as _;
51768            self.p_next = next_ptr;
51769        }
51770        self
51771    }
51772}
51773#[repr(C)]
51774#[cfg_attr(feature = "debug", derive(Debug))]
51775#[derive(Copy, Clone)]
51776#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowSessionCreatePrivateDataInfoNV.html>"]
51777#[must_use]
51778pub struct OpticalFlowSessionCreatePrivateDataInfoNV<'a> {
51779    pub s_type: StructureType,
51780    pub p_next: *mut c_void,
51781    pub id: u32,
51782    pub size: u32,
51783    pub p_private_data: *const c_void,
51784    pub _marker: PhantomData<&'a ()>,
51785}
51786unsafe impl Send for OpticalFlowSessionCreatePrivateDataInfoNV<'_> {}
51787unsafe impl Sync for OpticalFlowSessionCreatePrivateDataInfoNV<'_> {}
51788impl ::core::default::Default for OpticalFlowSessionCreatePrivateDataInfoNV<'_> {
51789    #[inline]
51790    fn default() -> Self {
51791        Self {
51792            s_type: Self::STRUCTURE_TYPE,
51793            p_next: ::core::ptr::null_mut(),
51794            id: u32::default(),
51795            size: u32::default(),
51796            p_private_data: ::core::ptr::null(),
51797            _marker: PhantomData,
51798        }
51799    }
51800}
51801unsafe impl<'a> TaggedStructure for OpticalFlowSessionCreatePrivateDataInfoNV<'a> {
51802    const STRUCTURE_TYPE: StructureType =
51803        StructureType::OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV;
51804}
51805unsafe impl ExtendsOpticalFlowSessionCreateInfoNV
51806    for OpticalFlowSessionCreatePrivateDataInfoNV<'_>
51807{
51808}
51809impl<'a> OpticalFlowSessionCreatePrivateDataInfoNV<'a> {
51810    #[inline]
51811    pub fn id(mut self, id: u32) -> Self {
51812        self.id = id;
51813        self
51814    }
51815    #[inline]
51816    pub fn size(mut self, size: u32) -> Self {
51817        self.size = size;
51818        self
51819    }
51820    #[inline]
51821    pub fn private_data(mut self, private_data: *const c_void) -> Self {
51822        self.p_private_data = private_data;
51823        self
51824    }
51825}
51826#[repr(C)]
51827#[cfg_attr(feature = "debug", derive(Debug))]
51828#[derive(Copy, Clone)]
51829#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOpticalFlowExecuteInfoNV.html>"]
51830#[must_use]
51831pub struct OpticalFlowExecuteInfoNV<'a> {
51832    pub s_type: StructureType,
51833    pub p_next: *mut c_void,
51834    pub flags: OpticalFlowExecuteFlagsNV,
51835    pub region_count: u32,
51836    pub p_regions: *const Rect2D,
51837    pub _marker: PhantomData<&'a ()>,
51838}
51839unsafe impl Send for OpticalFlowExecuteInfoNV<'_> {}
51840unsafe impl Sync for OpticalFlowExecuteInfoNV<'_> {}
51841impl ::core::default::Default for OpticalFlowExecuteInfoNV<'_> {
51842    #[inline]
51843    fn default() -> Self {
51844        Self {
51845            s_type: Self::STRUCTURE_TYPE,
51846            p_next: ::core::ptr::null_mut(),
51847            flags: OpticalFlowExecuteFlagsNV::default(),
51848            region_count: u32::default(),
51849            p_regions: ::core::ptr::null(),
51850            _marker: PhantomData,
51851        }
51852    }
51853}
51854unsafe impl<'a> TaggedStructure for OpticalFlowExecuteInfoNV<'a> {
51855    const STRUCTURE_TYPE: StructureType = StructureType::OPTICAL_FLOW_EXECUTE_INFO_NV;
51856}
51857impl<'a> OpticalFlowExecuteInfoNV<'a> {
51858    #[inline]
51859    pub fn flags(mut self, flags: OpticalFlowExecuteFlagsNV) -> Self {
51860        self.flags = flags;
51861        self
51862    }
51863    #[inline]
51864    pub fn regions(mut self, regions: &'a [Rect2D]) -> Self {
51865        self.region_count = regions.len() as _;
51866        self.p_regions = regions.as_ptr();
51867        self
51868    }
51869}
51870#[repr(C)]
51871#[cfg_attr(feature = "debug", derive(Debug))]
51872#[derive(Copy, Clone)]
51873#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFaultFeaturesEXT.html>"]
51874#[must_use]
51875pub struct PhysicalDeviceFaultFeaturesEXT<'a> {
51876    pub s_type: StructureType,
51877    pub p_next: *mut c_void,
51878    pub device_fault: Bool32,
51879    pub device_fault_vendor_binary: Bool32,
51880    pub _marker: PhantomData<&'a ()>,
51881}
51882unsafe impl Send for PhysicalDeviceFaultFeaturesEXT<'_> {}
51883unsafe impl Sync for PhysicalDeviceFaultFeaturesEXT<'_> {}
51884impl ::core::default::Default for PhysicalDeviceFaultFeaturesEXT<'_> {
51885    #[inline]
51886    fn default() -> Self {
51887        Self {
51888            s_type: Self::STRUCTURE_TYPE,
51889            p_next: ::core::ptr::null_mut(),
51890            device_fault: Bool32::default(),
51891            device_fault_vendor_binary: Bool32::default(),
51892            _marker: PhantomData,
51893        }
51894    }
51895}
51896unsafe impl<'a> TaggedStructure for PhysicalDeviceFaultFeaturesEXT<'a> {
51897    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_FAULT_FEATURES_EXT;
51898}
51899unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceFaultFeaturesEXT<'_> {}
51900unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFaultFeaturesEXT<'_> {}
51901impl<'a> PhysicalDeviceFaultFeaturesEXT<'a> {
51902    #[inline]
51903    pub fn device_fault(mut self, device_fault: bool) -> Self {
51904        self.device_fault = device_fault.into();
51905        self
51906    }
51907    #[inline]
51908    pub fn device_fault_vendor_binary(mut self, device_fault_vendor_binary: bool) -> Self {
51909        self.device_fault_vendor_binary = device_fault_vendor_binary.into();
51910        self
51911    }
51912}
51913#[repr(C)]
51914#[cfg_attr(feature = "debug", derive(Debug))]
51915#[derive(Copy, Clone, Default)]
51916#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceFaultAddressInfoEXT.html>"]
51917#[must_use]
51918pub struct DeviceFaultAddressInfoEXT {
51919    pub address_type: DeviceFaultAddressTypeEXT,
51920    pub reported_address: DeviceAddress,
51921    pub address_precision: DeviceSize,
51922}
51923impl DeviceFaultAddressInfoEXT {
51924    #[inline]
51925    pub fn address_type(mut self, address_type: DeviceFaultAddressTypeEXT) -> Self {
51926        self.address_type = address_type;
51927        self
51928    }
51929    #[inline]
51930    pub fn reported_address(mut self, reported_address: DeviceAddress) -> Self {
51931        self.reported_address = reported_address;
51932        self
51933    }
51934    #[inline]
51935    pub fn address_precision(mut self, address_precision: DeviceSize) -> Self {
51936        self.address_precision = address_precision;
51937        self
51938    }
51939}
51940#[repr(C)]
51941#[derive(Copy, Clone)]
51942#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceFaultVendorInfoEXT.html>"]
51943#[must_use]
51944pub struct DeviceFaultVendorInfoEXT {
51945    pub description: [c_char; MAX_DESCRIPTION_SIZE],
51946    pub vendor_fault_code: u64,
51947    pub vendor_fault_data: u64,
51948}
51949#[cfg(feature = "debug")]
51950impl fmt::Debug for DeviceFaultVendorInfoEXT {
51951    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
51952        fmt.debug_struct("DeviceFaultVendorInfoEXT")
51953            .field("description", &self.description_as_c_str())
51954            .field("vendor_fault_code", &self.vendor_fault_code)
51955            .field("vendor_fault_data", &self.vendor_fault_data)
51956            .finish()
51957    }
51958}
51959impl ::core::default::Default for DeviceFaultVendorInfoEXT {
51960    #[inline]
51961    fn default() -> Self {
51962        Self {
51963            description: unsafe { ::core::mem::zeroed() },
51964            vendor_fault_code: u64::default(),
51965            vendor_fault_data: u64::default(),
51966        }
51967    }
51968}
51969impl DeviceFaultVendorInfoEXT {
51970    #[inline]
51971    pub fn description(
51972        mut self,
51973        description: &CStr,
51974    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
51975        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
51976    }
51977    #[inline]
51978    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
51979        wrap_c_str_slice_until_nul(&self.description)
51980    }
51981    #[inline]
51982    pub fn vendor_fault_code(mut self, vendor_fault_code: u64) -> Self {
51983        self.vendor_fault_code = vendor_fault_code;
51984        self
51985    }
51986    #[inline]
51987    pub fn vendor_fault_data(mut self, vendor_fault_data: u64) -> Self {
51988        self.vendor_fault_data = vendor_fault_data;
51989        self
51990    }
51991}
51992#[repr(C)]
51993#[cfg_attr(feature = "debug", derive(Debug))]
51994#[derive(Copy, Clone)]
51995#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceFaultCountsEXT.html>"]
51996#[must_use]
51997pub struct DeviceFaultCountsEXT<'a> {
51998    pub s_type: StructureType,
51999    pub p_next: *mut c_void,
52000    pub address_info_count: u32,
52001    pub vendor_info_count: u32,
52002    pub vendor_binary_size: DeviceSize,
52003    pub _marker: PhantomData<&'a ()>,
52004}
52005unsafe impl Send for DeviceFaultCountsEXT<'_> {}
52006unsafe impl Sync for DeviceFaultCountsEXT<'_> {}
52007impl ::core::default::Default for DeviceFaultCountsEXT<'_> {
52008    #[inline]
52009    fn default() -> Self {
52010        Self {
52011            s_type: Self::STRUCTURE_TYPE,
52012            p_next: ::core::ptr::null_mut(),
52013            address_info_count: u32::default(),
52014            vendor_info_count: u32::default(),
52015            vendor_binary_size: DeviceSize::default(),
52016            _marker: PhantomData,
52017        }
52018    }
52019}
52020unsafe impl<'a> TaggedStructure for DeviceFaultCountsEXT<'a> {
52021    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_FAULT_COUNTS_EXT;
52022}
52023impl<'a> DeviceFaultCountsEXT<'a> {
52024    #[inline]
52025    pub fn address_info_count(mut self, address_info_count: u32) -> Self {
52026        self.address_info_count = address_info_count;
52027        self
52028    }
52029    #[inline]
52030    pub fn vendor_info_count(mut self, vendor_info_count: u32) -> Self {
52031        self.vendor_info_count = vendor_info_count;
52032        self
52033    }
52034    #[inline]
52035    pub fn vendor_binary_size(mut self, vendor_binary_size: DeviceSize) -> Self {
52036        self.vendor_binary_size = vendor_binary_size;
52037        self
52038    }
52039}
52040#[repr(C)]
52041#[derive(Copy, Clone)]
52042#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceFaultInfoEXT.html>"]
52043#[must_use]
52044pub struct DeviceFaultInfoEXT<'a> {
52045    pub s_type: StructureType,
52046    pub p_next: *mut c_void,
52047    pub description: [c_char; MAX_DESCRIPTION_SIZE],
52048    pub p_address_infos: *mut DeviceFaultAddressInfoEXT,
52049    pub p_vendor_infos: *mut DeviceFaultVendorInfoEXT,
52050    pub p_vendor_binary_data: *mut c_void,
52051    pub _marker: PhantomData<&'a ()>,
52052}
52053unsafe impl Send for DeviceFaultInfoEXT<'_> {}
52054unsafe impl Sync for DeviceFaultInfoEXT<'_> {}
52055#[cfg(feature = "debug")]
52056impl fmt::Debug for DeviceFaultInfoEXT<'_> {
52057    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
52058        fmt.debug_struct("DeviceFaultInfoEXT")
52059            .field("s_type", &self.s_type)
52060            .field("p_next", &self.p_next)
52061            .field("description", &self.description_as_c_str())
52062            .field("p_address_infos", &self.p_address_infos)
52063            .field("p_vendor_infos", &self.p_vendor_infos)
52064            .field("p_vendor_binary_data", &self.p_vendor_binary_data)
52065            .finish()
52066    }
52067}
52068impl ::core::default::Default for DeviceFaultInfoEXT<'_> {
52069    #[inline]
52070    fn default() -> Self {
52071        Self {
52072            s_type: Self::STRUCTURE_TYPE,
52073            p_next: ::core::ptr::null_mut(),
52074            description: unsafe { ::core::mem::zeroed() },
52075            p_address_infos: ::core::ptr::null_mut(),
52076            p_vendor_infos: ::core::ptr::null_mut(),
52077            p_vendor_binary_data: ::core::ptr::null_mut(),
52078            _marker: PhantomData,
52079        }
52080    }
52081}
52082unsafe impl<'a> TaggedStructure for DeviceFaultInfoEXT<'a> {
52083    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_FAULT_INFO_EXT;
52084}
52085impl<'a> DeviceFaultInfoEXT<'a> {
52086    #[inline]
52087    pub fn description(
52088        mut self,
52089        description: &CStr,
52090    ) -> core::result::Result<Self, CStrTooLargeForStaticArray> {
52091        write_c_str_slice_with_nul(&mut self.description, description).map(|()| self)
52092    }
52093    #[inline]
52094    pub fn description_as_c_str(&self) -> core::result::Result<&CStr, FromBytesUntilNulError> {
52095        wrap_c_str_slice_until_nul(&self.description)
52096    }
52097    #[inline]
52098    pub fn address_infos(mut self, address_infos: &'a mut DeviceFaultAddressInfoEXT) -> Self {
52099        self.p_address_infos = address_infos;
52100        self
52101    }
52102    #[inline]
52103    pub fn vendor_infos(mut self, vendor_infos: &'a mut DeviceFaultVendorInfoEXT) -> Self {
52104        self.p_vendor_infos = vendor_infos;
52105        self
52106    }
52107    #[inline]
52108    pub fn vendor_binary_data(mut self, vendor_binary_data: *mut c_void) -> Self {
52109        self.p_vendor_binary_data = vendor_binary_data;
52110        self
52111    }
52112}
52113#[repr(C)]
52114#[cfg_attr(feature = "debug", derive(Debug))]
52115#[derive(Copy, Clone)]
52116#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceFaultVendorBinaryHeaderVersionOneEXT.html>"]
52117#[must_use]
52118pub struct DeviceFaultVendorBinaryHeaderVersionOneEXT {
52119    pub header_size: u32,
52120    pub header_version: DeviceFaultVendorBinaryHeaderVersionEXT,
52121    pub vendor_id: u32,
52122    pub device_id: u32,
52123    pub driver_version: u32,
52124    pub pipeline_cache_uuid: [u8; UUID_SIZE],
52125    pub application_name_offset: u32,
52126    pub application_version: u32,
52127    pub engine_name_offset: u32,
52128    pub engine_version: u32,
52129    pub api_version: u32,
52130}
52131impl ::core::default::Default for DeviceFaultVendorBinaryHeaderVersionOneEXT {
52132    #[inline]
52133    fn default() -> Self {
52134        Self {
52135            header_size: u32::default(),
52136            header_version: DeviceFaultVendorBinaryHeaderVersionEXT::default(),
52137            vendor_id: u32::default(),
52138            device_id: u32::default(),
52139            driver_version: u32::default(),
52140            pipeline_cache_uuid: unsafe { ::core::mem::zeroed() },
52141            application_name_offset: u32::default(),
52142            application_version: u32::default(),
52143            engine_name_offset: u32::default(),
52144            engine_version: u32::default(),
52145            api_version: u32::default(),
52146        }
52147    }
52148}
52149impl DeviceFaultVendorBinaryHeaderVersionOneEXT {
52150    #[inline]
52151    pub fn header_size(mut self, header_size: u32) -> Self {
52152        self.header_size = header_size;
52153        self
52154    }
52155    #[inline]
52156    pub fn header_version(
52157        mut self,
52158        header_version: DeviceFaultVendorBinaryHeaderVersionEXT,
52159    ) -> Self {
52160        self.header_version = header_version;
52161        self
52162    }
52163    #[inline]
52164    pub fn vendor_id(mut self, vendor_id: u32) -> Self {
52165        self.vendor_id = vendor_id;
52166        self
52167    }
52168    #[inline]
52169    pub fn device_id(mut self, device_id: u32) -> Self {
52170        self.device_id = device_id;
52171        self
52172    }
52173    #[inline]
52174    pub fn driver_version(mut self, driver_version: u32) -> Self {
52175        self.driver_version = driver_version;
52176        self
52177    }
52178    #[inline]
52179    pub fn pipeline_cache_uuid(mut self, pipeline_cache_uuid: [u8; UUID_SIZE]) -> Self {
52180        self.pipeline_cache_uuid = pipeline_cache_uuid;
52181        self
52182    }
52183    #[inline]
52184    pub fn application_name_offset(mut self, application_name_offset: u32) -> Self {
52185        self.application_name_offset = application_name_offset;
52186        self
52187    }
52188    #[inline]
52189    pub fn application_version(mut self, application_version: u32) -> Self {
52190        self.application_version = application_version;
52191        self
52192    }
52193    #[inline]
52194    pub fn engine_name_offset(mut self, engine_name_offset: u32) -> Self {
52195        self.engine_name_offset = engine_name_offset;
52196        self
52197    }
52198    #[inline]
52199    pub fn engine_version(mut self, engine_version: u32) -> Self {
52200        self.engine_version = engine_version;
52201        self
52202    }
52203    #[inline]
52204    pub fn api_version(mut self, api_version: u32) -> Self {
52205        self.api_version = api_version;
52206        self
52207    }
52208}
52209#[repr(C)]
52210#[cfg_attr(feature = "debug", derive(Debug))]
52211#[derive(Copy, Clone)]
52212#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT.html>"]
52213#[must_use]
52214pub struct PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'a> {
52215    pub s_type: StructureType,
52216    pub p_next: *mut c_void,
52217    pub pipeline_library_group_handles: Bool32,
52218    pub _marker: PhantomData<&'a ()>,
52219}
52220unsafe impl Send for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'_> {}
52221unsafe impl Sync for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'_> {}
52222impl ::core::default::Default for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'_> {
52223    #[inline]
52224    fn default() -> Self {
52225        Self {
52226            s_type: Self::STRUCTURE_TYPE,
52227            p_next: ::core::ptr::null_mut(),
52228            pipeline_library_group_handles: Bool32::default(),
52229            _marker: PhantomData,
52230        }
52231    }
52232}
52233unsafe impl<'a> TaggedStructure for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'a> {
52234    const STRUCTURE_TYPE: StructureType =
52235        StructureType::PHYSICAL_DEVICE_PIPELINE_LIBRARY_GROUP_HANDLES_FEATURES_EXT;
52236}
52237unsafe impl ExtendsPhysicalDeviceFeatures2
52238    for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'_>
52239{
52240}
52241unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'_> {}
52242impl<'a> PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT<'a> {
52243    #[inline]
52244    pub fn pipeline_library_group_handles(mut self, pipeline_library_group_handles: bool) -> Self {
52245        self.pipeline_library_group_handles = pipeline_library_group_handles.into();
52246        self
52247    }
52248}
52249#[repr(C)]
52250#[cfg_attr(feature = "debug", derive(Debug))]
52251#[derive(Copy, Clone)]
52252#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDepthBiasInfoEXT.html>"]
52253#[must_use]
52254pub struct DepthBiasInfoEXT<'a> {
52255    pub s_type: StructureType,
52256    pub p_next: *const c_void,
52257    pub depth_bias_constant_factor: f32,
52258    pub depth_bias_clamp: f32,
52259    pub depth_bias_slope_factor: f32,
52260    pub _marker: PhantomData<&'a ()>,
52261}
52262unsafe impl Send for DepthBiasInfoEXT<'_> {}
52263unsafe impl Sync for DepthBiasInfoEXT<'_> {}
52264impl ::core::default::Default for DepthBiasInfoEXT<'_> {
52265    #[inline]
52266    fn default() -> Self {
52267        Self {
52268            s_type: Self::STRUCTURE_TYPE,
52269            p_next: ::core::ptr::null(),
52270            depth_bias_constant_factor: f32::default(),
52271            depth_bias_clamp: f32::default(),
52272            depth_bias_slope_factor: f32::default(),
52273            _marker: PhantomData,
52274        }
52275    }
52276}
52277unsafe impl<'a> TaggedStructure for DepthBiasInfoEXT<'a> {
52278    const STRUCTURE_TYPE: StructureType = StructureType::DEPTH_BIAS_INFO_EXT;
52279}
52280pub unsafe trait ExtendsDepthBiasInfoEXT {}
52281impl<'a> DepthBiasInfoEXT<'a> {
52282    #[inline]
52283    pub fn depth_bias_constant_factor(mut self, depth_bias_constant_factor: f32) -> Self {
52284        self.depth_bias_constant_factor = depth_bias_constant_factor;
52285        self
52286    }
52287    #[inline]
52288    pub fn depth_bias_clamp(mut self, depth_bias_clamp: f32) -> Self {
52289        self.depth_bias_clamp = depth_bias_clamp;
52290        self
52291    }
52292    #[inline]
52293    pub fn depth_bias_slope_factor(mut self, depth_bias_slope_factor: f32) -> Self {
52294        self.depth_bias_slope_factor = depth_bias_slope_factor;
52295        self
52296    }
52297    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
52298    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
52299    #[doc = r" valid extension structs can be pushed into the chain."]
52300    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
52301    #[doc = r" chain will look like `A -> D -> B -> C`."]
52302    pub fn push_next<T: ExtendsDepthBiasInfoEXT + ?Sized>(mut self, next: &'a mut T) -> Self {
52303        unsafe {
52304            let next_ptr = <*const T>::cast(next);
52305            let last_next = ptr_chain_iter(next).last().unwrap();
52306            (*last_next).p_next = self.p_next as _;
52307            self.p_next = next_ptr;
52308        }
52309        self
52310    }
52311}
52312#[repr(C)]
52313#[cfg_attr(feature = "debug", derive(Debug))]
52314#[derive(Copy, Clone)]
52315#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDepthBiasRepresentationInfoEXT.html>"]
52316#[must_use]
52317pub struct DepthBiasRepresentationInfoEXT<'a> {
52318    pub s_type: StructureType,
52319    pub p_next: *const c_void,
52320    pub depth_bias_representation: DepthBiasRepresentationEXT,
52321    pub depth_bias_exact: Bool32,
52322    pub _marker: PhantomData<&'a ()>,
52323}
52324unsafe impl Send for DepthBiasRepresentationInfoEXT<'_> {}
52325unsafe impl Sync for DepthBiasRepresentationInfoEXT<'_> {}
52326impl ::core::default::Default for DepthBiasRepresentationInfoEXT<'_> {
52327    #[inline]
52328    fn default() -> Self {
52329        Self {
52330            s_type: Self::STRUCTURE_TYPE,
52331            p_next: ::core::ptr::null(),
52332            depth_bias_representation: DepthBiasRepresentationEXT::default(),
52333            depth_bias_exact: Bool32::default(),
52334            _marker: PhantomData,
52335        }
52336    }
52337}
52338unsafe impl<'a> TaggedStructure for DepthBiasRepresentationInfoEXT<'a> {
52339    const STRUCTURE_TYPE: StructureType = StructureType::DEPTH_BIAS_REPRESENTATION_INFO_EXT;
52340}
52341unsafe impl ExtendsDepthBiasInfoEXT for DepthBiasRepresentationInfoEXT<'_> {}
52342unsafe impl ExtendsPipelineRasterizationStateCreateInfo for DepthBiasRepresentationInfoEXT<'_> {}
52343impl<'a> DepthBiasRepresentationInfoEXT<'a> {
52344    #[inline]
52345    pub fn depth_bias_representation(
52346        mut self,
52347        depth_bias_representation: DepthBiasRepresentationEXT,
52348    ) -> Self {
52349        self.depth_bias_representation = depth_bias_representation;
52350        self
52351    }
52352    #[inline]
52353    pub fn depth_bias_exact(mut self, depth_bias_exact: bool) -> Self {
52354        self.depth_bias_exact = depth_bias_exact.into();
52355        self
52356    }
52357}
52358#[repr(C)]
52359#[cfg_attr(feature = "debug", derive(Debug))]
52360#[derive(Copy, Clone, Default)]
52361#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDecompressMemoryRegionNV.html>"]
52362#[must_use]
52363pub struct DecompressMemoryRegionNV {
52364    pub src_address: DeviceAddress,
52365    pub dst_address: DeviceAddress,
52366    pub compressed_size: DeviceSize,
52367    pub decompressed_size: DeviceSize,
52368    pub decompression_method: MemoryDecompressionMethodFlagsNV,
52369}
52370impl DecompressMemoryRegionNV {
52371    #[inline]
52372    pub fn src_address(mut self, src_address: DeviceAddress) -> Self {
52373        self.src_address = src_address;
52374        self
52375    }
52376    #[inline]
52377    pub fn dst_address(mut self, dst_address: DeviceAddress) -> Self {
52378        self.dst_address = dst_address;
52379        self
52380    }
52381    #[inline]
52382    pub fn compressed_size(mut self, compressed_size: DeviceSize) -> Self {
52383        self.compressed_size = compressed_size;
52384        self
52385    }
52386    #[inline]
52387    pub fn decompressed_size(mut self, decompressed_size: DeviceSize) -> Self {
52388        self.decompressed_size = decompressed_size;
52389        self
52390    }
52391    #[inline]
52392    pub fn decompression_method(
52393        mut self,
52394        decompression_method: MemoryDecompressionMethodFlagsNV,
52395    ) -> Self {
52396        self.decompression_method = decompression_method;
52397        self
52398    }
52399}
52400#[repr(C)]
52401#[cfg_attr(feature = "debug", derive(Debug))]
52402#[derive(Copy, Clone)]
52403#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderCoreBuiltinsPropertiesARM.html>"]
52404#[must_use]
52405pub struct PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'a> {
52406    pub s_type: StructureType,
52407    pub p_next: *mut c_void,
52408    pub shader_core_mask: u64,
52409    pub shader_core_count: u32,
52410    pub shader_warps_per_core: u32,
52411    pub _marker: PhantomData<&'a ()>,
52412}
52413unsafe impl Send for PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'_> {}
52414unsafe impl Sync for PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'_> {}
52415impl ::core::default::Default for PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'_> {
52416    #[inline]
52417    fn default() -> Self {
52418        Self {
52419            s_type: Self::STRUCTURE_TYPE,
52420            p_next: ::core::ptr::null_mut(),
52421            shader_core_mask: u64::default(),
52422            shader_core_count: u32::default(),
52423            shader_warps_per_core: u32::default(),
52424            _marker: PhantomData,
52425        }
52426    }
52427}
52428unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'a> {
52429    const STRUCTURE_TYPE: StructureType =
52430        StructureType::PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_PROPERTIES_ARM;
52431}
52432unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'_> {}
52433impl<'a> PhysicalDeviceShaderCoreBuiltinsPropertiesARM<'a> {
52434    #[inline]
52435    pub fn shader_core_mask(mut self, shader_core_mask: u64) -> Self {
52436        self.shader_core_mask = shader_core_mask;
52437        self
52438    }
52439    #[inline]
52440    pub fn shader_core_count(mut self, shader_core_count: u32) -> Self {
52441        self.shader_core_count = shader_core_count;
52442        self
52443    }
52444    #[inline]
52445    pub fn shader_warps_per_core(mut self, shader_warps_per_core: u32) -> Self {
52446        self.shader_warps_per_core = shader_warps_per_core;
52447        self
52448    }
52449}
52450#[repr(C)]
52451#[cfg_attr(feature = "debug", derive(Debug))]
52452#[derive(Copy, Clone)]
52453#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderCoreBuiltinsFeaturesARM.html>"]
52454#[must_use]
52455pub struct PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'a> {
52456    pub s_type: StructureType,
52457    pub p_next: *mut c_void,
52458    pub shader_core_builtins: Bool32,
52459    pub _marker: PhantomData<&'a ()>,
52460}
52461unsafe impl Send for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'_> {}
52462unsafe impl Sync for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'_> {}
52463impl ::core::default::Default for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'_> {
52464    #[inline]
52465    fn default() -> Self {
52466        Self {
52467            s_type: Self::STRUCTURE_TYPE,
52468            p_next: ::core::ptr::null_mut(),
52469            shader_core_builtins: Bool32::default(),
52470            _marker: PhantomData,
52471        }
52472    }
52473}
52474unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'a> {
52475    const STRUCTURE_TYPE: StructureType =
52476        StructureType::PHYSICAL_DEVICE_SHADER_CORE_BUILTINS_FEATURES_ARM;
52477}
52478unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'_> {}
52479unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'_> {}
52480impl<'a> PhysicalDeviceShaderCoreBuiltinsFeaturesARM<'a> {
52481    #[inline]
52482    pub fn shader_core_builtins(mut self, shader_core_builtins: bool) -> Self {
52483        self.shader_core_builtins = shader_core_builtins.into();
52484        self
52485    }
52486}
52487#[repr(C)]
52488#[cfg_attr(feature = "debug", derive(Debug))]
52489#[derive(Copy, Clone)]
52490#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkFrameBoundaryEXT.html>"]
52491#[must_use]
52492pub struct FrameBoundaryEXT<'a> {
52493    pub s_type: StructureType,
52494    pub p_next: *const c_void,
52495    pub flags: FrameBoundaryFlagsEXT,
52496    pub frame_id: u64,
52497    pub image_count: u32,
52498    pub p_images: *const Image,
52499    pub buffer_count: u32,
52500    pub p_buffers: *const Buffer,
52501    pub tag_name: u64,
52502    pub tag_size: usize,
52503    pub p_tag: *const c_void,
52504    pub _marker: PhantomData<&'a ()>,
52505}
52506unsafe impl Send for FrameBoundaryEXT<'_> {}
52507unsafe impl Sync for FrameBoundaryEXT<'_> {}
52508impl ::core::default::Default for FrameBoundaryEXT<'_> {
52509    #[inline]
52510    fn default() -> Self {
52511        Self {
52512            s_type: Self::STRUCTURE_TYPE,
52513            p_next: ::core::ptr::null(),
52514            flags: FrameBoundaryFlagsEXT::default(),
52515            frame_id: u64::default(),
52516            image_count: u32::default(),
52517            p_images: ::core::ptr::null(),
52518            buffer_count: u32::default(),
52519            p_buffers: ::core::ptr::null(),
52520            tag_name: u64::default(),
52521            tag_size: usize::default(),
52522            p_tag: ::core::ptr::null(),
52523            _marker: PhantomData,
52524        }
52525    }
52526}
52527unsafe impl<'a> TaggedStructure for FrameBoundaryEXT<'a> {
52528    const STRUCTURE_TYPE: StructureType = StructureType::FRAME_BOUNDARY_EXT;
52529}
52530unsafe impl ExtendsSubmitInfo for FrameBoundaryEXT<'_> {}
52531unsafe impl ExtendsSubmitInfo2 for FrameBoundaryEXT<'_> {}
52532unsafe impl ExtendsPresentInfoKHR for FrameBoundaryEXT<'_> {}
52533unsafe impl ExtendsBindSparseInfo for FrameBoundaryEXT<'_> {}
52534impl<'a> FrameBoundaryEXT<'a> {
52535    #[inline]
52536    pub fn flags(mut self, flags: FrameBoundaryFlagsEXT) -> Self {
52537        self.flags = flags;
52538        self
52539    }
52540    #[inline]
52541    pub fn frame_id(mut self, frame_id: u64) -> Self {
52542        self.frame_id = frame_id;
52543        self
52544    }
52545    #[inline]
52546    pub fn images(mut self, images: &'a [Image]) -> Self {
52547        self.image_count = images.len() as _;
52548        self.p_images = images.as_ptr();
52549        self
52550    }
52551    #[inline]
52552    pub fn buffers(mut self, buffers: &'a [Buffer]) -> Self {
52553        self.buffer_count = buffers.len() as _;
52554        self.p_buffers = buffers.as_ptr();
52555        self
52556    }
52557    #[inline]
52558    pub fn tag_name(mut self, tag_name: u64) -> Self {
52559        self.tag_name = tag_name;
52560        self
52561    }
52562    #[inline]
52563    pub fn tag(mut self, tag: &'a [u8]) -> Self {
52564        self.tag_size = tag.len();
52565        self.p_tag = tag.as_ptr().cast();
52566        self
52567    }
52568}
52569#[repr(C)]
52570#[cfg_attr(feature = "debug", derive(Debug))]
52571#[derive(Copy, Clone)]
52572#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceFrameBoundaryFeaturesEXT.html>"]
52573#[must_use]
52574pub struct PhysicalDeviceFrameBoundaryFeaturesEXT<'a> {
52575    pub s_type: StructureType,
52576    pub p_next: *mut c_void,
52577    pub frame_boundary: Bool32,
52578    pub _marker: PhantomData<&'a ()>,
52579}
52580unsafe impl Send for PhysicalDeviceFrameBoundaryFeaturesEXT<'_> {}
52581unsafe impl Sync for PhysicalDeviceFrameBoundaryFeaturesEXT<'_> {}
52582impl ::core::default::Default for PhysicalDeviceFrameBoundaryFeaturesEXT<'_> {
52583    #[inline]
52584    fn default() -> Self {
52585        Self {
52586            s_type: Self::STRUCTURE_TYPE,
52587            p_next: ::core::ptr::null_mut(),
52588            frame_boundary: Bool32::default(),
52589            _marker: PhantomData,
52590        }
52591    }
52592}
52593unsafe impl<'a> TaggedStructure for PhysicalDeviceFrameBoundaryFeaturesEXT<'a> {
52594    const STRUCTURE_TYPE: StructureType =
52595        StructureType::PHYSICAL_DEVICE_FRAME_BOUNDARY_FEATURES_EXT;
52596}
52597unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceFrameBoundaryFeaturesEXT<'_> {}
52598unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceFrameBoundaryFeaturesEXT<'_> {}
52599impl<'a> PhysicalDeviceFrameBoundaryFeaturesEXT<'a> {
52600    #[inline]
52601    pub fn frame_boundary(mut self, frame_boundary: bool) -> Self {
52602        self.frame_boundary = frame_boundary.into();
52603        self
52604    }
52605}
52606#[repr(C)]
52607#[cfg_attr(feature = "debug", derive(Debug))]
52608#[derive(Copy, Clone)]
52609#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT.html>"]
52610#[must_use]
52611pub struct PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'a> {
52612    pub s_type: StructureType,
52613    pub p_next: *mut c_void,
52614    pub dynamic_rendering_unused_attachments: Bool32,
52615    pub _marker: PhantomData<&'a ()>,
52616}
52617unsafe impl Send for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'_> {}
52618unsafe impl Sync for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'_> {}
52619impl ::core::default::Default for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'_> {
52620    #[inline]
52621    fn default() -> Self {
52622        Self {
52623            s_type: Self::STRUCTURE_TYPE,
52624            p_next: ::core::ptr::null_mut(),
52625            dynamic_rendering_unused_attachments: Bool32::default(),
52626            _marker: PhantomData,
52627        }
52628    }
52629}
52630unsafe impl<'a> TaggedStructure for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'a> {
52631    const STRUCTURE_TYPE: StructureType =
52632        StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT;
52633}
52634unsafe impl ExtendsPhysicalDeviceFeatures2
52635    for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'_>
52636{
52637}
52638unsafe impl ExtendsDeviceCreateInfo
52639    for PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'_>
52640{
52641}
52642impl<'a> PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT<'a> {
52643    #[inline]
52644    pub fn dynamic_rendering_unused_attachments(
52645        mut self,
52646        dynamic_rendering_unused_attachments: bool,
52647    ) -> Self {
52648        self.dynamic_rendering_unused_attachments = dynamic_rendering_unused_attachments.into();
52649        self
52650    }
52651}
52652#[repr(C)]
52653#[cfg_attr(feature = "debug", derive(Debug))]
52654#[derive(Copy, Clone)]
52655#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfacePresentModeEXT.html>"]
52656#[must_use]
52657pub struct SurfacePresentModeEXT<'a> {
52658    pub s_type: StructureType,
52659    pub p_next: *mut c_void,
52660    pub present_mode: PresentModeKHR,
52661    pub _marker: PhantomData<&'a ()>,
52662}
52663unsafe impl Send for SurfacePresentModeEXT<'_> {}
52664unsafe impl Sync for SurfacePresentModeEXT<'_> {}
52665impl ::core::default::Default for SurfacePresentModeEXT<'_> {
52666    #[inline]
52667    fn default() -> Self {
52668        Self {
52669            s_type: Self::STRUCTURE_TYPE,
52670            p_next: ::core::ptr::null_mut(),
52671            present_mode: PresentModeKHR::default(),
52672            _marker: PhantomData,
52673        }
52674    }
52675}
52676unsafe impl<'a> TaggedStructure for SurfacePresentModeEXT<'a> {
52677    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_PRESENT_MODE_EXT;
52678}
52679unsafe impl ExtendsPhysicalDeviceSurfaceInfo2KHR for SurfacePresentModeEXT<'_> {}
52680impl<'a> SurfacePresentModeEXT<'a> {
52681    #[inline]
52682    pub fn present_mode(mut self, present_mode: PresentModeKHR) -> Self {
52683        self.present_mode = present_mode;
52684        self
52685    }
52686}
52687#[repr(C)]
52688#[cfg_attr(feature = "debug", derive(Debug))]
52689#[derive(Copy, Clone)]
52690#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfacePresentScalingCapabilitiesEXT.html>"]
52691#[must_use]
52692pub struct SurfacePresentScalingCapabilitiesEXT<'a> {
52693    pub s_type: StructureType,
52694    pub p_next: *mut c_void,
52695    pub supported_present_scaling: PresentScalingFlagsEXT,
52696    pub supported_present_gravity_x: PresentGravityFlagsEXT,
52697    pub supported_present_gravity_y: PresentGravityFlagsEXT,
52698    pub min_scaled_image_extent: Extent2D,
52699    pub max_scaled_image_extent: Extent2D,
52700    pub _marker: PhantomData<&'a ()>,
52701}
52702unsafe impl Send for SurfacePresentScalingCapabilitiesEXT<'_> {}
52703unsafe impl Sync for SurfacePresentScalingCapabilitiesEXT<'_> {}
52704impl ::core::default::Default for SurfacePresentScalingCapabilitiesEXT<'_> {
52705    #[inline]
52706    fn default() -> Self {
52707        Self {
52708            s_type: Self::STRUCTURE_TYPE,
52709            p_next: ::core::ptr::null_mut(),
52710            supported_present_scaling: PresentScalingFlagsEXT::default(),
52711            supported_present_gravity_x: PresentGravityFlagsEXT::default(),
52712            supported_present_gravity_y: PresentGravityFlagsEXT::default(),
52713            min_scaled_image_extent: Extent2D::default(),
52714            max_scaled_image_extent: Extent2D::default(),
52715            _marker: PhantomData,
52716        }
52717    }
52718}
52719unsafe impl<'a> TaggedStructure for SurfacePresentScalingCapabilitiesEXT<'a> {
52720    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_PRESENT_SCALING_CAPABILITIES_EXT;
52721}
52722unsafe impl ExtendsSurfaceCapabilities2KHR for SurfacePresentScalingCapabilitiesEXT<'_> {}
52723impl<'a> SurfacePresentScalingCapabilitiesEXT<'a> {
52724    #[inline]
52725    pub fn supported_present_scaling(
52726        mut self,
52727        supported_present_scaling: PresentScalingFlagsEXT,
52728    ) -> Self {
52729        self.supported_present_scaling = supported_present_scaling;
52730        self
52731    }
52732    #[inline]
52733    pub fn supported_present_gravity_x(
52734        mut self,
52735        supported_present_gravity_x: PresentGravityFlagsEXT,
52736    ) -> Self {
52737        self.supported_present_gravity_x = supported_present_gravity_x;
52738        self
52739    }
52740    #[inline]
52741    pub fn supported_present_gravity_y(
52742        mut self,
52743        supported_present_gravity_y: PresentGravityFlagsEXT,
52744    ) -> Self {
52745        self.supported_present_gravity_y = supported_present_gravity_y;
52746        self
52747    }
52748    #[inline]
52749    pub fn min_scaled_image_extent(mut self, min_scaled_image_extent: Extent2D) -> Self {
52750        self.min_scaled_image_extent = min_scaled_image_extent;
52751        self
52752    }
52753    #[inline]
52754    pub fn max_scaled_image_extent(mut self, max_scaled_image_extent: Extent2D) -> Self {
52755        self.max_scaled_image_extent = max_scaled_image_extent;
52756        self
52757    }
52758}
52759#[repr(C)]
52760#[cfg_attr(feature = "debug", derive(Debug))]
52761#[derive(Copy, Clone)]
52762#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfacePresentModeCompatibilityEXT.html>"]
52763#[must_use]
52764pub struct SurfacePresentModeCompatibilityEXT<'a> {
52765    pub s_type: StructureType,
52766    pub p_next: *mut c_void,
52767    pub present_mode_count: u32,
52768    pub p_present_modes: *mut PresentModeKHR,
52769    pub _marker: PhantomData<&'a ()>,
52770}
52771unsafe impl Send for SurfacePresentModeCompatibilityEXT<'_> {}
52772unsafe impl Sync for SurfacePresentModeCompatibilityEXT<'_> {}
52773impl ::core::default::Default for SurfacePresentModeCompatibilityEXT<'_> {
52774    #[inline]
52775    fn default() -> Self {
52776        Self {
52777            s_type: Self::STRUCTURE_TYPE,
52778            p_next: ::core::ptr::null_mut(),
52779            present_mode_count: u32::default(),
52780            p_present_modes: ::core::ptr::null_mut(),
52781            _marker: PhantomData,
52782        }
52783    }
52784}
52785unsafe impl<'a> TaggedStructure for SurfacePresentModeCompatibilityEXT<'a> {
52786    const STRUCTURE_TYPE: StructureType = StructureType::SURFACE_PRESENT_MODE_COMPATIBILITY_EXT;
52787}
52788unsafe impl ExtendsSurfaceCapabilities2KHR for SurfacePresentModeCompatibilityEXT<'_> {}
52789impl<'a> SurfacePresentModeCompatibilityEXT<'a> {
52790    #[inline]
52791    pub fn present_modes(mut self, present_modes: &'a mut [PresentModeKHR]) -> Self {
52792        self.present_mode_count = present_modes.len() as _;
52793        self.p_present_modes = present_modes.as_mut_ptr();
52794        self
52795    }
52796}
52797#[repr(C)]
52798#[cfg_attr(feature = "debug", derive(Debug))]
52799#[derive(Copy, Clone)]
52800#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT.html>"]
52801#[must_use]
52802pub struct PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'a> {
52803    pub s_type: StructureType,
52804    pub p_next: *mut c_void,
52805    pub swapchain_maintenance1: Bool32,
52806    pub _marker: PhantomData<&'a ()>,
52807}
52808unsafe impl Send for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'_> {}
52809unsafe impl Sync for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'_> {}
52810impl ::core::default::Default for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'_> {
52811    #[inline]
52812    fn default() -> Self {
52813        Self {
52814            s_type: Self::STRUCTURE_TYPE,
52815            p_next: ::core::ptr::null_mut(),
52816            swapchain_maintenance1: Bool32::default(),
52817            _marker: PhantomData,
52818        }
52819    }
52820}
52821unsafe impl<'a> TaggedStructure for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'a> {
52822    const STRUCTURE_TYPE: StructureType =
52823        StructureType::PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT;
52824}
52825unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'_> {}
52826unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'_> {}
52827impl<'a> PhysicalDeviceSwapchainMaintenance1FeaturesEXT<'a> {
52828    #[inline]
52829    pub fn swapchain_maintenance1(mut self, swapchain_maintenance1: bool) -> Self {
52830        self.swapchain_maintenance1 = swapchain_maintenance1.into();
52831        self
52832    }
52833}
52834#[repr(C)]
52835#[cfg_attr(feature = "debug", derive(Debug))]
52836#[derive(Copy, Clone)]
52837#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainPresentFenceInfoEXT.html>"]
52838#[must_use]
52839pub struct SwapchainPresentFenceInfoEXT<'a> {
52840    pub s_type: StructureType,
52841    pub p_next: *const c_void,
52842    pub swapchain_count: u32,
52843    pub p_fences: *const Fence,
52844    pub _marker: PhantomData<&'a ()>,
52845}
52846unsafe impl Send for SwapchainPresentFenceInfoEXT<'_> {}
52847unsafe impl Sync for SwapchainPresentFenceInfoEXT<'_> {}
52848impl ::core::default::Default for SwapchainPresentFenceInfoEXT<'_> {
52849    #[inline]
52850    fn default() -> Self {
52851        Self {
52852            s_type: Self::STRUCTURE_TYPE,
52853            p_next: ::core::ptr::null(),
52854            swapchain_count: u32::default(),
52855            p_fences: ::core::ptr::null(),
52856            _marker: PhantomData,
52857        }
52858    }
52859}
52860unsafe impl<'a> TaggedStructure for SwapchainPresentFenceInfoEXT<'a> {
52861    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_PRESENT_FENCE_INFO_EXT;
52862}
52863unsafe impl ExtendsPresentInfoKHR for SwapchainPresentFenceInfoEXT<'_> {}
52864impl<'a> SwapchainPresentFenceInfoEXT<'a> {
52865    #[inline]
52866    pub fn fences(mut self, fences: &'a [Fence]) -> Self {
52867        self.swapchain_count = fences.len() as _;
52868        self.p_fences = fences.as_ptr();
52869        self
52870    }
52871}
52872#[repr(C)]
52873#[cfg_attr(feature = "debug", derive(Debug))]
52874#[derive(Copy, Clone)]
52875#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainPresentModesCreateInfoEXT.html>"]
52876#[must_use]
52877pub struct SwapchainPresentModesCreateInfoEXT<'a> {
52878    pub s_type: StructureType,
52879    pub p_next: *const c_void,
52880    pub present_mode_count: u32,
52881    pub p_present_modes: *const PresentModeKHR,
52882    pub _marker: PhantomData<&'a ()>,
52883}
52884unsafe impl Send for SwapchainPresentModesCreateInfoEXT<'_> {}
52885unsafe impl Sync for SwapchainPresentModesCreateInfoEXT<'_> {}
52886impl ::core::default::Default for SwapchainPresentModesCreateInfoEXT<'_> {
52887    #[inline]
52888    fn default() -> Self {
52889        Self {
52890            s_type: Self::STRUCTURE_TYPE,
52891            p_next: ::core::ptr::null(),
52892            present_mode_count: u32::default(),
52893            p_present_modes: ::core::ptr::null(),
52894            _marker: PhantomData,
52895        }
52896    }
52897}
52898unsafe impl<'a> TaggedStructure for SwapchainPresentModesCreateInfoEXT<'a> {
52899    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_PRESENT_MODES_CREATE_INFO_EXT;
52900}
52901unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainPresentModesCreateInfoEXT<'_> {}
52902impl<'a> SwapchainPresentModesCreateInfoEXT<'a> {
52903    #[inline]
52904    pub fn present_modes(mut self, present_modes: &'a [PresentModeKHR]) -> Self {
52905        self.present_mode_count = present_modes.len() as _;
52906        self.p_present_modes = present_modes.as_ptr();
52907        self
52908    }
52909}
52910#[repr(C)]
52911#[cfg_attr(feature = "debug", derive(Debug))]
52912#[derive(Copy, Clone)]
52913#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainPresentModeInfoEXT.html>"]
52914#[must_use]
52915pub struct SwapchainPresentModeInfoEXT<'a> {
52916    pub s_type: StructureType,
52917    pub p_next: *const c_void,
52918    pub swapchain_count: u32,
52919    pub p_present_modes: *const PresentModeKHR,
52920    pub _marker: PhantomData<&'a ()>,
52921}
52922unsafe impl Send for SwapchainPresentModeInfoEXT<'_> {}
52923unsafe impl Sync for SwapchainPresentModeInfoEXT<'_> {}
52924impl ::core::default::Default for SwapchainPresentModeInfoEXT<'_> {
52925    #[inline]
52926    fn default() -> Self {
52927        Self {
52928            s_type: Self::STRUCTURE_TYPE,
52929            p_next: ::core::ptr::null(),
52930            swapchain_count: u32::default(),
52931            p_present_modes: ::core::ptr::null(),
52932            _marker: PhantomData,
52933        }
52934    }
52935}
52936unsafe impl<'a> TaggedStructure for SwapchainPresentModeInfoEXT<'a> {
52937    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_PRESENT_MODE_INFO_EXT;
52938}
52939unsafe impl ExtendsPresentInfoKHR for SwapchainPresentModeInfoEXT<'_> {}
52940impl<'a> SwapchainPresentModeInfoEXT<'a> {
52941    #[inline]
52942    pub fn present_modes(mut self, present_modes: &'a [PresentModeKHR]) -> Self {
52943        self.swapchain_count = present_modes.len() as _;
52944        self.p_present_modes = present_modes.as_ptr();
52945        self
52946    }
52947}
52948#[repr(C)]
52949#[cfg_attr(feature = "debug", derive(Debug))]
52950#[derive(Copy, Clone)]
52951#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainPresentScalingCreateInfoEXT.html>"]
52952#[must_use]
52953pub struct SwapchainPresentScalingCreateInfoEXT<'a> {
52954    pub s_type: StructureType,
52955    pub p_next: *const c_void,
52956    pub scaling_behavior: PresentScalingFlagsEXT,
52957    pub present_gravity_x: PresentGravityFlagsEXT,
52958    pub present_gravity_y: PresentGravityFlagsEXT,
52959    pub _marker: PhantomData<&'a ()>,
52960}
52961unsafe impl Send for SwapchainPresentScalingCreateInfoEXT<'_> {}
52962unsafe impl Sync for SwapchainPresentScalingCreateInfoEXT<'_> {}
52963impl ::core::default::Default for SwapchainPresentScalingCreateInfoEXT<'_> {
52964    #[inline]
52965    fn default() -> Self {
52966        Self {
52967            s_type: Self::STRUCTURE_TYPE,
52968            p_next: ::core::ptr::null(),
52969            scaling_behavior: PresentScalingFlagsEXT::default(),
52970            present_gravity_x: PresentGravityFlagsEXT::default(),
52971            present_gravity_y: PresentGravityFlagsEXT::default(),
52972            _marker: PhantomData,
52973        }
52974    }
52975}
52976unsafe impl<'a> TaggedStructure for SwapchainPresentScalingCreateInfoEXT<'a> {
52977    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_PRESENT_SCALING_CREATE_INFO_EXT;
52978}
52979unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainPresentScalingCreateInfoEXT<'_> {}
52980impl<'a> SwapchainPresentScalingCreateInfoEXT<'a> {
52981    #[inline]
52982    pub fn scaling_behavior(mut self, scaling_behavior: PresentScalingFlagsEXT) -> Self {
52983        self.scaling_behavior = scaling_behavior;
52984        self
52985    }
52986    #[inline]
52987    pub fn present_gravity_x(mut self, present_gravity_x: PresentGravityFlagsEXT) -> Self {
52988        self.present_gravity_x = present_gravity_x;
52989        self
52990    }
52991    #[inline]
52992    pub fn present_gravity_y(mut self, present_gravity_y: PresentGravityFlagsEXT) -> Self {
52993        self.present_gravity_y = present_gravity_y;
52994        self
52995    }
52996}
52997#[repr(C)]
52998#[cfg_attr(feature = "debug", derive(Debug))]
52999#[derive(Copy, Clone)]
53000#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkReleaseSwapchainImagesInfoEXT.html>"]
53001#[must_use]
53002pub struct ReleaseSwapchainImagesInfoEXT<'a> {
53003    pub s_type: StructureType,
53004    pub p_next: *const c_void,
53005    pub swapchain: SwapchainKHR,
53006    pub image_index_count: u32,
53007    pub p_image_indices: *const u32,
53008    pub _marker: PhantomData<&'a ()>,
53009}
53010unsafe impl Send for ReleaseSwapchainImagesInfoEXT<'_> {}
53011unsafe impl Sync for ReleaseSwapchainImagesInfoEXT<'_> {}
53012impl ::core::default::Default for ReleaseSwapchainImagesInfoEXT<'_> {
53013    #[inline]
53014    fn default() -> Self {
53015        Self {
53016            s_type: Self::STRUCTURE_TYPE,
53017            p_next: ::core::ptr::null(),
53018            swapchain: SwapchainKHR::default(),
53019            image_index_count: u32::default(),
53020            p_image_indices: ::core::ptr::null(),
53021            _marker: PhantomData,
53022        }
53023    }
53024}
53025unsafe impl<'a> TaggedStructure for ReleaseSwapchainImagesInfoEXT<'a> {
53026    const STRUCTURE_TYPE: StructureType = StructureType::RELEASE_SWAPCHAIN_IMAGES_INFO_EXT;
53027}
53028impl<'a> ReleaseSwapchainImagesInfoEXT<'a> {
53029    #[inline]
53030    pub fn swapchain(mut self, swapchain: SwapchainKHR) -> Self {
53031        self.swapchain = swapchain;
53032        self
53033    }
53034    #[inline]
53035    pub fn image_indices(mut self, image_indices: &'a [u32]) -> Self {
53036        self.image_index_count = image_indices.len() as _;
53037        self.p_image_indices = image_indices.as_ptr();
53038        self
53039    }
53040}
53041#[repr(C)]
53042#[cfg_attr(feature = "debug", derive(Debug))]
53043#[derive(Copy, Clone)]
53044#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthBiasControlFeaturesEXT.html>"]
53045#[must_use]
53046pub struct PhysicalDeviceDepthBiasControlFeaturesEXT<'a> {
53047    pub s_type: StructureType,
53048    pub p_next: *mut c_void,
53049    pub depth_bias_control: Bool32,
53050    pub least_representable_value_force_unorm_representation: Bool32,
53051    pub float_representation: Bool32,
53052    pub depth_bias_exact: Bool32,
53053    pub _marker: PhantomData<&'a ()>,
53054}
53055unsafe impl Send for PhysicalDeviceDepthBiasControlFeaturesEXT<'_> {}
53056unsafe impl Sync for PhysicalDeviceDepthBiasControlFeaturesEXT<'_> {}
53057impl ::core::default::Default for PhysicalDeviceDepthBiasControlFeaturesEXT<'_> {
53058    #[inline]
53059    fn default() -> Self {
53060        Self {
53061            s_type: Self::STRUCTURE_TYPE,
53062            p_next: ::core::ptr::null_mut(),
53063            depth_bias_control: Bool32::default(),
53064            least_representable_value_force_unorm_representation: Bool32::default(),
53065            float_representation: Bool32::default(),
53066            depth_bias_exact: Bool32::default(),
53067            _marker: PhantomData,
53068        }
53069    }
53070}
53071unsafe impl<'a> TaggedStructure for PhysicalDeviceDepthBiasControlFeaturesEXT<'a> {
53072    const STRUCTURE_TYPE: StructureType =
53073        StructureType::PHYSICAL_DEVICE_DEPTH_BIAS_CONTROL_FEATURES_EXT;
53074}
53075unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceDepthBiasControlFeaturesEXT<'_> {}
53076unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDepthBiasControlFeaturesEXT<'_> {}
53077impl<'a> PhysicalDeviceDepthBiasControlFeaturesEXT<'a> {
53078    #[inline]
53079    pub fn depth_bias_control(mut self, depth_bias_control: bool) -> Self {
53080        self.depth_bias_control = depth_bias_control.into();
53081        self
53082    }
53083    #[inline]
53084    pub fn least_representable_value_force_unorm_representation(
53085        mut self,
53086        least_representable_value_force_unorm_representation: bool,
53087    ) -> Self {
53088        self.least_representable_value_force_unorm_representation =
53089            least_representable_value_force_unorm_representation.into();
53090        self
53091    }
53092    #[inline]
53093    pub fn float_representation(mut self, float_representation: bool) -> Self {
53094        self.float_representation = float_representation.into();
53095        self
53096    }
53097    #[inline]
53098    pub fn depth_bias_exact(mut self, depth_bias_exact: bool) -> Self {
53099        self.depth_bias_exact = depth_bias_exact.into();
53100        self
53101    }
53102}
53103#[repr(C)]
53104#[cfg_attr(feature = "debug", derive(Debug))]
53105#[derive(Copy, Clone)]
53106#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV.html>"]
53107#[must_use]
53108pub struct PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'a> {
53109    pub s_type: StructureType,
53110    pub p_next: *mut c_void,
53111    pub ray_tracing_invocation_reorder: Bool32,
53112    pub _marker: PhantomData<&'a ()>,
53113}
53114unsafe impl Send for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'_> {}
53115unsafe impl Sync for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'_> {}
53116impl ::core::default::Default for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'_> {
53117    #[inline]
53118    fn default() -> Self {
53119        Self {
53120            s_type: Self::STRUCTURE_TYPE,
53121            p_next: ::core::ptr::null_mut(),
53122            ray_tracing_invocation_reorder: Bool32::default(),
53123            _marker: PhantomData,
53124        }
53125    }
53126}
53127unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'a> {
53128    const STRUCTURE_TYPE: StructureType =
53129        StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV;
53130}
53131unsafe impl ExtendsPhysicalDeviceFeatures2
53132    for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'_>
53133{
53134}
53135unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'_> {}
53136impl<'a> PhysicalDeviceRayTracingInvocationReorderFeaturesNV<'a> {
53137    #[inline]
53138    pub fn ray_tracing_invocation_reorder(mut self, ray_tracing_invocation_reorder: bool) -> Self {
53139        self.ray_tracing_invocation_reorder = ray_tracing_invocation_reorder.into();
53140        self
53141    }
53142}
53143#[repr(C)]
53144#[cfg_attr(feature = "debug", derive(Debug))]
53145#[derive(Copy, Clone)]
53146#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingInvocationReorderPropertiesNV.html>"]
53147#[must_use]
53148pub struct PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'a> {
53149    pub s_type: StructureType,
53150    pub p_next: *mut c_void,
53151    pub ray_tracing_invocation_reorder_reordering_hint: RayTracingInvocationReorderModeNV,
53152    pub _marker: PhantomData<&'a ()>,
53153}
53154unsafe impl Send for PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'_> {}
53155unsafe impl Sync for PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'_> {}
53156impl ::core::default::Default for PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'_> {
53157    #[inline]
53158    fn default() -> Self {
53159        Self {
53160            s_type: Self::STRUCTURE_TYPE,
53161            p_next: ::core::ptr::null_mut(),
53162            ray_tracing_invocation_reorder_reordering_hint:
53163                RayTracingInvocationReorderModeNV::default(),
53164            _marker: PhantomData,
53165        }
53166    }
53167}
53168unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'a> {
53169    const STRUCTURE_TYPE: StructureType =
53170        StructureType::PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV;
53171}
53172unsafe impl ExtendsPhysicalDeviceProperties2
53173    for PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'_>
53174{
53175}
53176impl<'a> PhysicalDeviceRayTracingInvocationReorderPropertiesNV<'a> {
53177    #[inline]
53178    pub fn ray_tracing_invocation_reorder_reordering_hint(
53179        mut self,
53180        ray_tracing_invocation_reorder_reordering_hint: RayTracingInvocationReorderModeNV,
53181    ) -> Self {
53182        self.ray_tracing_invocation_reorder_reordering_hint =
53183            ray_tracing_invocation_reorder_reordering_hint;
53184        self
53185    }
53186}
53187#[repr(C)]
53188#[cfg_attr(feature = "debug", derive(Debug))]
53189#[derive(Copy, Clone)]
53190#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedSparseAddressSpaceFeaturesNV.html>"]
53191#[must_use]
53192pub struct PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'a> {
53193    pub s_type: StructureType,
53194    pub p_next: *mut c_void,
53195    pub extended_sparse_address_space: Bool32,
53196    pub _marker: PhantomData<&'a ()>,
53197}
53198unsafe impl Send for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'_> {}
53199unsafe impl Sync for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'_> {}
53200impl ::core::default::Default for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'_> {
53201    #[inline]
53202    fn default() -> Self {
53203        Self {
53204            s_type: Self::STRUCTURE_TYPE,
53205            p_next: ::core::ptr::null_mut(),
53206            extended_sparse_address_space: Bool32::default(),
53207            _marker: PhantomData,
53208        }
53209    }
53210}
53211unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'a> {
53212    const STRUCTURE_TYPE: StructureType =
53213        StructureType::PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV;
53214}
53215unsafe impl ExtendsPhysicalDeviceFeatures2
53216    for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'_>
53217{
53218}
53219unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'_> {}
53220impl<'a> PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV<'a> {
53221    #[inline]
53222    pub fn extended_sparse_address_space(mut self, extended_sparse_address_space: bool) -> Self {
53223        self.extended_sparse_address_space = extended_sparse_address_space.into();
53224        self
53225    }
53226}
53227#[repr(C)]
53228#[cfg_attr(feature = "debug", derive(Debug))]
53229#[derive(Copy, Clone)]
53230#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExtendedSparseAddressSpacePropertiesNV.html>"]
53231#[must_use]
53232pub struct PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'a> {
53233    pub s_type: StructureType,
53234    pub p_next: *mut c_void,
53235    pub extended_sparse_address_space_size: DeviceSize,
53236    pub extended_sparse_image_usage_flags: ImageUsageFlags,
53237    pub extended_sparse_buffer_usage_flags: BufferUsageFlags,
53238    pub _marker: PhantomData<&'a ()>,
53239}
53240unsafe impl Send for PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'_> {}
53241unsafe impl Sync for PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'_> {}
53242impl ::core::default::Default for PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'_> {
53243    #[inline]
53244    fn default() -> Self {
53245        Self {
53246            s_type: Self::STRUCTURE_TYPE,
53247            p_next: ::core::ptr::null_mut(),
53248            extended_sparse_address_space_size: DeviceSize::default(),
53249            extended_sparse_image_usage_flags: ImageUsageFlags::default(),
53250            extended_sparse_buffer_usage_flags: BufferUsageFlags::default(),
53251            _marker: PhantomData,
53252        }
53253    }
53254}
53255unsafe impl<'a> TaggedStructure for PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'a> {
53256    const STRUCTURE_TYPE: StructureType =
53257        StructureType::PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV;
53258}
53259unsafe impl ExtendsPhysicalDeviceProperties2
53260    for PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'_>
53261{
53262}
53263impl<'a> PhysicalDeviceExtendedSparseAddressSpacePropertiesNV<'a> {
53264    #[inline]
53265    pub fn extended_sparse_address_space_size(
53266        mut self,
53267        extended_sparse_address_space_size: DeviceSize,
53268    ) -> Self {
53269        self.extended_sparse_address_space_size = extended_sparse_address_space_size;
53270        self
53271    }
53272    #[inline]
53273    pub fn extended_sparse_image_usage_flags(
53274        mut self,
53275        extended_sparse_image_usage_flags: ImageUsageFlags,
53276    ) -> Self {
53277        self.extended_sparse_image_usage_flags = extended_sparse_image_usage_flags;
53278        self
53279    }
53280    #[inline]
53281    pub fn extended_sparse_buffer_usage_flags(
53282        mut self,
53283        extended_sparse_buffer_usage_flags: BufferUsageFlags,
53284    ) -> Self {
53285        self.extended_sparse_buffer_usage_flags = extended_sparse_buffer_usage_flags;
53286        self
53287    }
53288}
53289#[repr(C)]
53290#[derive(Copy, Clone)]
53291#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDirectDriverLoadingInfoLUNARG.html>"]
53292#[must_use]
53293pub struct DirectDriverLoadingInfoLUNARG<'a> {
53294    pub s_type: StructureType,
53295    pub p_next: *mut c_void,
53296    pub flags: DirectDriverLoadingFlagsLUNARG,
53297    pub pfn_get_instance_proc_addr: PFN_vkGetInstanceProcAddrLUNARG,
53298    pub _marker: PhantomData<&'a ()>,
53299}
53300unsafe impl Send for DirectDriverLoadingInfoLUNARG<'_> {}
53301unsafe impl Sync for DirectDriverLoadingInfoLUNARG<'_> {}
53302#[cfg(feature = "debug")]
53303impl fmt::Debug for DirectDriverLoadingInfoLUNARG<'_> {
53304    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
53305        fmt.debug_struct("DirectDriverLoadingInfoLUNARG")
53306            .field("s_type", &self.s_type)
53307            .field("p_next", &self.p_next)
53308            .field("flags", &self.flags)
53309            .field(
53310                "pfn_get_instance_proc_addr",
53311                &(self.pfn_get_instance_proc_addr.map(|x| x as *const ())),
53312            )
53313            .finish()
53314    }
53315}
53316impl ::core::default::Default for DirectDriverLoadingInfoLUNARG<'_> {
53317    #[inline]
53318    fn default() -> Self {
53319        Self {
53320            s_type: Self::STRUCTURE_TYPE,
53321            p_next: ::core::ptr::null_mut(),
53322            flags: DirectDriverLoadingFlagsLUNARG::default(),
53323            pfn_get_instance_proc_addr: PFN_vkGetInstanceProcAddrLUNARG::default(),
53324            _marker: PhantomData,
53325        }
53326    }
53327}
53328unsafe impl<'a> TaggedStructure for DirectDriverLoadingInfoLUNARG<'a> {
53329    const STRUCTURE_TYPE: StructureType = StructureType::DIRECT_DRIVER_LOADING_INFO_LUNARG;
53330}
53331impl<'a> DirectDriverLoadingInfoLUNARG<'a> {
53332    #[inline]
53333    pub fn flags(mut self, flags: DirectDriverLoadingFlagsLUNARG) -> Self {
53334        self.flags = flags;
53335        self
53336    }
53337    #[inline]
53338    pub fn pfn_get_instance_proc_addr(
53339        mut self,
53340        pfn_get_instance_proc_addr: PFN_vkGetInstanceProcAddrLUNARG,
53341    ) -> Self {
53342        self.pfn_get_instance_proc_addr = pfn_get_instance_proc_addr;
53343        self
53344    }
53345}
53346#[repr(C)]
53347#[cfg_attr(feature = "debug", derive(Debug))]
53348#[derive(Copy, Clone)]
53349#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDirectDriverLoadingListLUNARG.html>"]
53350#[must_use]
53351pub struct DirectDriverLoadingListLUNARG<'a> {
53352    pub s_type: StructureType,
53353    pub p_next: *const c_void,
53354    pub mode: DirectDriverLoadingModeLUNARG,
53355    pub driver_count: u32,
53356    pub p_drivers: *const DirectDriverLoadingInfoLUNARG<'a>,
53357    pub _marker: PhantomData<&'a ()>,
53358}
53359unsafe impl Send for DirectDriverLoadingListLUNARG<'_> {}
53360unsafe impl Sync for DirectDriverLoadingListLUNARG<'_> {}
53361impl ::core::default::Default for DirectDriverLoadingListLUNARG<'_> {
53362    #[inline]
53363    fn default() -> Self {
53364        Self {
53365            s_type: Self::STRUCTURE_TYPE,
53366            p_next: ::core::ptr::null(),
53367            mode: DirectDriverLoadingModeLUNARG::default(),
53368            driver_count: u32::default(),
53369            p_drivers: ::core::ptr::null(),
53370            _marker: PhantomData,
53371        }
53372    }
53373}
53374unsafe impl<'a> TaggedStructure for DirectDriverLoadingListLUNARG<'a> {
53375    const STRUCTURE_TYPE: StructureType = StructureType::DIRECT_DRIVER_LOADING_LIST_LUNARG;
53376}
53377unsafe impl ExtendsInstanceCreateInfo for DirectDriverLoadingListLUNARG<'_> {}
53378impl<'a> DirectDriverLoadingListLUNARG<'a> {
53379    #[inline]
53380    pub fn mode(mut self, mode: DirectDriverLoadingModeLUNARG) -> Self {
53381        self.mode = mode;
53382        self
53383    }
53384    #[inline]
53385    pub fn drivers(mut self, drivers: &'a [DirectDriverLoadingInfoLUNARG<'a>]) -> Self {
53386        self.driver_count = drivers.len() as _;
53387        self.p_drivers = drivers.as_ptr();
53388        self
53389    }
53390}
53391#[repr(C)]
53392#[cfg_attr(feature = "debug", derive(Debug))]
53393#[derive(Copy, Clone)]
53394#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM.html>"]
53395#[must_use]
53396pub struct PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'a> {
53397    pub s_type: StructureType,
53398    pub p_next: *mut c_void,
53399    pub multiview_per_view_viewports: Bool32,
53400    pub _marker: PhantomData<&'a ()>,
53401}
53402unsafe impl Send for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'_> {}
53403unsafe impl Sync for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'_> {}
53404impl ::core::default::Default for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'_> {
53405    #[inline]
53406    fn default() -> Self {
53407        Self {
53408            s_type: Self::STRUCTURE_TYPE,
53409            p_next: ::core::ptr::null_mut(),
53410            multiview_per_view_viewports: Bool32::default(),
53411            _marker: PhantomData,
53412        }
53413    }
53414}
53415unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'a> {
53416    const STRUCTURE_TYPE: StructureType =
53417        StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM;
53418}
53419unsafe impl ExtendsPhysicalDeviceFeatures2
53420    for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'_>
53421{
53422}
53423unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'_> {}
53424impl<'a> PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM<'a> {
53425    #[inline]
53426    pub fn multiview_per_view_viewports(mut self, multiview_per_view_viewports: bool) -> Self {
53427        self.multiview_per_view_viewports = multiview_per_view_viewports.into();
53428        self
53429    }
53430}
53431#[repr(C)]
53432#[cfg_attr(feature = "debug", derive(Debug))]
53433#[derive(Copy, Clone)]
53434#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRayTracingPositionFetchFeaturesKHR.html>"]
53435#[must_use]
53436pub struct PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'a> {
53437    pub s_type: StructureType,
53438    pub p_next: *mut c_void,
53439    pub ray_tracing_position_fetch: Bool32,
53440    pub _marker: PhantomData<&'a ()>,
53441}
53442unsafe impl Send for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'_> {}
53443unsafe impl Sync for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'_> {}
53444impl ::core::default::Default for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'_> {
53445    #[inline]
53446    fn default() -> Self {
53447        Self {
53448            s_type: Self::STRUCTURE_TYPE,
53449            p_next: ::core::ptr::null_mut(),
53450            ray_tracing_position_fetch: Bool32::default(),
53451            _marker: PhantomData,
53452        }
53453    }
53454}
53455unsafe impl<'a> TaggedStructure for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'a> {
53456    const STRUCTURE_TYPE: StructureType =
53457        StructureType::PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR;
53458}
53459unsafe impl ExtendsPhysicalDeviceFeatures2
53460    for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'_>
53461{
53462}
53463unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'_> {}
53464impl<'a> PhysicalDeviceRayTracingPositionFetchFeaturesKHR<'a> {
53465    #[inline]
53466    pub fn ray_tracing_position_fetch(mut self, ray_tracing_position_fetch: bool) -> Self {
53467        self.ray_tracing_position_fetch = ray_tracing_position_fetch.into();
53468        self
53469    }
53470}
53471#[repr(C)]
53472#[cfg_attr(feature = "debug", derive(Debug))]
53473#[derive(Copy, Clone)]
53474#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceImageSubresourceInfoKHR.html>"]
53475#[must_use]
53476pub struct DeviceImageSubresourceInfoKHR<'a> {
53477    pub s_type: StructureType,
53478    pub p_next: *const c_void,
53479    pub p_create_info: *const ImageCreateInfo<'a>,
53480    pub p_subresource: *const ImageSubresource2KHR<'a>,
53481    pub _marker: PhantomData<&'a ()>,
53482}
53483unsafe impl Send for DeviceImageSubresourceInfoKHR<'_> {}
53484unsafe impl Sync for DeviceImageSubresourceInfoKHR<'_> {}
53485impl ::core::default::Default for DeviceImageSubresourceInfoKHR<'_> {
53486    #[inline]
53487    fn default() -> Self {
53488        Self {
53489            s_type: Self::STRUCTURE_TYPE,
53490            p_next: ::core::ptr::null(),
53491            p_create_info: ::core::ptr::null(),
53492            p_subresource: ::core::ptr::null(),
53493            _marker: PhantomData,
53494        }
53495    }
53496}
53497unsafe impl<'a> TaggedStructure for DeviceImageSubresourceInfoKHR<'a> {
53498    const STRUCTURE_TYPE: StructureType = StructureType::DEVICE_IMAGE_SUBRESOURCE_INFO_KHR;
53499}
53500impl<'a> DeviceImageSubresourceInfoKHR<'a> {
53501    #[inline]
53502    pub fn create_info(mut self, create_info: &'a ImageCreateInfo<'a>) -> Self {
53503        self.p_create_info = create_info;
53504        self
53505    }
53506    #[inline]
53507    pub fn subresource(mut self, subresource: &'a ImageSubresource2KHR<'a>) -> Self {
53508        self.p_subresource = subresource;
53509        self
53510    }
53511}
53512#[repr(C)]
53513#[cfg_attr(feature = "debug", derive(Debug))]
53514#[derive(Copy, Clone)]
53515#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderCorePropertiesARM.html>"]
53516#[must_use]
53517pub struct PhysicalDeviceShaderCorePropertiesARM<'a> {
53518    pub s_type: StructureType,
53519    pub p_next: *mut c_void,
53520    pub pixel_rate: u32,
53521    pub texel_rate: u32,
53522    pub fma_rate: u32,
53523    pub _marker: PhantomData<&'a ()>,
53524}
53525unsafe impl Send for PhysicalDeviceShaderCorePropertiesARM<'_> {}
53526unsafe impl Sync for PhysicalDeviceShaderCorePropertiesARM<'_> {}
53527impl ::core::default::Default for PhysicalDeviceShaderCorePropertiesARM<'_> {
53528    #[inline]
53529    fn default() -> Self {
53530        Self {
53531            s_type: Self::STRUCTURE_TYPE,
53532            p_next: ::core::ptr::null_mut(),
53533            pixel_rate: u32::default(),
53534            texel_rate: u32::default(),
53535            fma_rate: u32::default(),
53536            _marker: PhantomData,
53537        }
53538    }
53539}
53540unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderCorePropertiesARM<'a> {
53541    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM;
53542}
53543unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderCorePropertiesARM<'_> {}
53544impl<'a> PhysicalDeviceShaderCorePropertiesARM<'a> {
53545    #[inline]
53546    pub fn pixel_rate(mut self, pixel_rate: u32) -> Self {
53547        self.pixel_rate = pixel_rate;
53548        self
53549    }
53550    #[inline]
53551    pub fn texel_rate(mut self, texel_rate: u32) -> Self {
53552        self.texel_rate = texel_rate;
53553        self
53554    }
53555    #[inline]
53556    pub fn fma_rate(mut self, fma_rate: u32) -> Self {
53557        self.fma_rate = fma_rate;
53558        self
53559    }
53560}
53561#[repr(C)]
53562#[cfg_attr(feature = "debug", derive(Debug))]
53563#[derive(Copy, Clone)]
53564#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM.html>"]
53565#[must_use]
53566pub struct PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'a> {
53567    pub s_type: StructureType,
53568    pub p_next: *mut c_void,
53569    pub multiview_per_view_render_areas: Bool32,
53570    pub _marker: PhantomData<&'a ()>,
53571}
53572unsafe impl Send for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'_> {}
53573unsafe impl Sync for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'_> {}
53574impl ::core::default::Default for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'_> {
53575    #[inline]
53576    fn default() -> Self {
53577        Self {
53578            s_type: Self::STRUCTURE_TYPE,
53579            p_next: ::core::ptr::null_mut(),
53580            multiview_per_view_render_areas: Bool32::default(),
53581            _marker: PhantomData,
53582        }
53583    }
53584}
53585unsafe impl<'a> TaggedStructure for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'a> {
53586    const STRUCTURE_TYPE: StructureType =
53587        StructureType::PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_RENDER_AREAS_FEATURES_QCOM;
53588}
53589unsafe impl ExtendsPhysicalDeviceFeatures2
53590    for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'_>
53591{
53592}
53593unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'_> {}
53594impl<'a> PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM<'a> {
53595    #[inline]
53596    pub fn multiview_per_view_render_areas(
53597        mut self,
53598        multiview_per_view_render_areas: bool,
53599    ) -> Self {
53600        self.multiview_per_view_render_areas = multiview_per_view_render_areas.into();
53601        self
53602    }
53603}
53604#[repr(C)]
53605#[cfg_attr(feature = "debug", derive(Debug))]
53606#[derive(Copy, Clone)]
53607#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM.html>"]
53608#[must_use]
53609pub struct MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'a> {
53610    pub s_type: StructureType,
53611    pub p_next: *const c_void,
53612    pub per_view_render_area_count: u32,
53613    pub p_per_view_render_areas: *const Rect2D,
53614    pub _marker: PhantomData<&'a ()>,
53615}
53616unsafe impl Send for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'_> {}
53617unsafe impl Sync for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'_> {}
53618impl ::core::default::Default for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'_> {
53619    #[inline]
53620    fn default() -> Self {
53621        Self {
53622            s_type: Self::STRUCTURE_TYPE,
53623            p_next: ::core::ptr::null(),
53624            per_view_render_area_count: u32::default(),
53625            p_per_view_render_areas: ::core::ptr::null(),
53626            _marker: PhantomData,
53627        }
53628    }
53629}
53630unsafe impl<'a> TaggedStructure for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'a> {
53631    const STRUCTURE_TYPE: StructureType =
53632        StructureType::MULTIVIEW_PER_VIEW_RENDER_AREAS_RENDER_PASS_BEGIN_INFO_QCOM;
53633}
53634unsafe impl ExtendsRenderPassBeginInfo for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'_> {}
53635unsafe impl ExtendsRenderingInfo for MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'_> {}
53636impl<'a> MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM<'a> {
53637    #[inline]
53638    pub fn per_view_render_areas(mut self, per_view_render_areas: &'a [Rect2D]) -> Self {
53639        self.per_view_render_area_count = per_view_render_areas.len() as _;
53640        self.p_per_view_render_areas = per_view_render_areas.as_ptr();
53641        self
53642    }
53643}
53644#[repr(C)]
53645#[cfg_attr(feature = "debug", derive(Debug))]
53646#[derive(Copy, Clone)]
53647#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkQueryLowLatencySupportNV.html>"]
53648#[must_use]
53649pub struct QueryLowLatencySupportNV<'a> {
53650    pub s_type: StructureType,
53651    pub p_next: *const c_void,
53652    pub p_queried_low_latency_data: *mut c_void,
53653    pub _marker: PhantomData<&'a ()>,
53654}
53655unsafe impl Send for QueryLowLatencySupportNV<'_> {}
53656unsafe impl Sync for QueryLowLatencySupportNV<'_> {}
53657impl ::core::default::Default for QueryLowLatencySupportNV<'_> {
53658    #[inline]
53659    fn default() -> Self {
53660        Self {
53661            s_type: Self::STRUCTURE_TYPE,
53662            p_next: ::core::ptr::null(),
53663            p_queried_low_latency_data: ::core::ptr::null_mut(),
53664            _marker: PhantomData,
53665        }
53666    }
53667}
53668unsafe impl<'a> TaggedStructure for QueryLowLatencySupportNV<'a> {
53669    const STRUCTURE_TYPE: StructureType = StructureType::QUERY_LOW_LATENCY_SUPPORT_NV;
53670}
53671unsafe impl ExtendsSemaphoreCreateInfo for QueryLowLatencySupportNV<'_> {}
53672impl<'a> QueryLowLatencySupportNV<'a> {
53673    #[inline]
53674    pub fn queried_low_latency_data(mut self, queried_low_latency_data: *mut c_void) -> Self {
53675        self.p_queried_low_latency_data = queried_low_latency_data;
53676        self
53677    }
53678}
53679#[repr(C)]
53680#[cfg_attr(feature = "debug", derive(Debug))]
53681#[derive(Copy, Clone)]
53682#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryMapInfoKHR.html>"]
53683#[must_use]
53684pub struct MemoryMapInfoKHR<'a> {
53685    pub s_type: StructureType,
53686    pub p_next: *const c_void,
53687    pub flags: MemoryMapFlags,
53688    pub memory: DeviceMemory,
53689    pub offset: DeviceSize,
53690    pub size: DeviceSize,
53691    pub _marker: PhantomData<&'a ()>,
53692}
53693unsafe impl Send for MemoryMapInfoKHR<'_> {}
53694unsafe impl Sync for MemoryMapInfoKHR<'_> {}
53695impl ::core::default::Default for MemoryMapInfoKHR<'_> {
53696    #[inline]
53697    fn default() -> Self {
53698        Self {
53699            s_type: Self::STRUCTURE_TYPE,
53700            p_next: ::core::ptr::null(),
53701            flags: MemoryMapFlags::default(),
53702            memory: DeviceMemory::default(),
53703            offset: DeviceSize::default(),
53704            size: DeviceSize::default(),
53705            _marker: PhantomData,
53706        }
53707    }
53708}
53709unsafe impl<'a> TaggedStructure for MemoryMapInfoKHR<'a> {
53710    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_MAP_INFO_KHR;
53711}
53712pub unsafe trait ExtendsMemoryMapInfoKHR {}
53713impl<'a> MemoryMapInfoKHR<'a> {
53714    #[inline]
53715    pub fn flags(mut self, flags: MemoryMapFlags) -> Self {
53716        self.flags = flags;
53717        self
53718    }
53719    #[inline]
53720    pub fn memory(mut self, memory: DeviceMemory) -> Self {
53721        self.memory = memory;
53722        self
53723    }
53724    #[inline]
53725    pub fn offset(mut self, offset: DeviceSize) -> Self {
53726        self.offset = offset;
53727        self
53728    }
53729    #[inline]
53730    pub fn size(mut self, size: DeviceSize) -> Self {
53731        self.size = size;
53732        self
53733    }
53734    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
53735    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
53736    #[doc = r" valid extension structs can be pushed into the chain."]
53737    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
53738    #[doc = r" chain will look like `A -> D -> B -> C`."]
53739    pub fn push_next<T: ExtendsMemoryMapInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
53740        unsafe {
53741            let next_ptr = <*const T>::cast(next);
53742            let last_next = ptr_chain_iter(next).last().unwrap();
53743            (*last_next).p_next = self.p_next as _;
53744            self.p_next = next_ptr;
53745        }
53746        self
53747    }
53748}
53749#[repr(C)]
53750#[cfg_attr(feature = "debug", derive(Debug))]
53751#[derive(Copy, Clone)]
53752#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryUnmapInfoKHR.html>"]
53753#[must_use]
53754pub struct MemoryUnmapInfoKHR<'a> {
53755    pub s_type: StructureType,
53756    pub p_next: *const c_void,
53757    pub flags: MemoryUnmapFlagsKHR,
53758    pub memory: DeviceMemory,
53759    pub _marker: PhantomData<&'a ()>,
53760}
53761unsafe impl Send for MemoryUnmapInfoKHR<'_> {}
53762unsafe impl Sync for MemoryUnmapInfoKHR<'_> {}
53763impl ::core::default::Default for MemoryUnmapInfoKHR<'_> {
53764    #[inline]
53765    fn default() -> Self {
53766        Self {
53767            s_type: Self::STRUCTURE_TYPE,
53768            p_next: ::core::ptr::null(),
53769            flags: MemoryUnmapFlagsKHR::default(),
53770            memory: DeviceMemory::default(),
53771            _marker: PhantomData,
53772        }
53773    }
53774}
53775unsafe impl<'a> TaggedStructure for MemoryUnmapInfoKHR<'a> {
53776    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_UNMAP_INFO_KHR;
53777}
53778impl<'a> MemoryUnmapInfoKHR<'a> {
53779    #[inline]
53780    pub fn flags(mut self, flags: MemoryUnmapFlagsKHR) -> Self {
53781        self.flags = flags;
53782        self
53783    }
53784    #[inline]
53785    pub fn memory(mut self, memory: DeviceMemory) -> Self {
53786        self.memory = memory;
53787        self
53788    }
53789}
53790#[repr(C)]
53791#[cfg_attr(feature = "debug", derive(Debug))]
53792#[derive(Copy, Clone)]
53793#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderObjectFeaturesEXT.html>"]
53794#[must_use]
53795pub struct PhysicalDeviceShaderObjectFeaturesEXT<'a> {
53796    pub s_type: StructureType,
53797    pub p_next: *mut c_void,
53798    pub shader_object: Bool32,
53799    pub _marker: PhantomData<&'a ()>,
53800}
53801unsafe impl Send for PhysicalDeviceShaderObjectFeaturesEXT<'_> {}
53802unsafe impl Sync for PhysicalDeviceShaderObjectFeaturesEXT<'_> {}
53803impl ::core::default::Default for PhysicalDeviceShaderObjectFeaturesEXT<'_> {
53804    #[inline]
53805    fn default() -> Self {
53806        Self {
53807            s_type: Self::STRUCTURE_TYPE,
53808            p_next: ::core::ptr::null_mut(),
53809            shader_object: Bool32::default(),
53810            _marker: PhantomData,
53811        }
53812    }
53813}
53814unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderObjectFeaturesEXT<'a> {
53815    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT;
53816}
53817unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderObjectFeaturesEXT<'_> {}
53818unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderObjectFeaturesEXT<'_> {}
53819impl<'a> PhysicalDeviceShaderObjectFeaturesEXT<'a> {
53820    #[inline]
53821    pub fn shader_object(mut self, shader_object: bool) -> Self {
53822        self.shader_object = shader_object.into();
53823        self
53824    }
53825}
53826#[repr(C)]
53827#[cfg_attr(feature = "debug", derive(Debug))]
53828#[derive(Copy, Clone)]
53829#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderObjectPropertiesEXT.html>"]
53830#[must_use]
53831pub struct PhysicalDeviceShaderObjectPropertiesEXT<'a> {
53832    pub s_type: StructureType,
53833    pub p_next: *mut c_void,
53834    pub shader_binary_uuid: [u8; UUID_SIZE],
53835    pub shader_binary_version: u32,
53836    pub _marker: PhantomData<&'a ()>,
53837}
53838unsafe impl Send for PhysicalDeviceShaderObjectPropertiesEXT<'_> {}
53839unsafe impl Sync for PhysicalDeviceShaderObjectPropertiesEXT<'_> {}
53840impl ::core::default::Default for PhysicalDeviceShaderObjectPropertiesEXT<'_> {
53841    #[inline]
53842    fn default() -> Self {
53843        Self {
53844            s_type: Self::STRUCTURE_TYPE,
53845            p_next: ::core::ptr::null_mut(),
53846            shader_binary_uuid: unsafe { ::core::mem::zeroed() },
53847            shader_binary_version: u32::default(),
53848            _marker: PhantomData,
53849        }
53850    }
53851}
53852unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderObjectPropertiesEXT<'a> {
53853    const STRUCTURE_TYPE: StructureType =
53854        StructureType::PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT;
53855}
53856unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderObjectPropertiesEXT<'_> {}
53857impl<'a> PhysicalDeviceShaderObjectPropertiesEXT<'a> {
53858    #[inline]
53859    pub fn shader_binary_uuid(mut self, shader_binary_uuid: [u8; UUID_SIZE]) -> Self {
53860        self.shader_binary_uuid = shader_binary_uuid;
53861        self
53862    }
53863    #[inline]
53864    pub fn shader_binary_version(mut self, shader_binary_version: u32) -> Self {
53865        self.shader_binary_version = shader_binary_version;
53866        self
53867    }
53868}
53869#[repr(C)]
53870#[cfg_attr(feature = "debug", derive(Debug))]
53871#[derive(Copy, Clone)]
53872#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkShaderCreateInfoEXT.html>"]
53873#[must_use]
53874pub struct ShaderCreateInfoEXT<'a> {
53875    pub s_type: StructureType,
53876    pub p_next: *const c_void,
53877    pub flags: ShaderCreateFlagsEXT,
53878    pub stage: ShaderStageFlags,
53879    pub next_stage: ShaderStageFlags,
53880    pub code_type: ShaderCodeTypeEXT,
53881    pub code_size: usize,
53882    pub p_code: *const c_void,
53883    pub p_name: *const c_char,
53884    pub set_layout_count: u32,
53885    pub p_set_layouts: *const DescriptorSetLayout,
53886    pub push_constant_range_count: u32,
53887    pub p_push_constant_ranges: *const PushConstantRange,
53888    pub p_specialization_info: *const SpecializationInfo<'a>,
53889    pub _marker: PhantomData<&'a ()>,
53890}
53891unsafe impl Send for ShaderCreateInfoEXT<'_> {}
53892unsafe impl Sync for ShaderCreateInfoEXT<'_> {}
53893impl ::core::default::Default for ShaderCreateInfoEXT<'_> {
53894    #[inline]
53895    fn default() -> Self {
53896        Self {
53897            s_type: Self::STRUCTURE_TYPE,
53898            p_next: ::core::ptr::null(),
53899            flags: ShaderCreateFlagsEXT::default(),
53900            stage: ShaderStageFlags::default(),
53901            next_stage: ShaderStageFlags::default(),
53902            code_type: ShaderCodeTypeEXT::default(),
53903            code_size: usize::default(),
53904            p_code: ::core::ptr::null(),
53905            p_name: ::core::ptr::null(),
53906            set_layout_count: u32::default(),
53907            p_set_layouts: ::core::ptr::null(),
53908            push_constant_range_count: u32::default(),
53909            p_push_constant_ranges: ::core::ptr::null(),
53910            p_specialization_info: ::core::ptr::null(),
53911            _marker: PhantomData,
53912        }
53913    }
53914}
53915unsafe impl<'a> TaggedStructure for ShaderCreateInfoEXT<'a> {
53916    const STRUCTURE_TYPE: StructureType = StructureType::SHADER_CREATE_INFO_EXT;
53917}
53918pub unsafe trait ExtendsShaderCreateInfoEXT {}
53919impl<'a> ShaderCreateInfoEXT<'a> {
53920    #[inline]
53921    pub fn flags(mut self, flags: ShaderCreateFlagsEXT) -> Self {
53922        self.flags = flags;
53923        self
53924    }
53925    #[inline]
53926    pub fn stage(mut self, stage: ShaderStageFlags) -> Self {
53927        self.stage = stage;
53928        self
53929    }
53930    #[inline]
53931    pub fn next_stage(mut self, next_stage: ShaderStageFlags) -> Self {
53932        self.next_stage = next_stage;
53933        self
53934    }
53935    #[inline]
53936    pub fn code_type(mut self, code_type: ShaderCodeTypeEXT) -> Self {
53937        self.code_type = code_type;
53938        self
53939    }
53940    #[inline]
53941    pub fn code(mut self, code: &'a [u8]) -> Self {
53942        self.code_size = code.len();
53943        self.p_code = code.as_ptr().cast();
53944        self
53945    }
53946    #[inline]
53947    pub fn name(mut self, name: &'a CStr) -> Self {
53948        self.p_name = name.as_ptr();
53949        self
53950    }
53951    #[inline]
53952    pub unsafe fn name_as_c_str(&self) -> Option<&CStr> {
53953        if self.p_name.is_null() {
53954            None
53955        } else {
53956            Some(CStr::from_ptr(self.p_name))
53957        }
53958    }
53959    #[inline]
53960    pub fn set_layouts(mut self, set_layouts: &'a [DescriptorSetLayout]) -> Self {
53961        self.set_layout_count = set_layouts.len() as _;
53962        self.p_set_layouts = set_layouts.as_ptr();
53963        self
53964    }
53965    #[inline]
53966    pub fn push_constant_ranges(mut self, push_constant_ranges: &'a [PushConstantRange]) -> Self {
53967        self.push_constant_range_count = push_constant_ranges.len() as _;
53968        self.p_push_constant_ranges = push_constant_ranges.as_ptr();
53969        self
53970    }
53971    #[inline]
53972    pub fn specialization_info(mut self, specialization_info: &'a SpecializationInfo<'a>) -> Self {
53973        self.p_specialization_info = specialization_info;
53974        self
53975    }
53976    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
53977    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
53978    #[doc = r" valid extension structs can be pushed into the chain."]
53979    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
53980    #[doc = r" chain will look like `A -> D -> B -> C`."]
53981    pub fn push_next<T: ExtendsShaderCreateInfoEXT + ?Sized>(mut self, next: &'a mut T) -> Self {
53982        unsafe {
53983            let next_ptr = <*const T>::cast(next);
53984            let last_next = ptr_chain_iter(next).last().unwrap();
53985            (*last_next).p_next = self.p_next as _;
53986            self.p_next = next_ptr;
53987        }
53988        self
53989    }
53990}
53991#[repr(C)]
53992#[cfg_attr(feature = "debug", derive(Debug))]
53993#[derive(Copy, Clone)]
53994#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderTileImageFeaturesEXT.html>"]
53995#[must_use]
53996pub struct PhysicalDeviceShaderTileImageFeaturesEXT<'a> {
53997    pub s_type: StructureType,
53998    pub p_next: *mut c_void,
53999    pub shader_tile_image_color_read_access: Bool32,
54000    pub shader_tile_image_depth_read_access: Bool32,
54001    pub shader_tile_image_stencil_read_access: Bool32,
54002    pub _marker: PhantomData<&'a ()>,
54003}
54004unsafe impl Send for PhysicalDeviceShaderTileImageFeaturesEXT<'_> {}
54005unsafe impl Sync for PhysicalDeviceShaderTileImageFeaturesEXT<'_> {}
54006impl ::core::default::Default for PhysicalDeviceShaderTileImageFeaturesEXT<'_> {
54007    #[inline]
54008    fn default() -> Self {
54009        Self {
54010            s_type: Self::STRUCTURE_TYPE,
54011            p_next: ::core::ptr::null_mut(),
54012            shader_tile_image_color_read_access: Bool32::default(),
54013            shader_tile_image_depth_read_access: Bool32::default(),
54014            shader_tile_image_stencil_read_access: Bool32::default(),
54015            _marker: PhantomData,
54016        }
54017    }
54018}
54019unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderTileImageFeaturesEXT<'a> {
54020    const STRUCTURE_TYPE: StructureType =
54021        StructureType::PHYSICAL_DEVICE_SHADER_TILE_IMAGE_FEATURES_EXT;
54022}
54023unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderTileImageFeaturesEXT<'_> {}
54024unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderTileImageFeaturesEXT<'_> {}
54025impl<'a> PhysicalDeviceShaderTileImageFeaturesEXT<'a> {
54026    #[inline]
54027    pub fn shader_tile_image_color_read_access(
54028        mut self,
54029        shader_tile_image_color_read_access: bool,
54030    ) -> Self {
54031        self.shader_tile_image_color_read_access = shader_tile_image_color_read_access.into();
54032        self
54033    }
54034    #[inline]
54035    pub fn shader_tile_image_depth_read_access(
54036        mut self,
54037        shader_tile_image_depth_read_access: bool,
54038    ) -> Self {
54039        self.shader_tile_image_depth_read_access = shader_tile_image_depth_read_access.into();
54040        self
54041    }
54042    #[inline]
54043    pub fn shader_tile_image_stencil_read_access(
54044        mut self,
54045        shader_tile_image_stencil_read_access: bool,
54046    ) -> Self {
54047        self.shader_tile_image_stencil_read_access = shader_tile_image_stencil_read_access.into();
54048        self
54049    }
54050}
54051#[repr(C)]
54052#[cfg_attr(feature = "debug", derive(Debug))]
54053#[derive(Copy, Clone)]
54054#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderTileImagePropertiesEXT.html>"]
54055#[must_use]
54056pub struct PhysicalDeviceShaderTileImagePropertiesEXT<'a> {
54057    pub s_type: StructureType,
54058    pub p_next: *mut c_void,
54059    pub shader_tile_image_coherent_read_accelerated: Bool32,
54060    pub shader_tile_image_read_sample_from_pixel_rate_invocation: Bool32,
54061    pub shader_tile_image_read_from_helper_invocation: Bool32,
54062    pub _marker: PhantomData<&'a ()>,
54063}
54064unsafe impl Send for PhysicalDeviceShaderTileImagePropertiesEXT<'_> {}
54065unsafe impl Sync for PhysicalDeviceShaderTileImagePropertiesEXT<'_> {}
54066impl ::core::default::Default for PhysicalDeviceShaderTileImagePropertiesEXT<'_> {
54067    #[inline]
54068    fn default() -> Self {
54069        Self {
54070            s_type: Self::STRUCTURE_TYPE,
54071            p_next: ::core::ptr::null_mut(),
54072            shader_tile_image_coherent_read_accelerated: Bool32::default(),
54073            shader_tile_image_read_sample_from_pixel_rate_invocation: Bool32::default(),
54074            shader_tile_image_read_from_helper_invocation: Bool32::default(),
54075            _marker: PhantomData,
54076        }
54077    }
54078}
54079unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderTileImagePropertiesEXT<'a> {
54080    const STRUCTURE_TYPE: StructureType =
54081        StructureType::PHYSICAL_DEVICE_SHADER_TILE_IMAGE_PROPERTIES_EXT;
54082}
54083unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderTileImagePropertiesEXT<'_> {}
54084impl<'a> PhysicalDeviceShaderTileImagePropertiesEXT<'a> {
54085    #[inline]
54086    pub fn shader_tile_image_coherent_read_accelerated(
54087        mut self,
54088        shader_tile_image_coherent_read_accelerated: bool,
54089    ) -> Self {
54090        self.shader_tile_image_coherent_read_accelerated =
54091            shader_tile_image_coherent_read_accelerated.into();
54092        self
54093    }
54094    #[inline]
54095    pub fn shader_tile_image_read_sample_from_pixel_rate_invocation(
54096        mut self,
54097        shader_tile_image_read_sample_from_pixel_rate_invocation: bool,
54098    ) -> Self {
54099        self.shader_tile_image_read_sample_from_pixel_rate_invocation =
54100            shader_tile_image_read_sample_from_pixel_rate_invocation.into();
54101        self
54102    }
54103    #[inline]
54104    pub fn shader_tile_image_read_from_helper_invocation(
54105        mut self,
54106        shader_tile_image_read_from_helper_invocation: bool,
54107    ) -> Self {
54108        self.shader_tile_image_read_from_helper_invocation =
54109            shader_tile_image_read_from_helper_invocation.into();
54110        self
54111    }
54112}
54113#[repr(C)]
54114#[cfg_attr(feature = "debug", derive(Debug))]
54115#[derive(Copy, Clone)]
54116#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImportScreenBufferInfoQNX.html>"]
54117#[must_use]
54118pub struct ImportScreenBufferInfoQNX<'a> {
54119    pub s_type: StructureType,
54120    pub p_next: *const c_void,
54121    pub buffer: *mut _screen_buffer,
54122    pub _marker: PhantomData<&'a ()>,
54123}
54124unsafe impl Send for ImportScreenBufferInfoQNX<'_> {}
54125unsafe impl Sync for ImportScreenBufferInfoQNX<'_> {}
54126impl ::core::default::Default for ImportScreenBufferInfoQNX<'_> {
54127    #[inline]
54128    fn default() -> Self {
54129        Self {
54130            s_type: Self::STRUCTURE_TYPE,
54131            p_next: ::core::ptr::null(),
54132            buffer: ::core::ptr::null_mut(),
54133            _marker: PhantomData,
54134        }
54135    }
54136}
54137unsafe impl<'a> TaggedStructure for ImportScreenBufferInfoQNX<'a> {
54138    const STRUCTURE_TYPE: StructureType = StructureType::IMPORT_SCREEN_BUFFER_INFO_QNX;
54139}
54140unsafe impl ExtendsMemoryAllocateInfo for ImportScreenBufferInfoQNX<'_> {}
54141impl<'a> ImportScreenBufferInfoQNX<'a> {
54142    #[inline]
54143    pub fn buffer(mut self, buffer: &'a mut _screen_buffer) -> Self {
54144        self.buffer = buffer;
54145        self
54146    }
54147}
54148#[repr(C)]
54149#[cfg_attr(feature = "debug", derive(Debug))]
54150#[derive(Copy, Clone)]
54151#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkScreenBufferPropertiesQNX.html>"]
54152#[must_use]
54153pub struct ScreenBufferPropertiesQNX<'a> {
54154    pub s_type: StructureType,
54155    pub p_next: *mut c_void,
54156    pub allocation_size: DeviceSize,
54157    pub memory_type_bits: u32,
54158    pub _marker: PhantomData<&'a ()>,
54159}
54160unsafe impl Send for ScreenBufferPropertiesQNX<'_> {}
54161unsafe impl Sync for ScreenBufferPropertiesQNX<'_> {}
54162impl ::core::default::Default for ScreenBufferPropertiesQNX<'_> {
54163    #[inline]
54164    fn default() -> Self {
54165        Self {
54166            s_type: Self::STRUCTURE_TYPE,
54167            p_next: ::core::ptr::null_mut(),
54168            allocation_size: DeviceSize::default(),
54169            memory_type_bits: u32::default(),
54170            _marker: PhantomData,
54171        }
54172    }
54173}
54174unsafe impl<'a> TaggedStructure for ScreenBufferPropertiesQNX<'a> {
54175    const STRUCTURE_TYPE: StructureType = StructureType::SCREEN_BUFFER_PROPERTIES_QNX;
54176}
54177pub unsafe trait ExtendsScreenBufferPropertiesQNX {}
54178impl<'a> ScreenBufferPropertiesQNX<'a> {
54179    #[inline]
54180    pub fn allocation_size(mut self, allocation_size: DeviceSize) -> Self {
54181        self.allocation_size = allocation_size;
54182        self
54183    }
54184    #[inline]
54185    pub fn memory_type_bits(mut self, memory_type_bits: u32) -> Self {
54186        self.memory_type_bits = memory_type_bits;
54187        self
54188    }
54189    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
54190    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
54191    #[doc = r" valid extension structs can be pushed into the chain."]
54192    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
54193    #[doc = r" chain will look like `A -> D -> B -> C`."]
54194    pub fn push_next<T: ExtendsScreenBufferPropertiesQNX + ?Sized>(
54195        mut self,
54196        next: &'a mut T,
54197    ) -> Self {
54198        unsafe {
54199            let next_ptr = <*mut T>::cast(next);
54200            let last_next = ptr_chain_iter(next).last().unwrap();
54201            (*last_next).p_next = self.p_next as _;
54202            self.p_next = next_ptr;
54203        }
54204        self
54205    }
54206}
54207#[repr(C)]
54208#[cfg_attr(feature = "debug", derive(Debug))]
54209#[derive(Copy, Clone)]
54210#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkScreenBufferFormatPropertiesQNX.html>"]
54211#[must_use]
54212pub struct ScreenBufferFormatPropertiesQNX<'a> {
54213    pub s_type: StructureType,
54214    pub p_next: *mut c_void,
54215    pub format: Format,
54216    pub external_format: u64,
54217    pub screen_usage: u64,
54218    pub format_features: FormatFeatureFlags,
54219    pub sampler_ycbcr_conversion_components: ComponentMapping,
54220    pub suggested_ycbcr_model: SamplerYcbcrModelConversion,
54221    pub suggested_ycbcr_range: SamplerYcbcrRange,
54222    pub suggested_x_chroma_offset: ChromaLocation,
54223    pub suggested_y_chroma_offset: ChromaLocation,
54224    pub _marker: PhantomData<&'a ()>,
54225}
54226unsafe impl Send for ScreenBufferFormatPropertiesQNX<'_> {}
54227unsafe impl Sync for ScreenBufferFormatPropertiesQNX<'_> {}
54228impl ::core::default::Default for ScreenBufferFormatPropertiesQNX<'_> {
54229    #[inline]
54230    fn default() -> Self {
54231        Self {
54232            s_type: Self::STRUCTURE_TYPE,
54233            p_next: ::core::ptr::null_mut(),
54234            format: Format::default(),
54235            external_format: u64::default(),
54236            screen_usage: u64::default(),
54237            format_features: FormatFeatureFlags::default(),
54238            sampler_ycbcr_conversion_components: ComponentMapping::default(),
54239            suggested_ycbcr_model: SamplerYcbcrModelConversion::default(),
54240            suggested_ycbcr_range: SamplerYcbcrRange::default(),
54241            suggested_x_chroma_offset: ChromaLocation::default(),
54242            suggested_y_chroma_offset: ChromaLocation::default(),
54243            _marker: PhantomData,
54244        }
54245    }
54246}
54247unsafe impl<'a> TaggedStructure for ScreenBufferFormatPropertiesQNX<'a> {
54248    const STRUCTURE_TYPE: StructureType = StructureType::SCREEN_BUFFER_FORMAT_PROPERTIES_QNX;
54249}
54250unsafe impl ExtendsScreenBufferPropertiesQNX for ScreenBufferFormatPropertiesQNX<'_> {}
54251impl<'a> ScreenBufferFormatPropertiesQNX<'a> {
54252    #[inline]
54253    pub fn format(mut self, format: Format) -> Self {
54254        self.format = format;
54255        self
54256    }
54257    #[inline]
54258    pub fn external_format(mut self, external_format: u64) -> Self {
54259        self.external_format = external_format;
54260        self
54261    }
54262    #[inline]
54263    pub fn screen_usage(mut self, screen_usage: u64) -> Self {
54264        self.screen_usage = screen_usage;
54265        self
54266    }
54267    #[inline]
54268    pub fn format_features(mut self, format_features: FormatFeatureFlags) -> Self {
54269        self.format_features = format_features;
54270        self
54271    }
54272    #[inline]
54273    pub fn sampler_ycbcr_conversion_components(
54274        mut self,
54275        sampler_ycbcr_conversion_components: ComponentMapping,
54276    ) -> Self {
54277        self.sampler_ycbcr_conversion_components = sampler_ycbcr_conversion_components;
54278        self
54279    }
54280    #[inline]
54281    pub fn suggested_ycbcr_model(
54282        mut self,
54283        suggested_ycbcr_model: SamplerYcbcrModelConversion,
54284    ) -> Self {
54285        self.suggested_ycbcr_model = suggested_ycbcr_model;
54286        self
54287    }
54288    #[inline]
54289    pub fn suggested_ycbcr_range(mut self, suggested_ycbcr_range: SamplerYcbcrRange) -> Self {
54290        self.suggested_ycbcr_range = suggested_ycbcr_range;
54291        self
54292    }
54293    #[inline]
54294    pub fn suggested_x_chroma_offset(mut self, suggested_x_chroma_offset: ChromaLocation) -> Self {
54295        self.suggested_x_chroma_offset = suggested_x_chroma_offset;
54296        self
54297    }
54298    #[inline]
54299    pub fn suggested_y_chroma_offset(mut self, suggested_y_chroma_offset: ChromaLocation) -> Self {
54300        self.suggested_y_chroma_offset = suggested_y_chroma_offset;
54301        self
54302    }
54303}
54304#[repr(C)]
54305#[cfg_attr(feature = "debug", derive(Debug))]
54306#[derive(Copy, Clone)]
54307#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExternalFormatQNX.html>"]
54308#[must_use]
54309pub struct ExternalFormatQNX<'a> {
54310    pub s_type: StructureType,
54311    pub p_next: *mut c_void,
54312    pub external_format: u64,
54313    pub _marker: PhantomData<&'a ()>,
54314}
54315unsafe impl Send for ExternalFormatQNX<'_> {}
54316unsafe impl Sync for ExternalFormatQNX<'_> {}
54317impl ::core::default::Default for ExternalFormatQNX<'_> {
54318    #[inline]
54319    fn default() -> Self {
54320        Self {
54321            s_type: Self::STRUCTURE_TYPE,
54322            p_next: ::core::ptr::null_mut(),
54323            external_format: u64::default(),
54324            _marker: PhantomData,
54325        }
54326    }
54327}
54328unsafe impl<'a> TaggedStructure for ExternalFormatQNX<'a> {
54329    const STRUCTURE_TYPE: StructureType = StructureType::EXTERNAL_FORMAT_QNX;
54330}
54331unsafe impl ExtendsImageCreateInfo for ExternalFormatQNX<'_> {}
54332unsafe impl ExtendsSamplerYcbcrConversionCreateInfo for ExternalFormatQNX<'_> {}
54333impl<'a> ExternalFormatQNX<'a> {
54334    #[inline]
54335    pub fn external_format(mut self, external_format: u64) -> Self {
54336        self.external_format = external_format;
54337        self
54338    }
54339}
54340#[repr(C)]
54341#[cfg_attr(feature = "debug", derive(Debug))]
54342#[derive(Copy, Clone)]
54343#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX.html>"]
54344#[must_use]
54345pub struct PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'a> {
54346    pub s_type: StructureType,
54347    pub p_next: *mut c_void,
54348    pub screen_buffer_import: Bool32,
54349    pub _marker: PhantomData<&'a ()>,
54350}
54351unsafe impl Send for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'_> {}
54352unsafe impl Sync for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'_> {}
54353impl ::core::default::Default for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'_> {
54354    #[inline]
54355    fn default() -> Self {
54356        Self {
54357            s_type: Self::STRUCTURE_TYPE,
54358            p_next: ::core::ptr::null_mut(),
54359            screen_buffer_import: Bool32::default(),
54360            _marker: PhantomData,
54361        }
54362    }
54363}
54364unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'a> {
54365    const STRUCTURE_TYPE: StructureType =
54366        StructureType::PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX;
54367}
54368unsafe impl ExtendsPhysicalDeviceFeatures2
54369    for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'_>
54370{
54371}
54372unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'_> {}
54373impl<'a> PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX<'a> {
54374    #[inline]
54375    pub fn screen_buffer_import(mut self, screen_buffer_import: bool) -> Self {
54376        self.screen_buffer_import = screen_buffer_import.into();
54377        self
54378    }
54379}
54380#[repr(C)]
54381#[cfg_attr(feature = "debug", derive(Debug))]
54382#[derive(Copy, Clone)]
54383#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrixFeaturesKHR.html>"]
54384#[must_use]
54385pub struct PhysicalDeviceCooperativeMatrixFeaturesKHR<'a> {
54386    pub s_type: StructureType,
54387    pub p_next: *mut c_void,
54388    pub cooperative_matrix: Bool32,
54389    pub cooperative_matrix_robust_buffer_access: Bool32,
54390    pub _marker: PhantomData<&'a ()>,
54391}
54392unsafe impl Send for PhysicalDeviceCooperativeMatrixFeaturesKHR<'_> {}
54393unsafe impl Sync for PhysicalDeviceCooperativeMatrixFeaturesKHR<'_> {}
54394impl ::core::default::Default for PhysicalDeviceCooperativeMatrixFeaturesKHR<'_> {
54395    #[inline]
54396    fn default() -> Self {
54397        Self {
54398            s_type: Self::STRUCTURE_TYPE,
54399            p_next: ::core::ptr::null_mut(),
54400            cooperative_matrix: Bool32::default(),
54401            cooperative_matrix_robust_buffer_access: Bool32::default(),
54402            _marker: PhantomData,
54403        }
54404    }
54405}
54406unsafe impl<'a> TaggedStructure for PhysicalDeviceCooperativeMatrixFeaturesKHR<'a> {
54407    const STRUCTURE_TYPE: StructureType =
54408        StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR;
54409}
54410unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCooperativeMatrixFeaturesKHR<'_> {}
54411unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCooperativeMatrixFeaturesKHR<'_> {}
54412impl<'a> PhysicalDeviceCooperativeMatrixFeaturesKHR<'a> {
54413    #[inline]
54414    pub fn cooperative_matrix(mut self, cooperative_matrix: bool) -> Self {
54415        self.cooperative_matrix = cooperative_matrix.into();
54416        self
54417    }
54418    #[inline]
54419    pub fn cooperative_matrix_robust_buffer_access(
54420        mut self,
54421        cooperative_matrix_robust_buffer_access: bool,
54422    ) -> Self {
54423        self.cooperative_matrix_robust_buffer_access =
54424            cooperative_matrix_robust_buffer_access.into();
54425        self
54426    }
54427}
54428#[repr(C)]
54429#[cfg_attr(feature = "debug", derive(Debug))]
54430#[derive(Copy, Clone)]
54431#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkCooperativeMatrixPropertiesKHR.html>"]
54432#[must_use]
54433pub struct CooperativeMatrixPropertiesKHR<'a> {
54434    pub s_type: StructureType,
54435    pub p_next: *mut c_void,
54436    pub m_size: u32,
54437    pub n_size: u32,
54438    pub k_size: u32,
54439    pub a_type: ComponentTypeKHR,
54440    pub b_type: ComponentTypeKHR,
54441    pub c_type: ComponentTypeKHR,
54442    pub result_type: ComponentTypeKHR,
54443    pub saturating_accumulation: Bool32,
54444    pub scope: ScopeKHR,
54445    pub _marker: PhantomData<&'a ()>,
54446}
54447unsafe impl Send for CooperativeMatrixPropertiesKHR<'_> {}
54448unsafe impl Sync for CooperativeMatrixPropertiesKHR<'_> {}
54449impl ::core::default::Default for CooperativeMatrixPropertiesKHR<'_> {
54450    #[inline]
54451    fn default() -> Self {
54452        Self {
54453            s_type: Self::STRUCTURE_TYPE,
54454            p_next: ::core::ptr::null_mut(),
54455            m_size: u32::default(),
54456            n_size: u32::default(),
54457            k_size: u32::default(),
54458            a_type: ComponentTypeKHR::default(),
54459            b_type: ComponentTypeKHR::default(),
54460            c_type: ComponentTypeKHR::default(),
54461            result_type: ComponentTypeKHR::default(),
54462            saturating_accumulation: Bool32::default(),
54463            scope: ScopeKHR::default(),
54464            _marker: PhantomData,
54465        }
54466    }
54467}
54468unsafe impl<'a> TaggedStructure for CooperativeMatrixPropertiesKHR<'a> {
54469    const STRUCTURE_TYPE: StructureType = StructureType::COOPERATIVE_MATRIX_PROPERTIES_KHR;
54470}
54471impl<'a> CooperativeMatrixPropertiesKHR<'a> {
54472    #[inline]
54473    pub fn m_size(mut self, m_size: u32) -> Self {
54474        self.m_size = m_size;
54475        self
54476    }
54477    #[inline]
54478    pub fn n_size(mut self, n_size: u32) -> Self {
54479        self.n_size = n_size;
54480        self
54481    }
54482    #[inline]
54483    pub fn k_size(mut self, k_size: u32) -> Self {
54484        self.k_size = k_size;
54485        self
54486    }
54487    #[inline]
54488    pub fn a_type(mut self, a_type: ComponentTypeKHR) -> Self {
54489        self.a_type = a_type;
54490        self
54491    }
54492    #[inline]
54493    pub fn b_type(mut self, b_type: ComponentTypeKHR) -> Self {
54494        self.b_type = b_type;
54495        self
54496    }
54497    #[inline]
54498    pub fn c_type(mut self, c_type: ComponentTypeKHR) -> Self {
54499        self.c_type = c_type;
54500        self
54501    }
54502    #[inline]
54503    pub fn result_type(mut self, result_type: ComponentTypeKHR) -> Self {
54504        self.result_type = result_type;
54505        self
54506    }
54507    #[inline]
54508    pub fn saturating_accumulation(mut self, saturating_accumulation: bool) -> Self {
54509        self.saturating_accumulation = saturating_accumulation.into();
54510        self
54511    }
54512    #[inline]
54513    pub fn scope(mut self, scope: ScopeKHR) -> Self {
54514        self.scope = scope;
54515        self
54516    }
54517}
54518#[repr(C)]
54519#[cfg_attr(feature = "debug", derive(Debug))]
54520#[derive(Copy, Clone)]
54521#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrixPropertiesKHR.html>"]
54522#[must_use]
54523pub struct PhysicalDeviceCooperativeMatrixPropertiesKHR<'a> {
54524    pub s_type: StructureType,
54525    pub p_next: *mut c_void,
54526    pub cooperative_matrix_supported_stages: ShaderStageFlags,
54527    pub _marker: PhantomData<&'a ()>,
54528}
54529unsafe impl Send for PhysicalDeviceCooperativeMatrixPropertiesKHR<'_> {}
54530unsafe impl Sync for PhysicalDeviceCooperativeMatrixPropertiesKHR<'_> {}
54531impl ::core::default::Default for PhysicalDeviceCooperativeMatrixPropertiesKHR<'_> {
54532    #[inline]
54533    fn default() -> Self {
54534        Self {
54535            s_type: Self::STRUCTURE_TYPE,
54536            p_next: ::core::ptr::null_mut(),
54537            cooperative_matrix_supported_stages: ShaderStageFlags::default(),
54538            _marker: PhantomData,
54539        }
54540    }
54541}
54542unsafe impl<'a> TaggedStructure for PhysicalDeviceCooperativeMatrixPropertiesKHR<'a> {
54543    const STRUCTURE_TYPE: StructureType =
54544        StructureType::PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR;
54545}
54546unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceCooperativeMatrixPropertiesKHR<'_> {}
54547impl<'a> PhysicalDeviceCooperativeMatrixPropertiesKHR<'a> {
54548    #[inline]
54549    pub fn cooperative_matrix_supported_stages(
54550        mut self,
54551        cooperative_matrix_supported_stages: ShaderStageFlags,
54552    ) -> Self {
54553        self.cooperative_matrix_supported_stages = cooperative_matrix_supported_stages;
54554        self
54555    }
54556}
54557#[repr(C)]
54558#[cfg_attr(feature = "debug", derive(Debug))]
54559#[derive(Copy, Clone)]
54560#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderEnqueuePropertiesAMDX.html>"]
54561#[must_use]
54562pub struct PhysicalDeviceShaderEnqueuePropertiesAMDX<'a> {
54563    pub s_type: StructureType,
54564    pub p_next: *mut c_void,
54565    pub max_execution_graph_depth: u32,
54566    pub max_execution_graph_shader_output_nodes: u32,
54567    pub max_execution_graph_shader_payload_size: u32,
54568    pub max_execution_graph_shader_payload_count: u32,
54569    pub execution_graph_dispatch_address_alignment: u32,
54570    pub _marker: PhantomData<&'a ()>,
54571}
54572unsafe impl Send for PhysicalDeviceShaderEnqueuePropertiesAMDX<'_> {}
54573unsafe impl Sync for PhysicalDeviceShaderEnqueuePropertiesAMDX<'_> {}
54574impl ::core::default::Default for PhysicalDeviceShaderEnqueuePropertiesAMDX<'_> {
54575    #[inline]
54576    fn default() -> Self {
54577        Self {
54578            s_type: Self::STRUCTURE_TYPE,
54579            p_next: ::core::ptr::null_mut(),
54580            max_execution_graph_depth: u32::default(),
54581            max_execution_graph_shader_output_nodes: u32::default(),
54582            max_execution_graph_shader_payload_size: u32::default(),
54583            max_execution_graph_shader_payload_count: u32::default(),
54584            execution_graph_dispatch_address_alignment: u32::default(),
54585            _marker: PhantomData,
54586        }
54587    }
54588}
54589unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderEnqueuePropertiesAMDX<'a> {
54590    const STRUCTURE_TYPE: StructureType =
54591        StructureType::PHYSICAL_DEVICE_SHADER_ENQUEUE_PROPERTIES_AMDX;
54592}
54593unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceShaderEnqueuePropertiesAMDX<'_> {}
54594impl<'a> PhysicalDeviceShaderEnqueuePropertiesAMDX<'a> {
54595    #[inline]
54596    pub fn max_execution_graph_depth(mut self, max_execution_graph_depth: u32) -> Self {
54597        self.max_execution_graph_depth = max_execution_graph_depth;
54598        self
54599    }
54600    #[inline]
54601    pub fn max_execution_graph_shader_output_nodes(
54602        mut self,
54603        max_execution_graph_shader_output_nodes: u32,
54604    ) -> Self {
54605        self.max_execution_graph_shader_output_nodes = max_execution_graph_shader_output_nodes;
54606        self
54607    }
54608    #[inline]
54609    pub fn max_execution_graph_shader_payload_size(
54610        mut self,
54611        max_execution_graph_shader_payload_size: u32,
54612    ) -> Self {
54613        self.max_execution_graph_shader_payload_size = max_execution_graph_shader_payload_size;
54614        self
54615    }
54616    #[inline]
54617    pub fn max_execution_graph_shader_payload_count(
54618        mut self,
54619        max_execution_graph_shader_payload_count: u32,
54620    ) -> Self {
54621        self.max_execution_graph_shader_payload_count = max_execution_graph_shader_payload_count;
54622        self
54623    }
54624    #[inline]
54625    pub fn execution_graph_dispatch_address_alignment(
54626        mut self,
54627        execution_graph_dispatch_address_alignment: u32,
54628    ) -> Self {
54629        self.execution_graph_dispatch_address_alignment =
54630            execution_graph_dispatch_address_alignment;
54631        self
54632    }
54633}
54634#[repr(C)]
54635#[cfg_attr(feature = "debug", derive(Debug))]
54636#[derive(Copy, Clone)]
54637#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderEnqueueFeaturesAMDX.html>"]
54638#[must_use]
54639pub struct PhysicalDeviceShaderEnqueueFeaturesAMDX<'a> {
54640    pub s_type: StructureType,
54641    pub p_next: *mut c_void,
54642    pub shader_enqueue: Bool32,
54643    pub _marker: PhantomData<&'a ()>,
54644}
54645unsafe impl Send for PhysicalDeviceShaderEnqueueFeaturesAMDX<'_> {}
54646unsafe impl Sync for PhysicalDeviceShaderEnqueueFeaturesAMDX<'_> {}
54647impl ::core::default::Default for PhysicalDeviceShaderEnqueueFeaturesAMDX<'_> {
54648    #[inline]
54649    fn default() -> Self {
54650        Self {
54651            s_type: Self::STRUCTURE_TYPE,
54652            p_next: ::core::ptr::null_mut(),
54653            shader_enqueue: Bool32::default(),
54654            _marker: PhantomData,
54655        }
54656    }
54657}
54658unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderEnqueueFeaturesAMDX<'a> {
54659    const STRUCTURE_TYPE: StructureType =
54660        StructureType::PHYSICAL_DEVICE_SHADER_ENQUEUE_FEATURES_AMDX;
54661}
54662unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderEnqueueFeaturesAMDX<'_> {}
54663unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderEnqueueFeaturesAMDX<'_> {}
54664impl<'a> PhysicalDeviceShaderEnqueueFeaturesAMDX<'a> {
54665    #[inline]
54666    pub fn shader_enqueue(mut self, shader_enqueue: bool) -> Self {
54667        self.shader_enqueue = shader_enqueue.into();
54668        self
54669    }
54670}
54671#[repr(C)]
54672#[cfg_attr(feature = "debug", derive(Debug))]
54673#[derive(Copy, Clone)]
54674#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExecutionGraphPipelineCreateInfoAMDX.html>"]
54675#[must_use]
54676pub struct ExecutionGraphPipelineCreateInfoAMDX<'a> {
54677    pub s_type: StructureType,
54678    pub p_next: *const c_void,
54679    pub flags: PipelineCreateFlags,
54680    pub stage_count: u32,
54681    pub p_stages: *const PipelineShaderStageCreateInfo<'a>,
54682    pub p_library_info: *const PipelineLibraryCreateInfoKHR<'a>,
54683    pub layout: PipelineLayout,
54684    pub base_pipeline_handle: Pipeline,
54685    pub base_pipeline_index: i32,
54686    pub _marker: PhantomData<&'a ()>,
54687}
54688unsafe impl Send for ExecutionGraphPipelineCreateInfoAMDX<'_> {}
54689unsafe impl Sync for ExecutionGraphPipelineCreateInfoAMDX<'_> {}
54690impl ::core::default::Default for ExecutionGraphPipelineCreateInfoAMDX<'_> {
54691    #[inline]
54692    fn default() -> Self {
54693        Self {
54694            s_type: Self::STRUCTURE_TYPE,
54695            p_next: ::core::ptr::null(),
54696            flags: PipelineCreateFlags::default(),
54697            stage_count: u32::default(),
54698            p_stages: ::core::ptr::null(),
54699            p_library_info: ::core::ptr::null(),
54700            layout: PipelineLayout::default(),
54701            base_pipeline_handle: Pipeline::default(),
54702            base_pipeline_index: i32::default(),
54703            _marker: PhantomData,
54704        }
54705    }
54706}
54707unsafe impl<'a> TaggedStructure for ExecutionGraphPipelineCreateInfoAMDX<'a> {
54708    const STRUCTURE_TYPE: StructureType = StructureType::EXECUTION_GRAPH_PIPELINE_CREATE_INFO_AMDX;
54709}
54710pub unsafe trait ExtendsExecutionGraphPipelineCreateInfoAMDX {}
54711impl<'a> ExecutionGraphPipelineCreateInfoAMDX<'a> {
54712    #[inline]
54713    pub fn flags(mut self, flags: PipelineCreateFlags) -> Self {
54714        self.flags = flags;
54715        self
54716    }
54717    #[inline]
54718    pub fn stages(mut self, stages: &'a [PipelineShaderStageCreateInfo<'a>]) -> Self {
54719        self.stage_count = stages.len() as _;
54720        self.p_stages = stages.as_ptr();
54721        self
54722    }
54723    #[inline]
54724    pub fn library_info(mut self, library_info: &'a PipelineLibraryCreateInfoKHR<'a>) -> Self {
54725        self.p_library_info = library_info;
54726        self
54727    }
54728    #[inline]
54729    pub fn layout(mut self, layout: PipelineLayout) -> Self {
54730        self.layout = layout;
54731        self
54732    }
54733    #[inline]
54734    pub fn base_pipeline_handle(mut self, base_pipeline_handle: Pipeline) -> Self {
54735        self.base_pipeline_handle = base_pipeline_handle;
54736        self
54737    }
54738    #[inline]
54739    pub fn base_pipeline_index(mut self, base_pipeline_index: i32) -> Self {
54740        self.base_pipeline_index = base_pipeline_index;
54741        self
54742    }
54743    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
54744    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
54745    #[doc = r" valid extension structs can be pushed into the chain."]
54746    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
54747    #[doc = r" chain will look like `A -> D -> B -> C`."]
54748    pub fn push_next<T: ExtendsExecutionGraphPipelineCreateInfoAMDX + ?Sized>(
54749        mut self,
54750        next: &'a mut T,
54751    ) -> Self {
54752        unsafe {
54753            let next_ptr = <*const T>::cast(next);
54754            let last_next = ptr_chain_iter(next).last().unwrap();
54755            (*last_next).p_next = self.p_next as _;
54756            self.p_next = next_ptr;
54757        }
54758        self
54759    }
54760}
54761#[repr(C)]
54762#[cfg_attr(feature = "debug", derive(Debug))]
54763#[derive(Copy, Clone)]
54764#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPipelineShaderStageNodeCreateInfoAMDX.html>"]
54765#[must_use]
54766pub struct PipelineShaderStageNodeCreateInfoAMDX<'a> {
54767    pub s_type: StructureType,
54768    pub p_next: *const c_void,
54769    pub p_name: *const c_char,
54770    pub index: u32,
54771    pub _marker: PhantomData<&'a ()>,
54772}
54773unsafe impl Send for PipelineShaderStageNodeCreateInfoAMDX<'_> {}
54774unsafe impl Sync for PipelineShaderStageNodeCreateInfoAMDX<'_> {}
54775impl ::core::default::Default for PipelineShaderStageNodeCreateInfoAMDX<'_> {
54776    #[inline]
54777    fn default() -> Self {
54778        Self {
54779            s_type: Self::STRUCTURE_TYPE,
54780            p_next: ::core::ptr::null(),
54781            p_name: ::core::ptr::null(),
54782            index: u32::default(),
54783            _marker: PhantomData,
54784        }
54785    }
54786}
54787unsafe impl<'a> TaggedStructure for PipelineShaderStageNodeCreateInfoAMDX<'a> {
54788    const STRUCTURE_TYPE: StructureType =
54789        StructureType::PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX;
54790}
54791unsafe impl ExtendsPipelineShaderStageCreateInfo for PipelineShaderStageNodeCreateInfoAMDX<'_> {}
54792impl<'a> PipelineShaderStageNodeCreateInfoAMDX<'a> {
54793    #[inline]
54794    pub fn name(mut self, name: &'a CStr) -> Self {
54795        self.p_name = name.as_ptr();
54796        self
54797    }
54798    #[inline]
54799    pub unsafe fn name_as_c_str(&self) -> Option<&CStr> {
54800        if self.p_name.is_null() {
54801            None
54802        } else {
54803            Some(CStr::from_ptr(self.p_name))
54804        }
54805    }
54806    #[inline]
54807    pub fn index(mut self, index: u32) -> Self {
54808        self.index = index;
54809        self
54810    }
54811}
54812#[repr(C)]
54813#[cfg_attr(feature = "debug", derive(Debug))]
54814#[derive(Copy, Clone)]
54815#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkExecutionGraphPipelineScratchSizeAMDX.html>"]
54816#[must_use]
54817pub struct ExecutionGraphPipelineScratchSizeAMDX<'a> {
54818    pub s_type: StructureType,
54819    pub p_next: *mut c_void,
54820    pub size: DeviceSize,
54821    pub _marker: PhantomData<&'a ()>,
54822}
54823unsafe impl Send for ExecutionGraphPipelineScratchSizeAMDX<'_> {}
54824unsafe impl Sync for ExecutionGraphPipelineScratchSizeAMDX<'_> {}
54825impl ::core::default::Default for ExecutionGraphPipelineScratchSizeAMDX<'_> {
54826    #[inline]
54827    fn default() -> Self {
54828        Self {
54829            s_type: Self::STRUCTURE_TYPE,
54830            p_next: ::core::ptr::null_mut(),
54831            size: DeviceSize::default(),
54832            _marker: PhantomData,
54833        }
54834    }
54835}
54836unsafe impl<'a> TaggedStructure for ExecutionGraphPipelineScratchSizeAMDX<'a> {
54837    const STRUCTURE_TYPE: StructureType = StructureType::EXECUTION_GRAPH_PIPELINE_SCRATCH_SIZE_AMDX;
54838}
54839impl<'a> ExecutionGraphPipelineScratchSizeAMDX<'a> {
54840    #[inline]
54841    pub fn size(mut self, size: DeviceSize) -> Self {
54842        self.size = size;
54843        self
54844    }
54845}
54846#[repr(C)]
54847#[derive(Copy, Clone, Default)]
54848#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDispatchGraphInfoAMDX.html>"]
54849#[must_use]
54850pub struct DispatchGraphInfoAMDX {
54851    pub node_index: u32,
54852    pub payload_count: u32,
54853    pub payloads: DeviceOrHostAddressConstAMDX,
54854    pub payload_stride: u64,
54855}
54856#[cfg(feature = "debug")]
54857impl fmt::Debug for DispatchGraphInfoAMDX {
54858    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
54859        fmt.debug_struct("DispatchGraphInfoAMDX")
54860            .field("node_index", &self.node_index)
54861            .field("payload_count", &self.payload_count)
54862            .field("payloads", &"union")
54863            .field("payload_stride", &self.payload_stride)
54864            .finish()
54865    }
54866}
54867impl DispatchGraphInfoAMDX {
54868    #[inline]
54869    pub fn node_index(mut self, node_index: u32) -> Self {
54870        self.node_index = node_index;
54871        self
54872    }
54873    #[inline]
54874    pub fn payload_count(mut self, payload_count: u32) -> Self {
54875        self.payload_count = payload_count;
54876        self
54877    }
54878    #[inline]
54879    pub fn payloads(mut self, payloads: DeviceOrHostAddressConstAMDX) -> Self {
54880        self.payloads = payloads;
54881        self
54882    }
54883    #[inline]
54884    pub fn payload_stride(mut self, payload_stride: u64) -> Self {
54885        self.payload_stride = payload_stride;
54886        self
54887    }
54888}
54889#[repr(C)]
54890#[derive(Copy, Clone, Default)]
54891#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDispatchGraphCountInfoAMDX.html>"]
54892#[must_use]
54893pub struct DispatchGraphCountInfoAMDX {
54894    pub count: u32,
54895    pub infos: DeviceOrHostAddressConstAMDX,
54896    pub stride: u64,
54897}
54898#[cfg(feature = "debug")]
54899impl fmt::Debug for DispatchGraphCountInfoAMDX {
54900    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
54901        fmt.debug_struct("DispatchGraphCountInfoAMDX")
54902            .field("count", &self.count)
54903            .field("infos", &"union")
54904            .field("stride", &self.stride)
54905            .finish()
54906    }
54907}
54908impl DispatchGraphCountInfoAMDX {
54909    #[inline]
54910    pub fn count(mut self, count: u32) -> Self {
54911        self.count = count;
54912        self
54913    }
54914    #[inline]
54915    pub fn infos(mut self, infos: DeviceOrHostAddressConstAMDX) -> Self {
54916        self.infos = infos;
54917        self
54918    }
54919    #[inline]
54920    pub fn stride(mut self, stride: u64) -> Self {
54921        self.stride = stride;
54922        self
54923    }
54924}
54925#[repr(C)]
54926#[cfg_attr(feature = "debug", derive(Debug))]
54927#[derive(Copy, Clone)]
54928#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindMemoryStatusKHR.html>"]
54929#[must_use]
54930pub struct BindMemoryStatusKHR<'a> {
54931    pub s_type: StructureType,
54932    pub p_next: *const c_void,
54933    pub p_result: *mut Result,
54934    pub _marker: PhantomData<&'a ()>,
54935}
54936unsafe impl Send for BindMemoryStatusKHR<'_> {}
54937unsafe impl Sync for BindMemoryStatusKHR<'_> {}
54938impl ::core::default::Default for BindMemoryStatusKHR<'_> {
54939    #[inline]
54940    fn default() -> Self {
54941        Self {
54942            s_type: Self::STRUCTURE_TYPE,
54943            p_next: ::core::ptr::null(),
54944            p_result: ::core::ptr::null_mut(),
54945            _marker: PhantomData,
54946        }
54947    }
54948}
54949unsafe impl<'a> TaggedStructure for BindMemoryStatusKHR<'a> {
54950    const STRUCTURE_TYPE: StructureType = StructureType::BIND_MEMORY_STATUS_KHR;
54951}
54952unsafe impl ExtendsBindBufferMemoryInfo for BindMemoryStatusKHR<'_> {}
54953unsafe impl ExtendsBindImageMemoryInfo for BindMemoryStatusKHR<'_> {}
54954impl<'a> BindMemoryStatusKHR<'a> {
54955    #[inline]
54956    pub fn result(mut self, result: &'a mut Result) -> Self {
54957        self.p_result = result;
54958        self
54959    }
54960}
54961#[repr(C)]
54962#[cfg_attr(feature = "debug", derive(Debug))]
54963#[derive(Copy, Clone)]
54964#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindDescriptorSetsInfoKHR.html>"]
54965#[must_use]
54966pub struct BindDescriptorSetsInfoKHR<'a> {
54967    pub s_type: StructureType,
54968    pub p_next: *const c_void,
54969    pub stage_flags: ShaderStageFlags,
54970    pub layout: PipelineLayout,
54971    pub first_set: u32,
54972    pub descriptor_set_count: u32,
54973    pub p_descriptor_sets: *const DescriptorSet,
54974    pub dynamic_offset_count: u32,
54975    pub p_dynamic_offsets: *const u32,
54976    pub _marker: PhantomData<&'a ()>,
54977}
54978unsafe impl Send for BindDescriptorSetsInfoKHR<'_> {}
54979unsafe impl Sync for BindDescriptorSetsInfoKHR<'_> {}
54980impl ::core::default::Default for BindDescriptorSetsInfoKHR<'_> {
54981    #[inline]
54982    fn default() -> Self {
54983        Self {
54984            s_type: Self::STRUCTURE_TYPE,
54985            p_next: ::core::ptr::null(),
54986            stage_flags: ShaderStageFlags::default(),
54987            layout: PipelineLayout::default(),
54988            first_set: u32::default(),
54989            descriptor_set_count: u32::default(),
54990            p_descriptor_sets: ::core::ptr::null(),
54991            dynamic_offset_count: u32::default(),
54992            p_dynamic_offsets: ::core::ptr::null(),
54993            _marker: PhantomData,
54994        }
54995    }
54996}
54997unsafe impl<'a> TaggedStructure for BindDescriptorSetsInfoKHR<'a> {
54998    const STRUCTURE_TYPE: StructureType = StructureType::BIND_DESCRIPTOR_SETS_INFO_KHR;
54999}
55000pub unsafe trait ExtendsBindDescriptorSetsInfoKHR {}
55001impl<'a> BindDescriptorSetsInfoKHR<'a> {
55002    #[inline]
55003    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
55004        self.stage_flags = stage_flags;
55005        self
55006    }
55007    #[inline]
55008    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55009        self.layout = layout;
55010        self
55011    }
55012    #[inline]
55013    pub fn first_set(mut self, first_set: u32) -> Self {
55014        self.first_set = first_set;
55015        self
55016    }
55017    #[inline]
55018    pub fn descriptor_sets(mut self, descriptor_sets: &'a [DescriptorSet]) -> Self {
55019        self.descriptor_set_count = descriptor_sets.len() as _;
55020        self.p_descriptor_sets = descriptor_sets.as_ptr();
55021        self
55022    }
55023    #[inline]
55024    pub fn dynamic_offsets(mut self, dynamic_offsets: &'a [u32]) -> Self {
55025        self.dynamic_offset_count = dynamic_offsets.len() as _;
55026        self.p_dynamic_offsets = dynamic_offsets.as_ptr();
55027        self
55028    }
55029    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55030    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55031    #[doc = r" valid extension structs can be pushed into the chain."]
55032    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55033    #[doc = r" chain will look like `A -> D -> B -> C`."]
55034    pub fn push_next<T: ExtendsBindDescriptorSetsInfoKHR + ?Sized>(
55035        mut self,
55036        next: &'a mut T,
55037    ) -> Self {
55038        unsafe {
55039            let next_ptr = <*const T>::cast(next);
55040            let last_next = ptr_chain_iter(next).last().unwrap();
55041            (*last_next).p_next = self.p_next as _;
55042            self.p_next = next_ptr;
55043        }
55044        self
55045    }
55046}
55047#[repr(C)]
55048#[cfg_attr(feature = "debug", derive(Debug))]
55049#[derive(Copy, Clone)]
55050#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPushConstantsInfoKHR.html>"]
55051#[must_use]
55052pub struct PushConstantsInfoKHR<'a> {
55053    pub s_type: StructureType,
55054    pub p_next: *const c_void,
55055    pub layout: PipelineLayout,
55056    pub stage_flags: ShaderStageFlags,
55057    pub offset: u32,
55058    pub size: u32,
55059    pub p_values: *const c_void,
55060    pub _marker: PhantomData<&'a ()>,
55061}
55062unsafe impl Send for PushConstantsInfoKHR<'_> {}
55063unsafe impl Sync for PushConstantsInfoKHR<'_> {}
55064impl ::core::default::Default for PushConstantsInfoKHR<'_> {
55065    #[inline]
55066    fn default() -> Self {
55067        Self {
55068            s_type: Self::STRUCTURE_TYPE,
55069            p_next: ::core::ptr::null(),
55070            layout: PipelineLayout::default(),
55071            stage_flags: ShaderStageFlags::default(),
55072            offset: u32::default(),
55073            size: u32::default(),
55074            p_values: ::core::ptr::null(),
55075            _marker: PhantomData,
55076        }
55077    }
55078}
55079unsafe impl<'a> TaggedStructure for PushConstantsInfoKHR<'a> {
55080    const STRUCTURE_TYPE: StructureType = StructureType::PUSH_CONSTANTS_INFO_KHR;
55081}
55082pub unsafe trait ExtendsPushConstantsInfoKHR {}
55083impl<'a> PushConstantsInfoKHR<'a> {
55084    #[inline]
55085    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55086        self.layout = layout;
55087        self
55088    }
55089    #[inline]
55090    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
55091        self.stage_flags = stage_flags;
55092        self
55093    }
55094    #[inline]
55095    pub fn offset(mut self, offset: u32) -> Self {
55096        self.offset = offset;
55097        self
55098    }
55099    #[inline]
55100    pub fn values(mut self, values: &'a [u8]) -> Self {
55101        self.size = values.len() as _;
55102        self.p_values = values.as_ptr().cast();
55103        self
55104    }
55105    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55106    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55107    #[doc = r" valid extension structs can be pushed into the chain."]
55108    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55109    #[doc = r" chain will look like `A -> D -> B -> C`."]
55110    pub fn push_next<T: ExtendsPushConstantsInfoKHR + ?Sized>(mut self, next: &'a mut T) -> Self {
55111        unsafe {
55112            let next_ptr = <*const T>::cast(next);
55113            let last_next = ptr_chain_iter(next).last().unwrap();
55114            (*last_next).p_next = self.p_next as _;
55115            self.p_next = next_ptr;
55116        }
55117        self
55118    }
55119}
55120#[repr(C)]
55121#[cfg_attr(feature = "debug", derive(Debug))]
55122#[derive(Copy, Clone)]
55123#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPushDescriptorSetInfoKHR.html>"]
55124#[must_use]
55125pub struct PushDescriptorSetInfoKHR<'a> {
55126    pub s_type: StructureType,
55127    pub p_next: *const c_void,
55128    pub stage_flags: ShaderStageFlags,
55129    pub layout: PipelineLayout,
55130    pub set: u32,
55131    pub descriptor_write_count: u32,
55132    pub p_descriptor_writes: *const WriteDescriptorSet<'a>,
55133    pub _marker: PhantomData<&'a ()>,
55134}
55135unsafe impl Send for PushDescriptorSetInfoKHR<'_> {}
55136unsafe impl Sync for PushDescriptorSetInfoKHR<'_> {}
55137impl ::core::default::Default for PushDescriptorSetInfoKHR<'_> {
55138    #[inline]
55139    fn default() -> Self {
55140        Self {
55141            s_type: Self::STRUCTURE_TYPE,
55142            p_next: ::core::ptr::null(),
55143            stage_flags: ShaderStageFlags::default(),
55144            layout: PipelineLayout::default(),
55145            set: u32::default(),
55146            descriptor_write_count: u32::default(),
55147            p_descriptor_writes: ::core::ptr::null(),
55148            _marker: PhantomData,
55149        }
55150    }
55151}
55152unsafe impl<'a> TaggedStructure for PushDescriptorSetInfoKHR<'a> {
55153    const STRUCTURE_TYPE: StructureType = StructureType::PUSH_DESCRIPTOR_SET_INFO_KHR;
55154}
55155pub unsafe trait ExtendsPushDescriptorSetInfoKHR {}
55156impl<'a> PushDescriptorSetInfoKHR<'a> {
55157    #[inline]
55158    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
55159        self.stage_flags = stage_flags;
55160        self
55161    }
55162    #[inline]
55163    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55164        self.layout = layout;
55165        self
55166    }
55167    #[inline]
55168    pub fn set(mut self, set: u32) -> Self {
55169        self.set = set;
55170        self
55171    }
55172    #[inline]
55173    pub fn descriptor_writes(mut self, descriptor_writes: &'a [WriteDescriptorSet<'a>]) -> Self {
55174        self.descriptor_write_count = descriptor_writes.len() as _;
55175        self.p_descriptor_writes = descriptor_writes.as_ptr();
55176        self
55177    }
55178    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55179    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55180    #[doc = r" valid extension structs can be pushed into the chain."]
55181    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55182    #[doc = r" chain will look like `A -> D -> B -> C`."]
55183    pub fn push_next<T: ExtendsPushDescriptorSetInfoKHR + ?Sized>(
55184        mut self,
55185        next: &'a mut T,
55186    ) -> Self {
55187        unsafe {
55188            let next_ptr = <*const T>::cast(next);
55189            let last_next = ptr_chain_iter(next).last().unwrap();
55190            (*last_next).p_next = self.p_next as _;
55191            self.p_next = next_ptr;
55192        }
55193        self
55194    }
55195}
55196#[repr(C)]
55197#[cfg_attr(feature = "debug", derive(Debug))]
55198#[derive(Copy, Clone)]
55199#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPushDescriptorSetWithTemplateInfoKHR.html>"]
55200#[must_use]
55201pub struct PushDescriptorSetWithTemplateInfoKHR<'a> {
55202    pub s_type: StructureType,
55203    pub p_next: *const c_void,
55204    pub descriptor_update_template: DescriptorUpdateTemplate,
55205    pub layout: PipelineLayout,
55206    pub set: u32,
55207    pub p_data: *const c_void,
55208    pub _marker: PhantomData<&'a ()>,
55209}
55210unsafe impl Send for PushDescriptorSetWithTemplateInfoKHR<'_> {}
55211unsafe impl Sync for PushDescriptorSetWithTemplateInfoKHR<'_> {}
55212impl ::core::default::Default for PushDescriptorSetWithTemplateInfoKHR<'_> {
55213    #[inline]
55214    fn default() -> Self {
55215        Self {
55216            s_type: Self::STRUCTURE_TYPE,
55217            p_next: ::core::ptr::null(),
55218            descriptor_update_template: DescriptorUpdateTemplate::default(),
55219            layout: PipelineLayout::default(),
55220            set: u32::default(),
55221            p_data: ::core::ptr::null(),
55222            _marker: PhantomData,
55223        }
55224    }
55225}
55226unsafe impl<'a> TaggedStructure for PushDescriptorSetWithTemplateInfoKHR<'a> {
55227    const STRUCTURE_TYPE: StructureType = StructureType::PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR;
55228}
55229pub unsafe trait ExtendsPushDescriptorSetWithTemplateInfoKHR {}
55230impl<'a> PushDescriptorSetWithTemplateInfoKHR<'a> {
55231    #[inline]
55232    pub fn descriptor_update_template(
55233        mut self,
55234        descriptor_update_template: DescriptorUpdateTemplate,
55235    ) -> Self {
55236        self.descriptor_update_template = descriptor_update_template;
55237        self
55238    }
55239    #[inline]
55240    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55241        self.layout = layout;
55242        self
55243    }
55244    #[inline]
55245    pub fn set(mut self, set: u32) -> Self {
55246        self.set = set;
55247        self
55248    }
55249    #[inline]
55250    pub fn data(mut self, data: *const c_void) -> Self {
55251        self.p_data = data;
55252        self
55253    }
55254    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55255    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55256    #[doc = r" valid extension structs can be pushed into the chain."]
55257    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55258    #[doc = r" chain will look like `A -> D -> B -> C`."]
55259    pub fn push_next<T: ExtendsPushDescriptorSetWithTemplateInfoKHR + ?Sized>(
55260        mut self,
55261        next: &'a mut T,
55262    ) -> Self {
55263        unsafe {
55264            let next_ptr = <*const T>::cast(next);
55265            let last_next = ptr_chain_iter(next).last().unwrap();
55266            (*last_next).p_next = self.p_next as _;
55267            self.p_next = next_ptr;
55268        }
55269        self
55270    }
55271}
55272#[repr(C)]
55273#[cfg_attr(feature = "debug", derive(Debug))]
55274#[derive(Copy, Clone)]
55275#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSetDescriptorBufferOffsetsInfoEXT.html>"]
55276#[must_use]
55277pub struct SetDescriptorBufferOffsetsInfoEXT<'a> {
55278    pub s_type: StructureType,
55279    pub p_next: *const c_void,
55280    pub stage_flags: ShaderStageFlags,
55281    pub layout: PipelineLayout,
55282    pub first_set: u32,
55283    pub set_count: u32,
55284    pub p_buffer_indices: *const u32,
55285    pub p_offsets: *const DeviceSize,
55286    pub _marker: PhantomData<&'a ()>,
55287}
55288unsafe impl Send for SetDescriptorBufferOffsetsInfoEXT<'_> {}
55289unsafe impl Sync for SetDescriptorBufferOffsetsInfoEXT<'_> {}
55290impl ::core::default::Default for SetDescriptorBufferOffsetsInfoEXT<'_> {
55291    #[inline]
55292    fn default() -> Self {
55293        Self {
55294            s_type: Self::STRUCTURE_TYPE,
55295            p_next: ::core::ptr::null(),
55296            stage_flags: ShaderStageFlags::default(),
55297            layout: PipelineLayout::default(),
55298            first_set: u32::default(),
55299            set_count: u32::default(),
55300            p_buffer_indices: ::core::ptr::null(),
55301            p_offsets: ::core::ptr::null(),
55302            _marker: PhantomData,
55303        }
55304    }
55305}
55306unsafe impl<'a> TaggedStructure for SetDescriptorBufferOffsetsInfoEXT<'a> {
55307    const STRUCTURE_TYPE: StructureType = StructureType::SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT;
55308}
55309pub unsafe trait ExtendsSetDescriptorBufferOffsetsInfoEXT {}
55310impl<'a> SetDescriptorBufferOffsetsInfoEXT<'a> {
55311    #[inline]
55312    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
55313        self.stage_flags = stage_flags;
55314        self
55315    }
55316    #[inline]
55317    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55318        self.layout = layout;
55319        self
55320    }
55321    #[inline]
55322    pub fn first_set(mut self, first_set: u32) -> Self {
55323        self.first_set = first_set;
55324        self
55325    }
55326    #[inline]
55327    pub fn buffer_indices(mut self, buffer_indices: &'a [u32]) -> Self {
55328        self.set_count = buffer_indices.len() as _;
55329        self.p_buffer_indices = buffer_indices.as_ptr();
55330        self
55331    }
55332    #[inline]
55333    pub fn offsets(mut self, offsets: &'a [DeviceSize]) -> Self {
55334        self.set_count = offsets.len() as _;
55335        self.p_offsets = offsets.as_ptr();
55336        self
55337    }
55338    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55339    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55340    #[doc = r" valid extension structs can be pushed into the chain."]
55341    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55342    #[doc = r" chain will look like `A -> D -> B -> C`."]
55343    pub fn push_next<T: ExtendsSetDescriptorBufferOffsetsInfoEXT + ?Sized>(
55344        mut self,
55345        next: &'a mut T,
55346    ) -> Self {
55347        unsafe {
55348            let next_ptr = <*const T>::cast(next);
55349            let last_next = ptr_chain_iter(next).last().unwrap();
55350            (*last_next).p_next = self.p_next as _;
55351            self.p_next = next_ptr;
55352        }
55353        self
55354    }
55355}
55356#[repr(C)]
55357#[cfg_attr(feature = "debug", derive(Debug))]
55358#[derive(Copy, Clone)]
55359#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBindDescriptorBufferEmbeddedSamplersInfoEXT.html>"]
55360#[must_use]
55361pub struct BindDescriptorBufferEmbeddedSamplersInfoEXT<'a> {
55362    pub s_type: StructureType,
55363    pub p_next: *const c_void,
55364    pub stage_flags: ShaderStageFlags,
55365    pub layout: PipelineLayout,
55366    pub set: u32,
55367    pub _marker: PhantomData<&'a ()>,
55368}
55369unsafe impl Send for BindDescriptorBufferEmbeddedSamplersInfoEXT<'_> {}
55370unsafe impl Sync for BindDescriptorBufferEmbeddedSamplersInfoEXT<'_> {}
55371impl ::core::default::Default for BindDescriptorBufferEmbeddedSamplersInfoEXT<'_> {
55372    #[inline]
55373    fn default() -> Self {
55374        Self {
55375            s_type: Self::STRUCTURE_TYPE,
55376            p_next: ::core::ptr::null(),
55377            stage_flags: ShaderStageFlags::default(),
55378            layout: PipelineLayout::default(),
55379            set: u32::default(),
55380            _marker: PhantomData,
55381        }
55382    }
55383}
55384unsafe impl<'a> TaggedStructure for BindDescriptorBufferEmbeddedSamplersInfoEXT<'a> {
55385    const STRUCTURE_TYPE: StructureType =
55386        StructureType::BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT;
55387}
55388pub unsafe trait ExtendsBindDescriptorBufferEmbeddedSamplersInfoEXT {}
55389impl<'a> BindDescriptorBufferEmbeddedSamplersInfoEXT<'a> {
55390    #[inline]
55391    pub fn stage_flags(mut self, stage_flags: ShaderStageFlags) -> Self {
55392        self.stage_flags = stage_flags;
55393        self
55394    }
55395    #[inline]
55396    pub fn layout(mut self, layout: PipelineLayout) -> Self {
55397        self.layout = layout;
55398        self
55399    }
55400    #[inline]
55401    pub fn set(mut self, set: u32) -> Self {
55402        self.set = set;
55403        self
55404    }
55405    #[doc = r" Prepends the given extension struct between the root and the first pointer. This"]
55406    #[doc = r" method only exists on structs that can be passed to a function directly. Only"]
55407    #[doc = r" valid extension structs can be pushed into the chain."]
55408    #[doc = r" If the chain looks like `A -> B -> C`, and you call `x.push_next(&mut D)`, then the"]
55409    #[doc = r" chain will look like `A -> D -> B -> C`."]
55410    pub fn push_next<T: ExtendsBindDescriptorBufferEmbeddedSamplersInfoEXT + ?Sized>(
55411        mut self,
55412        next: &'a mut T,
55413    ) -> Self {
55414        unsafe {
55415            let next_ptr = <*const T>::cast(next);
55416            let last_next = ptr_chain_iter(next).last().unwrap();
55417            (*last_next).p_next = self.p_next as _;
55418            self.p_next = next_ptr;
55419        }
55420        self
55421    }
55422}
55423#[repr(C)]
55424#[cfg_attr(feature = "debug", derive(Debug))]
55425#[derive(Copy, Clone)]
55426#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCubicClampFeaturesQCOM.html>"]
55427#[must_use]
55428pub struct PhysicalDeviceCubicClampFeaturesQCOM<'a> {
55429    pub s_type: StructureType,
55430    pub p_next: *mut c_void,
55431    pub cubic_range_clamp: Bool32,
55432    pub _marker: PhantomData<&'a ()>,
55433}
55434unsafe impl Send for PhysicalDeviceCubicClampFeaturesQCOM<'_> {}
55435unsafe impl Sync for PhysicalDeviceCubicClampFeaturesQCOM<'_> {}
55436impl ::core::default::Default for PhysicalDeviceCubicClampFeaturesQCOM<'_> {
55437    #[inline]
55438    fn default() -> Self {
55439        Self {
55440            s_type: Self::STRUCTURE_TYPE,
55441            p_next: ::core::ptr::null_mut(),
55442            cubic_range_clamp: Bool32::default(),
55443            _marker: PhantomData,
55444        }
55445    }
55446}
55447unsafe impl<'a> TaggedStructure for PhysicalDeviceCubicClampFeaturesQCOM<'a> {
55448    const STRUCTURE_TYPE: StructureType = StructureType::PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM;
55449}
55450unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCubicClampFeaturesQCOM<'_> {}
55451unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCubicClampFeaturesQCOM<'_> {}
55452impl<'a> PhysicalDeviceCubicClampFeaturesQCOM<'a> {
55453    #[inline]
55454    pub fn cubic_range_clamp(mut self, cubic_range_clamp: bool) -> Self {
55455        self.cubic_range_clamp = cubic_range_clamp.into();
55456        self
55457    }
55458}
55459#[repr(C)]
55460#[cfg_attr(feature = "debug", derive(Debug))]
55461#[derive(Copy, Clone)]
55462#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceYcbcrDegammaFeaturesQCOM.html>"]
55463#[must_use]
55464pub struct PhysicalDeviceYcbcrDegammaFeaturesQCOM<'a> {
55465    pub s_type: StructureType,
55466    pub p_next: *mut c_void,
55467    pub ycbcr_degamma: Bool32,
55468    pub _marker: PhantomData<&'a ()>,
55469}
55470unsafe impl Send for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'_> {}
55471unsafe impl Sync for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'_> {}
55472impl ::core::default::Default for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'_> {
55473    #[inline]
55474    fn default() -> Self {
55475        Self {
55476            s_type: Self::STRUCTURE_TYPE,
55477            p_next: ::core::ptr::null_mut(),
55478            ycbcr_degamma: Bool32::default(),
55479            _marker: PhantomData,
55480        }
55481    }
55482}
55483unsafe impl<'a> TaggedStructure for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'a> {
55484    const STRUCTURE_TYPE: StructureType =
55485        StructureType::PHYSICAL_DEVICE_YCBCR_DEGAMMA_FEATURES_QCOM;
55486}
55487unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'_> {}
55488unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceYcbcrDegammaFeaturesQCOM<'_> {}
55489impl<'a> PhysicalDeviceYcbcrDegammaFeaturesQCOM<'a> {
55490    #[inline]
55491    pub fn ycbcr_degamma(mut self, ycbcr_degamma: bool) -> Self {
55492        self.ycbcr_degamma = ycbcr_degamma.into();
55493        self
55494    }
55495}
55496#[repr(C)]
55497#[cfg_attr(feature = "debug", derive(Debug))]
55498#[derive(Copy, Clone)]
55499#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM.html>"]
55500#[must_use]
55501pub struct SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'a> {
55502    pub s_type: StructureType,
55503    pub p_next: *mut c_void,
55504    pub enable_y_degamma: Bool32,
55505    pub enable_cb_cr_degamma: Bool32,
55506    pub _marker: PhantomData<&'a ()>,
55507}
55508unsafe impl Send for SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'_> {}
55509unsafe impl Sync for SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'_> {}
55510impl ::core::default::Default for SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'_> {
55511    #[inline]
55512    fn default() -> Self {
55513        Self {
55514            s_type: Self::STRUCTURE_TYPE,
55515            p_next: ::core::ptr::null_mut(),
55516            enable_y_degamma: Bool32::default(),
55517            enable_cb_cr_degamma: Bool32::default(),
55518            _marker: PhantomData,
55519        }
55520    }
55521}
55522unsafe impl<'a> TaggedStructure for SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'a> {
55523    const STRUCTURE_TYPE: StructureType =
55524        StructureType::SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM;
55525}
55526unsafe impl ExtendsSamplerYcbcrConversionCreateInfo
55527    for SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'_>
55528{
55529}
55530impl<'a> SamplerYcbcrConversionYcbcrDegammaCreateInfoQCOM<'a> {
55531    #[inline]
55532    pub fn enable_y_degamma(mut self, enable_y_degamma: bool) -> Self {
55533        self.enable_y_degamma = enable_y_degamma.into();
55534        self
55535    }
55536    #[inline]
55537    pub fn enable_cb_cr_degamma(mut self, enable_cb_cr_degamma: bool) -> Self {
55538        self.enable_cb_cr_degamma = enable_cb_cr_degamma.into();
55539        self
55540    }
55541}
55542#[repr(C)]
55543#[cfg_attr(feature = "debug", derive(Debug))]
55544#[derive(Copy, Clone)]
55545#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCubicWeightsFeaturesQCOM.html>"]
55546#[must_use]
55547pub struct PhysicalDeviceCubicWeightsFeaturesQCOM<'a> {
55548    pub s_type: StructureType,
55549    pub p_next: *mut c_void,
55550    pub selectable_cubic_weights: Bool32,
55551    pub _marker: PhantomData<&'a ()>,
55552}
55553unsafe impl Send for PhysicalDeviceCubicWeightsFeaturesQCOM<'_> {}
55554unsafe impl Sync for PhysicalDeviceCubicWeightsFeaturesQCOM<'_> {}
55555impl ::core::default::Default for PhysicalDeviceCubicWeightsFeaturesQCOM<'_> {
55556    #[inline]
55557    fn default() -> Self {
55558        Self {
55559            s_type: Self::STRUCTURE_TYPE,
55560            p_next: ::core::ptr::null_mut(),
55561            selectable_cubic_weights: Bool32::default(),
55562            _marker: PhantomData,
55563        }
55564    }
55565}
55566unsafe impl<'a> TaggedStructure for PhysicalDeviceCubicWeightsFeaturesQCOM<'a> {
55567    const STRUCTURE_TYPE: StructureType =
55568        StructureType::PHYSICAL_DEVICE_CUBIC_WEIGHTS_FEATURES_QCOM;
55569}
55570unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCubicWeightsFeaturesQCOM<'_> {}
55571unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCubicWeightsFeaturesQCOM<'_> {}
55572impl<'a> PhysicalDeviceCubicWeightsFeaturesQCOM<'a> {
55573    #[inline]
55574    pub fn selectable_cubic_weights(mut self, selectable_cubic_weights: bool) -> Self {
55575        self.selectable_cubic_weights = selectable_cubic_weights.into();
55576        self
55577    }
55578}
55579#[repr(C)]
55580#[cfg_attr(feature = "debug", derive(Debug))]
55581#[derive(Copy, Clone)]
55582#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerCubicWeightsCreateInfoQCOM.html>"]
55583#[must_use]
55584pub struct SamplerCubicWeightsCreateInfoQCOM<'a> {
55585    pub s_type: StructureType,
55586    pub p_next: *const c_void,
55587    pub cubic_weights: CubicFilterWeightsQCOM,
55588    pub _marker: PhantomData<&'a ()>,
55589}
55590unsafe impl Send for SamplerCubicWeightsCreateInfoQCOM<'_> {}
55591unsafe impl Sync for SamplerCubicWeightsCreateInfoQCOM<'_> {}
55592impl ::core::default::Default for SamplerCubicWeightsCreateInfoQCOM<'_> {
55593    #[inline]
55594    fn default() -> Self {
55595        Self {
55596            s_type: Self::STRUCTURE_TYPE,
55597            p_next: ::core::ptr::null(),
55598            cubic_weights: CubicFilterWeightsQCOM::default(),
55599            _marker: PhantomData,
55600        }
55601    }
55602}
55603unsafe impl<'a> TaggedStructure for SamplerCubicWeightsCreateInfoQCOM<'a> {
55604    const STRUCTURE_TYPE: StructureType = StructureType::SAMPLER_CUBIC_WEIGHTS_CREATE_INFO_QCOM;
55605}
55606unsafe impl ExtendsSamplerCreateInfo for SamplerCubicWeightsCreateInfoQCOM<'_> {}
55607impl<'a> SamplerCubicWeightsCreateInfoQCOM<'a> {
55608    #[inline]
55609    pub fn cubic_weights(mut self, cubic_weights: CubicFilterWeightsQCOM) -> Self {
55610        self.cubic_weights = cubic_weights;
55611        self
55612    }
55613}
55614#[repr(C)]
55615#[cfg_attr(feature = "debug", derive(Debug))]
55616#[derive(Copy, Clone)]
55617#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBlitImageCubicWeightsInfoQCOM.html>"]
55618#[must_use]
55619pub struct BlitImageCubicWeightsInfoQCOM<'a> {
55620    pub s_type: StructureType,
55621    pub p_next: *const c_void,
55622    pub cubic_weights: CubicFilterWeightsQCOM,
55623    pub _marker: PhantomData<&'a ()>,
55624}
55625unsafe impl Send for BlitImageCubicWeightsInfoQCOM<'_> {}
55626unsafe impl Sync for BlitImageCubicWeightsInfoQCOM<'_> {}
55627impl ::core::default::Default for BlitImageCubicWeightsInfoQCOM<'_> {
55628    #[inline]
55629    fn default() -> Self {
55630        Self {
55631            s_type: Self::STRUCTURE_TYPE,
55632            p_next: ::core::ptr::null(),
55633            cubic_weights: CubicFilterWeightsQCOM::default(),
55634            _marker: PhantomData,
55635        }
55636    }
55637}
55638unsafe impl<'a> TaggedStructure for BlitImageCubicWeightsInfoQCOM<'a> {
55639    const STRUCTURE_TYPE: StructureType = StructureType::BLIT_IMAGE_CUBIC_WEIGHTS_INFO_QCOM;
55640}
55641unsafe impl ExtendsBlitImageInfo2 for BlitImageCubicWeightsInfoQCOM<'_> {}
55642impl<'a> BlitImageCubicWeightsInfoQCOM<'a> {
55643    #[inline]
55644    pub fn cubic_weights(mut self, cubic_weights: CubicFilterWeightsQCOM) -> Self {
55645        self.cubic_weights = cubic_weights;
55646        self
55647    }
55648}
55649#[repr(C)]
55650#[cfg_attr(feature = "debug", derive(Debug))]
55651#[derive(Copy, Clone)]
55652#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageProcessing2FeaturesQCOM.html>"]
55653#[must_use]
55654pub struct PhysicalDeviceImageProcessing2FeaturesQCOM<'a> {
55655    pub s_type: StructureType,
55656    pub p_next: *mut c_void,
55657    pub texture_block_match2: Bool32,
55658    pub _marker: PhantomData<&'a ()>,
55659}
55660unsafe impl Send for PhysicalDeviceImageProcessing2FeaturesQCOM<'_> {}
55661unsafe impl Sync for PhysicalDeviceImageProcessing2FeaturesQCOM<'_> {}
55662impl ::core::default::Default for PhysicalDeviceImageProcessing2FeaturesQCOM<'_> {
55663    #[inline]
55664    fn default() -> Self {
55665        Self {
55666            s_type: Self::STRUCTURE_TYPE,
55667            p_next: ::core::ptr::null_mut(),
55668            texture_block_match2: Bool32::default(),
55669            _marker: PhantomData,
55670        }
55671    }
55672}
55673unsafe impl<'a> TaggedStructure for PhysicalDeviceImageProcessing2FeaturesQCOM<'a> {
55674    const STRUCTURE_TYPE: StructureType =
55675        StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM;
55676}
55677unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceImageProcessing2FeaturesQCOM<'_> {}
55678unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceImageProcessing2FeaturesQCOM<'_> {}
55679impl<'a> PhysicalDeviceImageProcessing2FeaturesQCOM<'a> {
55680    #[inline]
55681    pub fn texture_block_match2(mut self, texture_block_match2: bool) -> Self {
55682        self.texture_block_match2 = texture_block_match2.into();
55683        self
55684    }
55685}
55686#[repr(C)]
55687#[cfg_attr(feature = "debug", derive(Debug))]
55688#[derive(Copy, Clone)]
55689#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceImageProcessing2PropertiesQCOM.html>"]
55690#[must_use]
55691pub struct PhysicalDeviceImageProcessing2PropertiesQCOM<'a> {
55692    pub s_type: StructureType,
55693    pub p_next: *mut c_void,
55694    pub max_block_match_window: Extent2D,
55695    pub _marker: PhantomData<&'a ()>,
55696}
55697unsafe impl Send for PhysicalDeviceImageProcessing2PropertiesQCOM<'_> {}
55698unsafe impl Sync for PhysicalDeviceImageProcessing2PropertiesQCOM<'_> {}
55699impl ::core::default::Default for PhysicalDeviceImageProcessing2PropertiesQCOM<'_> {
55700    #[inline]
55701    fn default() -> Self {
55702        Self {
55703            s_type: Self::STRUCTURE_TYPE,
55704            p_next: ::core::ptr::null_mut(),
55705            max_block_match_window: Extent2D::default(),
55706            _marker: PhantomData,
55707        }
55708    }
55709}
55710unsafe impl<'a> TaggedStructure for PhysicalDeviceImageProcessing2PropertiesQCOM<'a> {
55711    const STRUCTURE_TYPE: StructureType =
55712        StructureType::PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM;
55713}
55714unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceImageProcessing2PropertiesQCOM<'_> {}
55715impl<'a> PhysicalDeviceImageProcessing2PropertiesQCOM<'a> {
55716    #[inline]
55717    pub fn max_block_match_window(mut self, max_block_match_window: Extent2D) -> Self {
55718        self.max_block_match_window = max_block_match_window;
55719        self
55720    }
55721}
55722#[repr(C)]
55723#[cfg_attr(feature = "debug", derive(Debug))]
55724#[derive(Copy, Clone)]
55725#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSamplerBlockMatchWindowCreateInfoQCOM.html>"]
55726#[must_use]
55727pub struct SamplerBlockMatchWindowCreateInfoQCOM<'a> {
55728    pub s_type: StructureType,
55729    pub p_next: *const c_void,
55730    pub window_extent: Extent2D,
55731    pub window_compare_mode: BlockMatchWindowCompareModeQCOM,
55732    pub _marker: PhantomData<&'a ()>,
55733}
55734unsafe impl Send for SamplerBlockMatchWindowCreateInfoQCOM<'_> {}
55735unsafe impl Sync for SamplerBlockMatchWindowCreateInfoQCOM<'_> {}
55736impl ::core::default::Default for SamplerBlockMatchWindowCreateInfoQCOM<'_> {
55737    #[inline]
55738    fn default() -> Self {
55739        Self {
55740            s_type: Self::STRUCTURE_TYPE,
55741            p_next: ::core::ptr::null(),
55742            window_extent: Extent2D::default(),
55743            window_compare_mode: BlockMatchWindowCompareModeQCOM::default(),
55744            _marker: PhantomData,
55745        }
55746    }
55747}
55748unsafe impl<'a> TaggedStructure for SamplerBlockMatchWindowCreateInfoQCOM<'a> {
55749    const STRUCTURE_TYPE: StructureType =
55750        StructureType::SAMPLER_BLOCK_MATCH_WINDOW_CREATE_INFO_QCOM;
55751}
55752unsafe impl ExtendsSamplerCreateInfo for SamplerBlockMatchWindowCreateInfoQCOM<'_> {}
55753impl<'a> SamplerBlockMatchWindowCreateInfoQCOM<'a> {
55754    #[inline]
55755    pub fn window_extent(mut self, window_extent: Extent2D) -> Self {
55756        self.window_extent = window_extent;
55757        self
55758    }
55759    #[inline]
55760    pub fn window_compare_mode(
55761        mut self,
55762        window_compare_mode: BlockMatchWindowCompareModeQCOM,
55763    ) -> Self {
55764        self.window_compare_mode = window_compare_mode;
55765        self
55766    }
55767}
55768#[repr(C)]
55769#[cfg_attr(feature = "debug", derive(Debug))]
55770#[derive(Copy, Clone)]
55771#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV.html>"]
55772#[must_use]
55773pub struct PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'a> {
55774    pub s_type: StructureType,
55775    pub p_next: *mut c_void,
55776    pub descriptor_pool_overallocation: Bool32,
55777    pub _marker: PhantomData<&'a ()>,
55778}
55779unsafe impl Send for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'_> {}
55780unsafe impl Sync for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'_> {}
55781impl ::core::default::Default for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'_> {
55782    #[inline]
55783    fn default() -> Self {
55784        Self {
55785            s_type: Self::STRUCTURE_TYPE,
55786            p_next: ::core::ptr::null_mut(),
55787            descriptor_pool_overallocation: Bool32::default(),
55788            _marker: PhantomData,
55789        }
55790    }
55791}
55792unsafe impl<'a> TaggedStructure for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'a> {
55793    const STRUCTURE_TYPE: StructureType =
55794        StructureType::PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV;
55795}
55796unsafe impl ExtendsPhysicalDeviceFeatures2
55797    for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'_>
55798{
55799}
55800unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'_> {}
55801impl<'a> PhysicalDeviceDescriptorPoolOverallocationFeaturesNV<'a> {
55802    #[inline]
55803    pub fn descriptor_pool_overallocation(mut self, descriptor_pool_overallocation: bool) -> Self {
55804        self.descriptor_pool_overallocation = descriptor_pool_overallocation.into();
55805        self
55806    }
55807}
55808#[repr(C)]
55809#[cfg_attr(feature = "debug", derive(Debug))]
55810#[derive(Copy, Clone)]
55811#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceLayeredDriverPropertiesMSFT.html>"]
55812#[must_use]
55813pub struct PhysicalDeviceLayeredDriverPropertiesMSFT<'a> {
55814    pub s_type: StructureType,
55815    pub p_next: *mut c_void,
55816    pub underlying_api: LayeredDriverUnderlyingApiMSFT,
55817    pub _marker: PhantomData<&'a ()>,
55818}
55819unsafe impl Send for PhysicalDeviceLayeredDriverPropertiesMSFT<'_> {}
55820unsafe impl Sync for PhysicalDeviceLayeredDriverPropertiesMSFT<'_> {}
55821impl ::core::default::Default for PhysicalDeviceLayeredDriverPropertiesMSFT<'_> {
55822    #[inline]
55823    fn default() -> Self {
55824        Self {
55825            s_type: Self::STRUCTURE_TYPE,
55826            p_next: ::core::ptr::null_mut(),
55827            underlying_api: LayeredDriverUnderlyingApiMSFT::default(),
55828            _marker: PhantomData,
55829        }
55830    }
55831}
55832unsafe impl<'a> TaggedStructure for PhysicalDeviceLayeredDriverPropertiesMSFT<'a> {
55833    const STRUCTURE_TYPE: StructureType =
55834        StructureType::PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT;
55835}
55836unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceLayeredDriverPropertiesMSFT<'_> {}
55837impl<'a> PhysicalDeviceLayeredDriverPropertiesMSFT<'a> {
55838    #[inline]
55839    pub fn underlying_api(mut self, underlying_api: LayeredDriverUnderlyingApiMSFT) -> Self {
55840        self.underlying_api = underlying_api;
55841        self
55842    }
55843}
55844#[repr(C)]
55845#[cfg_attr(feature = "debug", derive(Debug))]
55846#[derive(Copy, Clone)]
55847#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDevicePerStageDescriptorSetFeaturesNV.html>"]
55848#[must_use]
55849pub struct PhysicalDevicePerStageDescriptorSetFeaturesNV<'a> {
55850    pub s_type: StructureType,
55851    pub p_next: *mut c_void,
55852    pub per_stage_descriptor_set: Bool32,
55853    pub dynamic_pipeline_layout: Bool32,
55854    pub _marker: PhantomData<&'a ()>,
55855}
55856unsafe impl Send for PhysicalDevicePerStageDescriptorSetFeaturesNV<'_> {}
55857unsafe impl Sync for PhysicalDevicePerStageDescriptorSetFeaturesNV<'_> {}
55858impl ::core::default::Default for PhysicalDevicePerStageDescriptorSetFeaturesNV<'_> {
55859    #[inline]
55860    fn default() -> Self {
55861        Self {
55862            s_type: Self::STRUCTURE_TYPE,
55863            p_next: ::core::ptr::null_mut(),
55864            per_stage_descriptor_set: Bool32::default(),
55865            dynamic_pipeline_layout: Bool32::default(),
55866            _marker: PhantomData,
55867        }
55868    }
55869}
55870unsafe impl<'a> TaggedStructure for PhysicalDevicePerStageDescriptorSetFeaturesNV<'a> {
55871    const STRUCTURE_TYPE: StructureType =
55872        StructureType::PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV;
55873}
55874unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDevicePerStageDescriptorSetFeaturesNV<'_> {}
55875unsafe impl ExtendsDeviceCreateInfo for PhysicalDevicePerStageDescriptorSetFeaturesNV<'_> {}
55876impl<'a> PhysicalDevicePerStageDescriptorSetFeaturesNV<'a> {
55877    #[inline]
55878    pub fn per_stage_descriptor_set(mut self, per_stage_descriptor_set: bool) -> Self {
55879        self.per_stage_descriptor_set = per_stage_descriptor_set.into();
55880        self
55881    }
55882    #[inline]
55883    pub fn dynamic_pipeline_layout(mut self, dynamic_pipeline_layout: bool) -> Self {
55884        self.dynamic_pipeline_layout = dynamic_pipeline_layout.into();
55885        self
55886    }
55887}
55888#[repr(C)]
55889#[cfg_attr(feature = "debug", derive(Debug))]
55890#[derive(Copy, Clone)]
55891#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalFormatResolveFeaturesANDROID.html>"]
55892#[must_use]
55893pub struct PhysicalDeviceExternalFormatResolveFeaturesANDROID<'a> {
55894    pub s_type: StructureType,
55895    pub p_next: *mut c_void,
55896    pub external_format_resolve: Bool32,
55897    pub _marker: PhantomData<&'a ()>,
55898}
55899unsafe impl Send for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'_> {}
55900unsafe impl Sync for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'_> {}
55901impl ::core::default::Default for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'_> {
55902    #[inline]
55903    fn default() -> Self {
55904        Self {
55905            s_type: Self::STRUCTURE_TYPE,
55906            p_next: ::core::ptr::null_mut(),
55907            external_format_resolve: Bool32::default(),
55908            _marker: PhantomData,
55909        }
55910    }
55911}
55912unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'a> {
55913    const STRUCTURE_TYPE: StructureType =
55914        StructureType::PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID;
55915}
55916unsafe impl ExtendsPhysicalDeviceFeatures2
55917    for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'_>
55918{
55919}
55920unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceExternalFormatResolveFeaturesANDROID<'_> {}
55921impl<'a> PhysicalDeviceExternalFormatResolveFeaturesANDROID<'a> {
55922    #[inline]
55923    pub fn external_format_resolve(mut self, external_format_resolve: bool) -> Self {
55924        self.external_format_resolve = external_format_resolve.into();
55925        self
55926    }
55927}
55928#[repr(C)]
55929#[cfg_attr(feature = "debug", derive(Debug))]
55930#[derive(Copy, Clone)]
55931#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceExternalFormatResolvePropertiesANDROID.html>"]
55932#[must_use]
55933pub struct PhysicalDeviceExternalFormatResolvePropertiesANDROID<'a> {
55934    pub s_type: StructureType,
55935    pub p_next: *mut c_void,
55936    pub null_color_attachment_with_external_format_resolve: Bool32,
55937    pub external_format_resolve_chroma_offset_x: ChromaLocation,
55938    pub external_format_resolve_chroma_offset_y: ChromaLocation,
55939    pub _marker: PhantomData<&'a ()>,
55940}
55941unsafe impl Send for PhysicalDeviceExternalFormatResolvePropertiesANDROID<'_> {}
55942unsafe impl Sync for PhysicalDeviceExternalFormatResolvePropertiesANDROID<'_> {}
55943impl ::core::default::Default for PhysicalDeviceExternalFormatResolvePropertiesANDROID<'_> {
55944    #[inline]
55945    fn default() -> Self {
55946        Self {
55947            s_type: Self::STRUCTURE_TYPE,
55948            p_next: ::core::ptr::null_mut(),
55949            null_color_attachment_with_external_format_resolve: Bool32::default(),
55950            external_format_resolve_chroma_offset_x: ChromaLocation::default(),
55951            external_format_resolve_chroma_offset_y: ChromaLocation::default(),
55952            _marker: PhantomData,
55953        }
55954    }
55955}
55956unsafe impl<'a> TaggedStructure for PhysicalDeviceExternalFormatResolvePropertiesANDROID<'a> {
55957    const STRUCTURE_TYPE: StructureType =
55958        StructureType::PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID;
55959}
55960unsafe impl ExtendsPhysicalDeviceProperties2
55961    for PhysicalDeviceExternalFormatResolvePropertiesANDROID<'_>
55962{
55963}
55964impl<'a> PhysicalDeviceExternalFormatResolvePropertiesANDROID<'a> {
55965    #[inline]
55966    pub fn null_color_attachment_with_external_format_resolve(
55967        mut self,
55968        null_color_attachment_with_external_format_resolve: bool,
55969    ) -> Self {
55970        self.null_color_attachment_with_external_format_resolve =
55971            null_color_attachment_with_external_format_resolve.into();
55972        self
55973    }
55974    #[inline]
55975    pub fn external_format_resolve_chroma_offset_x(
55976        mut self,
55977        external_format_resolve_chroma_offset_x: ChromaLocation,
55978    ) -> Self {
55979        self.external_format_resolve_chroma_offset_x = external_format_resolve_chroma_offset_x;
55980        self
55981    }
55982    #[inline]
55983    pub fn external_format_resolve_chroma_offset_y(
55984        mut self,
55985        external_format_resolve_chroma_offset_y: ChromaLocation,
55986    ) -> Self {
55987        self.external_format_resolve_chroma_offset_y = external_format_resolve_chroma_offset_y;
55988        self
55989    }
55990}
55991#[repr(C)]
55992#[cfg_attr(feature = "debug", derive(Debug))]
55993#[derive(Copy, Clone)]
55994#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkAndroidHardwareBufferFormatResolvePropertiesANDROID.html>"]
55995#[must_use]
55996pub struct AndroidHardwareBufferFormatResolvePropertiesANDROID<'a> {
55997    pub s_type: StructureType,
55998    pub p_next: *mut c_void,
55999    pub color_attachment_format: Format,
56000    pub _marker: PhantomData<&'a ()>,
56001}
56002unsafe impl Send for AndroidHardwareBufferFormatResolvePropertiesANDROID<'_> {}
56003unsafe impl Sync for AndroidHardwareBufferFormatResolvePropertiesANDROID<'_> {}
56004impl ::core::default::Default for AndroidHardwareBufferFormatResolvePropertiesANDROID<'_> {
56005    #[inline]
56006    fn default() -> Self {
56007        Self {
56008            s_type: Self::STRUCTURE_TYPE,
56009            p_next: ::core::ptr::null_mut(),
56010            color_attachment_format: Format::default(),
56011            _marker: PhantomData,
56012        }
56013    }
56014}
56015unsafe impl<'a> TaggedStructure for AndroidHardwareBufferFormatResolvePropertiesANDROID<'a> {
56016    const STRUCTURE_TYPE: StructureType =
56017        StructureType::ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID;
56018}
56019unsafe impl ExtendsAndroidHardwareBufferPropertiesANDROID
56020    for AndroidHardwareBufferFormatResolvePropertiesANDROID<'_>
56021{
56022}
56023impl<'a> AndroidHardwareBufferFormatResolvePropertiesANDROID<'a> {
56024    #[inline]
56025    pub fn color_attachment_format(mut self, color_attachment_format: Format) -> Self {
56026        self.color_attachment_format = color_attachment_format;
56027        self
56028    }
56029}
56030#[repr(C)]
56031#[cfg_attr(feature = "debug", derive(Debug))]
56032#[derive(Copy, Clone)]
56033#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLatencySleepModeInfoNV.html>"]
56034#[must_use]
56035pub struct LatencySleepModeInfoNV<'a> {
56036    pub s_type: StructureType,
56037    pub p_next: *const c_void,
56038    pub low_latency_mode: Bool32,
56039    pub low_latency_boost: Bool32,
56040    pub minimum_interval_us: u32,
56041    pub _marker: PhantomData<&'a ()>,
56042}
56043unsafe impl Send for LatencySleepModeInfoNV<'_> {}
56044unsafe impl Sync for LatencySleepModeInfoNV<'_> {}
56045impl ::core::default::Default for LatencySleepModeInfoNV<'_> {
56046    #[inline]
56047    fn default() -> Self {
56048        Self {
56049            s_type: Self::STRUCTURE_TYPE,
56050            p_next: ::core::ptr::null(),
56051            low_latency_mode: Bool32::default(),
56052            low_latency_boost: Bool32::default(),
56053            minimum_interval_us: u32::default(),
56054            _marker: PhantomData,
56055        }
56056    }
56057}
56058unsafe impl<'a> TaggedStructure for LatencySleepModeInfoNV<'a> {
56059    const STRUCTURE_TYPE: StructureType = StructureType::LATENCY_SLEEP_MODE_INFO_NV;
56060}
56061impl<'a> LatencySleepModeInfoNV<'a> {
56062    #[inline]
56063    pub fn low_latency_mode(mut self, low_latency_mode: bool) -> Self {
56064        self.low_latency_mode = low_latency_mode.into();
56065        self
56066    }
56067    #[inline]
56068    pub fn low_latency_boost(mut self, low_latency_boost: bool) -> Self {
56069        self.low_latency_boost = low_latency_boost.into();
56070        self
56071    }
56072    #[inline]
56073    pub fn minimum_interval_us(mut self, minimum_interval_us: u32) -> Self {
56074        self.minimum_interval_us = minimum_interval_us;
56075        self
56076    }
56077}
56078#[repr(C)]
56079#[cfg_attr(feature = "debug", derive(Debug))]
56080#[derive(Copy, Clone)]
56081#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLatencySleepInfoNV.html>"]
56082#[must_use]
56083pub struct LatencySleepInfoNV<'a> {
56084    pub s_type: StructureType,
56085    pub p_next: *const c_void,
56086    pub signal_semaphore: Semaphore,
56087    pub value: u64,
56088    pub _marker: PhantomData<&'a ()>,
56089}
56090unsafe impl Send for LatencySleepInfoNV<'_> {}
56091unsafe impl Sync for LatencySleepInfoNV<'_> {}
56092impl ::core::default::Default for LatencySleepInfoNV<'_> {
56093    #[inline]
56094    fn default() -> Self {
56095        Self {
56096            s_type: Self::STRUCTURE_TYPE,
56097            p_next: ::core::ptr::null(),
56098            signal_semaphore: Semaphore::default(),
56099            value: u64::default(),
56100            _marker: PhantomData,
56101        }
56102    }
56103}
56104unsafe impl<'a> TaggedStructure for LatencySleepInfoNV<'a> {
56105    const STRUCTURE_TYPE: StructureType = StructureType::LATENCY_SLEEP_INFO_NV;
56106}
56107impl<'a> LatencySleepInfoNV<'a> {
56108    #[inline]
56109    pub fn signal_semaphore(mut self, signal_semaphore: Semaphore) -> Self {
56110        self.signal_semaphore = signal_semaphore;
56111        self
56112    }
56113    #[inline]
56114    pub fn value(mut self, value: u64) -> Self {
56115        self.value = value;
56116        self
56117    }
56118}
56119#[repr(C)]
56120#[cfg_attr(feature = "debug", derive(Debug))]
56121#[derive(Copy, Clone)]
56122#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSetLatencyMarkerInfoNV.html>"]
56123#[must_use]
56124pub struct SetLatencyMarkerInfoNV<'a> {
56125    pub s_type: StructureType,
56126    pub p_next: *const c_void,
56127    pub present_id: u64,
56128    pub marker: LatencyMarkerNV,
56129    pub _marker: PhantomData<&'a ()>,
56130}
56131unsafe impl Send for SetLatencyMarkerInfoNV<'_> {}
56132unsafe impl Sync for SetLatencyMarkerInfoNV<'_> {}
56133impl ::core::default::Default for SetLatencyMarkerInfoNV<'_> {
56134    #[inline]
56135    fn default() -> Self {
56136        Self {
56137            s_type: Self::STRUCTURE_TYPE,
56138            p_next: ::core::ptr::null(),
56139            present_id: u64::default(),
56140            marker: LatencyMarkerNV::default(),
56141            _marker: PhantomData,
56142        }
56143    }
56144}
56145unsafe impl<'a> TaggedStructure for SetLatencyMarkerInfoNV<'a> {
56146    const STRUCTURE_TYPE: StructureType = StructureType::SET_LATENCY_MARKER_INFO_NV;
56147}
56148impl<'a> SetLatencyMarkerInfoNV<'a> {
56149    #[inline]
56150    pub fn present_id(mut self, present_id: u64) -> Self {
56151        self.present_id = present_id;
56152        self
56153    }
56154    #[inline]
56155    pub fn marker(mut self, marker: LatencyMarkerNV) -> Self {
56156        self.marker = marker;
56157        self
56158    }
56159}
56160#[repr(C)]
56161#[cfg_attr(feature = "debug", derive(Debug))]
56162#[derive(Copy, Clone)]
56163#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkGetLatencyMarkerInfoNV.html>"]
56164#[must_use]
56165pub struct GetLatencyMarkerInfoNV<'a> {
56166    pub s_type: StructureType,
56167    pub p_next: *const c_void,
56168    pub timing_count: u32,
56169    pub p_timings: *mut LatencyTimingsFrameReportNV<'a>,
56170    pub _marker: PhantomData<&'a ()>,
56171}
56172unsafe impl Send for GetLatencyMarkerInfoNV<'_> {}
56173unsafe impl Sync for GetLatencyMarkerInfoNV<'_> {}
56174impl ::core::default::Default for GetLatencyMarkerInfoNV<'_> {
56175    #[inline]
56176    fn default() -> Self {
56177        Self {
56178            s_type: Self::STRUCTURE_TYPE,
56179            p_next: ::core::ptr::null(),
56180            timing_count: u32::default(),
56181            p_timings: ::core::ptr::null_mut(),
56182            _marker: PhantomData,
56183        }
56184    }
56185}
56186unsafe impl<'a> TaggedStructure for GetLatencyMarkerInfoNV<'a> {
56187    const STRUCTURE_TYPE: StructureType = StructureType::GET_LATENCY_MARKER_INFO_NV;
56188}
56189impl<'a> GetLatencyMarkerInfoNV<'a> {
56190    #[inline]
56191    pub fn timings(mut self, timings: &'a mut [LatencyTimingsFrameReportNV<'_>]) -> Self {
56192        self.timing_count = timings.len() as _;
56193        self.p_timings = timings.as_mut_ptr().cast();
56194        self
56195    }
56196}
56197#[repr(C)]
56198#[cfg_attr(feature = "debug", derive(Debug))]
56199#[derive(Copy, Clone)]
56200#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLatencyTimingsFrameReportNV.html>"]
56201#[must_use]
56202pub struct LatencyTimingsFrameReportNV<'a> {
56203    pub s_type: StructureType,
56204    pub p_next: *const c_void,
56205    pub present_id: u64,
56206    pub input_sample_time_us: u64,
56207    pub sim_start_time_us: u64,
56208    pub sim_end_time_us: u64,
56209    pub render_submit_start_time_us: u64,
56210    pub render_submit_end_time_us: u64,
56211    pub present_start_time_us: u64,
56212    pub present_end_time_us: u64,
56213    pub driver_start_time_us: u64,
56214    pub driver_end_time_us: u64,
56215    pub os_render_queue_start_time_us: u64,
56216    pub os_render_queue_end_time_us: u64,
56217    pub gpu_render_start_time_us: u64,
56218    pub gpu_render_end_time_us: u64,
56219    pub _marker: PhantomData<&'a ()>,
56220}
56221unsafe impl Send for LatencyTimingsFrameReportNV<'_> {}
56222unsafe impl Sync for LatencyTimingsFrameReportNV<'_> {}
56223impl ::core::default::Default for LatencyTimingsFrameReportNV<'_> {
56224    #[inline]
56225    fn default() -> Self {
56226        Self {
56227            s_type: Self::STRUCTURE_TYPE,
56228            p_next: ::core::ptr::null(),
56229            present_id: u64::default(),
56230            input_sample_time_us: u64::default(),
56231            sim_start_time_us: u64::default(),
56232            sim_end_time_us: u64::default(),
56233            render_submit_start_time_us: u64::default(),
56234            render_submit_end_time_us: u64::default(),
56235            present_start_time_us: u64::default(),
56236            present_end_time_us: u64::default(),
56237            driver_start_time_us: u64::default(),
56238            driver_end_time_us: u64::default(),
56239            os_render_queue_start_time_us: u64::default(),
56240            os_render_queue_end_time_us: u64::default(),
56241            gpu_render_start_time_us: u64::default(),
56242            gpu_render_end_time_us: u64::default(),
56243            _marker: PhantomData,
56244        }
56245    }
56246}
56247unsafe impl<'a> TaggedStructure for LatencyTimingsFrameReportNV<'a> {
56248    const STRUCTURE_TYPE: StructureType = StructureType::LATENCY_TIMINGS_FRAME_REPORT_NV;
56249}
56250impl<'a> LatencyTimingsFrameReportNV<'a> {
56251    #[inline]
56252    pub fn present_id(mut self, present_id: u64) -> Self {
56253        self.present_id = present_id;
56254        self
56255    }
56256    #[inline]
56257    pub fn input_sample_time_us(mut self, input_sample_time_us: u64) -> Self {
56258        self.input_sample_time_us = input_sample_time_us;
56259        self
56260    }
56261    #[inline]
56262    pub fn sim_start_time_us(mut self, sim_start_time_us: u64) -> Self {
56263        self.sim_start_time_us = sim_start_time_us;
56264        self
56265    }
56266    #[inline]
56267    pub fn sim_end_time_us(mut self, sim_end_time_us: u64) -> Self {
56268        self.sim_end_time_us = sim_end_time_us;
56269        self
56270    }
56271    #[inline]
56272    pub fn render_submit_start_time_us(mut self, render_submit_start_time_us: u64) -> Self {
56273        self.render_submit_start_time_us = render_submit_start_time_us;
56274        self
56275    }
56276    #[inline]
56277    pub fn render_submit_end_time_us(mut self, render_submit_end_time_us: u64) -> Self {
56278        self.render_submit_end_time_us = render_submit_end_time_us;
56279        self
56280    }
56281    #[inline]
56282    pub fn present_start_time_us(mut self, present_start_time_us: u64) -> Self {
56283        self.present_start_time_us = present_start_time_us;
56284        self
56285    }
56286    #[inline]
56287    pub fn present_end_time_us(mut self, present_end_time_us: u64) -> Self {
56288        self.present_end_time_us = present_end_time_us;
56289        self
56290    }
56291    #[inline]
56292    pub fn driver_start_time_us(mut self, driver_start_time_us: u64) -> Self {
56293        self.driver_start_time_us = driver_start_time_us;
56294        self
56295    }
56296    #[inline]
56297    pub fn driver_end_time_us(mut self, driver_end_time_us: u64) -> Self {
56298        self.driver_end_time_us = driver_end_time_us;
56299        self
56300    }
56301    #[inline]
56302    pub fn os_render_queue_start_time_us(mut self, os_render_queue_start_time_us: u64) -> Self {
56303        self.os_render_queue_start_time_us = os_render_queue_start_time_us;
56304        self
56305    }
56306    #[inline]
56307    pub fn os_render_queue_end_time_us(mut self, os_render_queue_end_time_us: u64) -> Self {
56308        self.os_render_queue_end_time_us = os_render_queue_end_time_us;
56309        self
56310    }
56311    #[inline]
56312    pub fn gpu_render_start_time_us(mut self, gpu_render_start_time_us: u64) -> Self {
56313        self.gpu_render_start_time_us = gpu_render_start_time_us;
56314        self
56315    }
56316    #[inline]
56317    pub fn gpu_render_end_time_us(mut self, gpu_render_end_time_us: u64) -> Self {
56318        self.gpu_render_end_time_us = gpu_render_end_time_us;
56319        self
56320    }
56321}
56322#[repr(C)]
56323#[cfg_attr(feature = "debug", derive(Debug))]
56324#[derive(Copy, Clone)]
56325#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkOutOfBandQueueTypeInfoNV.html>"]
56326#[must_use]
56327pub struct OutOfBandQueueTypeInfoNV<'a> {
56328    pub s_type: StructureType,
56329    pub p_next: *const c_void,
56330    pub queue_type: OutOfBandQueueTypeNV,
56331    pub _marker: PhantomData<&'a ()>,
56332}
56333unsafe impl Send for OutOfBandQueueTypeInfoNV<'_> {}
56334unsafe impl Sync for OutOfBandQueueTypeInfoNV<'_> {}
56335impl ::core::default::Default for OutOfBandQueueTypeInfoNV<'_> {
56336    #[inline]
56337    fn default() -> Self {
56338        Self {
56339            s_type: Self::STRUCTURE_TYPE,
56340            p_next: ::core::ptr::null(),
56341            queue_type: OutOfBandQueueTypeNV::default(),
56342            _marker: PhantomData,
56343        }
56344    }
56345}
56346unsafe impl<'a> TaggedStructure for OutOfBandQueueTypeInfoNV<'a> {
56347    const STRUCTURE_TYPE: StructureType = StructureType::OUT_OF_BAND_QUEUE_TYPE_INFO_NV;
56348}
56349impl<'a> OutOfBandQueueTypeInfoNV<'a> {
56350    #[inline]
56351    pub fn queue_type(mut self, queue_type: OutOfBandQueueTypeNV) -> Self {
56352        self.queue_type = queue_type;
56353        self
56354    }
56355}
56356#[repr(C)]
56357#[cfg_attr(feature = "debug", derive(Debug))]
56358#[derive(Copy, Clone)]
56359#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLatencySubmissionPresentIdNV.html>"]
56360#[must_use]
56361pub struct LatencySubmissionPresentIdNV<'a> {
56362    pub s_type: StructureType,
56363    pub p_next: *const c_void,
56364    pub present_id: u64,
56365    pub _marker: PhantomData<&'a ()>,
56366}
56367unsafe impl Send for LatencySubmissionPresentIdNV<'_> {}
56368unsafe impl Sync for LatencySubmissionPresentIdNV<'_> {}
56369impl ::core::default::Default for LatencySubmissionPresentIdNV<'_> {
56370    #[inline]
56371    fn default() -> Self {
56372        Self {
56373            s_type: Self::STRUCTURE_TYPE,
56374            p_next: ::core::ptr::null(),
56375            present_id: u64::default(),
56376            _marker: PhantomData,
56377        }
56378    }
56379}
56380unsafe impl<'a> TaggedStructure for LatencySubmissionPresentIdNV<'a> {
56381    const STRUCTURE_TYPE: StructureType = StructureType::LATENCY_SUBMISSION_PRESENT_ID_NV;
56382}
56383unsafe impl ExtendsSubmitInfo for LatencySubmissionPresentIdNV<'_> {}
56384unsafe impl ExtendsSubmitInfo2 for LatencySubmissionPresentIdNV<'_> {}
56385impl<'a> LatencySubmissionPresentIdNV<'a> {
56386    #[inline]
56387    pub fn present_id(mut self, present_id: u64) -> Self {
56388        self.present_id = present_id;
56389        self
56390    }
56391}
56392#[repr(C)]
56393#[cfg_attr(feature = "debug", derive(Debug))]
56394#[derive(Copy, Clone)]
56395#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSwapchainLatencyCreateInfoNV.html>"]
56396#[must_use]
56397pub struct SwapchainLatencyCreateInfoNV<'a> {
56398    pub s_type: StructureType,
56399    pub p_next: *const c_void,
56400    pub latency_mode_enable: Bool32,
56401    pub _marker: PhantomData<&'a ()>,
56402}
56403unsafe impl Send for SwapchainLatencyCreateInfoNV<'_> {}
56404unsafe impl Sync for SwapchainLatencyCreateInfoNV<'_> {}
56405impl ::core::default::Default for SwapchainLatencyCreateInfoNV<'_> {
56406    #[inline]
56407    fn default() -> Self {
56408        Self {
56409            s_type: Self::STRUCTURE_TYPE,
56410            p_next: ::core::ptr::null(),
56411            latency_mode_enable: Bool32::default(),
56412            _marker: PhantomData,
56413        }
56414    }
56415}
56416unsafe impl<'a> TaggedStructure for SwapchainLatencyCreateInfoNV<'a> {
56417    const STRUCTURE_TYPE: StructureType = StructureType::SWAPCHAIN_LATENCY_CREATE_INFO_NV;
56418}
56419unsafe impl ExtendsSwapchainCreateInfoKHR for SwapchainLatencyCreateInfoNV<'_> {}
56420impl<'a> SwapchainLatencyCreateInfoNV<'a> {
56421    #[inline]
56422    pub fn latency_mode_enable(mut self, latency_mode_enable: bool) -> Self {
56423        self.latency_mode_enable = latency_mode_enable.into();
56424        self
56425    }
56426}
56427#[repr(C)]
56428#[cfg_attr(feature = "debug", derive(Debug))]
56429#[derive(Copy, Clone)]
56430#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkLatencySurfaceCapabilitiesNV.html>"]
56431#[must_use]
56432pub struct LatencySurfaceCapabilitiesNV<'a> {
56433    pub s_type: StructureType,
56434    pub p_next: *const c_void,
56435    pub present_mode_count: u32,
56436    pub p_present_modes: *mut PresentModeKHR,
56437    pub _marker: PhantomData<&'a ()>,
56438}
56439unsafe impl Send for LatencySurfaceCapabilitiesNV<'_> {}
56440unsafe impl Sync for LatencySurfaceCapabilitiesNV<'_> {}
56441impl ::core::default::Default for LatencySurfaceCapabilitiesNV<'_> {
56442    #[inline]
56443    fn default() -> Self {
56444        Self {
56445            s_type: Self::STRUCTURE_TYPE,
56446            p_next: ::core::ptr::null(),
56447            present_mode_count: u32::default(),
56448            p_present_modes: ::core::ptr::null_mut(),
56449            _marker: PhantomData,
56450        }
56451    }
56452}
56453unsafe impl<'a> TaggedStructure for LatencySurfaceCapabilitiesNV<'a> {
56454    const STRUCTURE_TYPE: StructureType = StructureType::LATENCY_SURFACE_CAPABILITIES_NV;
56455}
56456unsafe impl ExtendsSurfaceCapabilities2KHR for LatencySurfaceCapabilitiesNV<'_> {}
56457impl<'a> LatencySurfaceCapabilitiesNV<'a> {
56458    #[inline]
56459    pub fn present_modes(mut self, present_modes: &'a mut [PresentModeKHR]) -> Self {
56460        self.present_mode_count = present_modes.len() as _;
56461        self.p_present_modes = present_modes.as_mut_ptr();
56462        self
56463    }
56464}
56465#[repr(C)]
56466#[cfg_attr(feature = "debug", derive(Debug))]
56467#[derive(Copy, Clone)]
56468#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCudaKernelLaunchFeaturesNV.html>"]
56469#[must_use]
56470pub struct PhysicalDeviceCudaKernelLaunchFeaturesNV<'a> {
56471    pub s_type: StructureType,
56472    pub p_next: *mut c_void,
56473    pub cuda_kernel_launch_features: Bool32,
56474    pub _marker: PhantomData<&'a ()>,
56475}
56476unsafe impl Send for PhysicalDeviceCudaKernelLaunchFeaturesNV<'_> {}
56477unsafe impl Sync for PhysicalDeviceCudaKernelLaunchFeaturesNV<'_> {}
56478impl ::core::default::Default for PhysicalDeviceCudaKernelLaunchFeaturesNV<'_> {
56479    #[inline]
56480    fn default() -> Self {
56481        Self {
56482            s_type: Self::STRUCTURE_TYPE,
56483            p_next: ::core::ptr::null_mut(),
56484            cuda_kernel_launch_features: Bool32::default(),
56485            _marker: PhantomData,
56486        }
56487    }
56488}
56489unsafe impl<'a> TaggedStructure for PhysicalDeviceCudaKernelLaunchFeaturesNV<'a> {
56490    const STRUCTURE_TYPE: StructureType =
56491        StructureType::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV;
56492}
56493unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceCudaKernelLaunchFeaturesNV<'_> {}
56494unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceCudaKernelLaunchFeaturesNV<'_> {}
56495impl<'a> PhysicalDeviceCudaKernelLaunchFeaturesNV<'a> {
56496    #[inline]
56497    pub fn cuda_kernel_launch_features(mut self, cuda_kernel_launch_features: bool) -> Self {
56498        self.cuda_kernel_launch_features = cuda_kernel_launch_features.into();
56499        self
56500    }
56501}
56502#[repr(C)]
56503#[cfg_attr(feature = "debug", derive(Debug))]
56504#[derive(Copy, Clone)]
56505#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCudaKernelLaunchPropertiesNV.html>"]
56506#[must_use]
56507pub struct PhysicalDeviceCudaKernelLaunchPropertiesNV<'a> {
56508    pub s_type: StructureType,
56509    pub p_next: *mut c_void,
56510    pub compute_capability_minor: u32,
56511    pub compute_capability_major: u32,
56512    pub _marker: PhantomData<&'a ()>,
56513}
56514unsafe impl Send for PhysicalDeviceCudaKernelLaunchPropertiesNV<'_> {}
56515unsafe impl Sync for PhysicalDeviceCudaKernelLaunchPropertiesNV<'_> {}
56516impl ::core::default::Default for PhysicalDeviceCudaKernelLaunchPropertiesNV<'_> {
56517    #[inline]
56518    fn default() -> Self {
56519        Self {
56520            s_type: Self::STRUCTURE_TYPE,
56521            p_next: ::core::ptr::null_mut(),
56522            compute_capability_minor: u32::default(),
56523            compute_capability_major: u32::default(),
56524            _marker: PhantomData,
56525        }
56526    }
56527}
56528unsafe impl<'a> TaggedStructure for PhysicalDeviceCudaKernelLaunchPropertiesNV<'a> {
56529    const STRUCTURE_TYPE: StructureType =
56530        StructureType::PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV;
56531}
56532unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceCudaKernelLaunchPropertiesNV<'_> {}
56533impl<'a> PhysicalDeviceCudaKernelLaunchPropertiesNV<'a> {
56534    #[inline]
56535    pub fn compute_capability_minor(mut self, compute_capability_minor: u32) -> Self {
56536        self.compute_capability_minor = compute_capability_minor;
56537        self
56538    }
56539    #[inline]
56540    pub fn compute_capability_major(mut self, compute_capability_major: u32) -> Self {
56541        self.compute_capability_major = compute_capability_major;
56542        self
56543    }
56544}
56545#[repr(C)]
56546#[cfg_attr(feature = "debug", derive(Debug))]
56547#[derive(Copy, Clone)]
56548#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceQueueShaderCoreControlCreateInfoARM.html>"]
56549#[must_use]
56550pub struct DeviceQueueShaderCoreControlCreateInfoARM<'a> {
56551    pub s_type: StructureType,
56552    pub p_next: *mut c_void,
56553    pub shader_core_count: u32,
56554    pub _marker: PhantomData<&'a ()>,
56555}
56556unsafe impl Send for DeviceQueueShaderCoreControlCreateInfoARM<'_> {}
56557unsafe impl Sync for DeviceQueueShaderCoreControlCreateInfoARM<'_> {}
56558impl ::core::default::Default for DeviceQueueShaderCoreControlCreateInfoARM<'_> {
56559    #[inline]
56560    fn default() -> Self {
56561        Self {
56562            s_type: Self::STRUCTURE_TYPE,
56563            p_next: ::core::ptr::null_mut(),
56564            shader_core_count: u32::default(),
56565            _marker: PhantomData,
56566        }
56567    }
56568}
56569unsafe impl<'a> TaggedStructure for DeviceQueueShaderCoreControlCreateInfoARM<'a> {
56570    const STRUCTURE_TYPE: StructureType =
56571        StructureType::DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM;
56572}
56573unsafe impl ExtendsDeviceQueueCreateInfo for DeviceQueueShaderCoreControlCreateInfoARM<'_> {}
56574unsafe impl ExtendsDeviceCreateInfo for DeviceQueueShaderCoreControlCreateInfoARM<'_> {}
56575impl<'a> DeviceQueueShaderCoreControlCreateInfoARM<'a> {
56576    #[inline]
56577    pub fn shader_core_count(mut self, shader_core_count: u32) -> Self {
56578        self.shader_core_count = shader_core_count;
56579        self
56580    }
56581}
56582#[repr(C)]
56583#[cfg_attr(feature = "debug", derive(Debug))]
56584#[derive(Copy, Clone)]
56585#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSchedulingControlsFeaturesARM.html>"]
56586#[must_use]
56587pub struct PhysicalDeviceSchedulingControlsFeaturesARM<'a> {
56588    pub s_type: StructureType,
56589    pub p_next: *mut c_void,
56590    pub scheduling_controls: Bool32,
56591    pub _marker: PhantomData<&'a ()>,
56592}
56593unsafe impl Send for PhysicalDeviceSchedulingControlsFeaturesARM<'_> {}
56594unsafe impl Sync for PhysicalDeviceSchedulingControlsFeaturesARM<'_> {}
56595impl ::core::default::Default for PhysicalDeviceSchedulingControlsFeaturesARM<'_> {
56596    #[inline]
56597    fn default() -> Self {
56598        Self {
56599            s_type: Self::STRUCTURE_TYPE,
56600            p_next: ::core::ptr::null_mut(),
56601            scheduling_controls: Bool32::default(),
56602            _marker: PhantomData,
56603        }
56604    }
56605}
56606unsafe impl<'a> TaggedStructure for PhysicalDeviceSchedulingControlsFeaturesARM<'a> {
56607    const STRUCTURE_TYPE: StructureType =
56608        StructureType::PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM;
56609}
56610unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceSchedulingControlsFeaturesARM<'_> {}
56611unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceSchedulingControlsFeaturesARM<'_> {}
56612impl<'a> PhysicalDeviceSchedulingControlsFeaturesARM<'a> {
56613    #[inline]
56614    pub fn scheduling_controls(mut self, scheduling_controls: bool) -> Self {
56615        self.scheduling_controls = scheduling_controls.into();
56616        self
56617    }
56618}
56619#[repr(C)]
56620#[cfg_attr(feature = "debug", derive(Debug))]
56621#[derive(Copy, Clone)]
56622#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceSchedulingControlsPropertiesARM.html>"]
56623#[must_use]
56624pub struct PhysicalDeviceSchedulingControlsPropertiesARM<'a> {
56625    pub s_type: StructureType,
56626    pub p_next: *mut c_void,
56627    pub scheduling_controls_flags: PhysicalDeviceSchedulingControlsFlagsARM,
56628    pub _marker: PhantomData<&'a ()>,
56629}
56630unsafe impl Send for PhysicalDeviceSchedulingControlsPropertiesARM<'_> {}
56631unsafe impl Sync for PhysicalDeviceSchedulingControlsPropertiesARM<'_> {}
56632impl ::core::default::Default for PhysicalDeviceSchedulingControlsPropertiesARM<'_> {
56633    #[inline]
56634    fn default() -> Self {
56635        Self {
56636            s_type: Self::STRUCTURE_TYPE,
56637            p_next: ::core::ptr::null_mut(),
56638            scheduling_controls_flags: PhysicalDeviceSchedulingControlsFlagsARM::default(),
56639            _marker: PhantomData,
56640        }
56641    }
56642}
56643unsafe impl<'a> TaggedStructure for PhysicalDeviceSchedulingControlsPropertiesARM<'a> {
56644    const STRUCTURE_TYPE: StructureType =
56645        StructureType::PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM;
56646}
56647unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceSchedulingControlsPropertiesARM<'_> {}
56648impl<'a> PhysicalDeviceSchedulingControlsPropertiesARM<'a> {
56649    #[inline]
56650    pub fn scheduling_controls_flags(
56651        mut self,
56652        scheduling_controls_flags: PhysicalDeviceSchedulingControlsFlagsARM,
56653    ) -> Self {
56654        self.scheduling_controls_flags = scheduling_controls_flags;
56655        self
56656    }
56657}
56658#[repr(C)]
56659#[cfg_attr(feature = "debug", derive(Debug))]
56660#[derive(Copy, Clone)]
56661#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRelaxedLineRasterizationFeaturesIMG.html>"]
56662#[must_use]
56663pub struct PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'a> {
56664    pub s_type: StructureType,
56665    pub p_next: *mut c_void,
56666    pub relaxed_line_rasterization: Bool32,
56667    pub _marker: PhantomData<&'a ()>,
56668}
56669unsafe impl Send for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'_> {}
56670unsafe impl Sync for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'_> {}
56671impl ::core::default::Default for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'_> {
56672    #[inline]
56673    fn default() -> Self {
56674        Self {
56675            s_type: Self::STRUCTURE_TYPE,
56676            p_next: ::core::ptr::null_mut(),
56677            relaxed_line_rasterization: Bool32::default(),
56678            _marker: PhantomData,
56679        }
56680    }
56681}
56682unsafe impl<'a> TaggedStructure for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'a> {
56683    const STRUCTURE_TYPE: StructureType =
56684        StructureType::PHYSICAL_DEVICE_RELAXED_LINE_RASTERIZATION_FEATURES_IMG;
56685}
56686unsafe impl ExtendsPhysicalDeviceFeatures2
56687    for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'_>
56688{
56689}
56690unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'_> {}
56691impl<'a> PhysicalDeviceRelaxedLineRasterizationFeaturesIMG<'a> {
56692    #[inline]
56693    pub fn relaxed_line_rasterization(mut self, relaxed_line_rasterization: bool) -> Self {
56694        self.relaxed_line_rasterization = relaxed_line_rasterization.into();
56695        self
56696    }
56697}
56698#[repr(C)]
56699#[cfg_attr(feature = "debug", derive(Debug))]
56700#[derive(Copy, Clone)]
56701#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRenderPassStripedFeaturesARM.html>"]
56702#[must_use]
56703pub struct PhysicalDeviceRenderPassStripedFeaturesARM<'a> {
56704    pub s_type: StructureType,
56705    pub p_next: *mut c_void,
56706    pub render_pass_striped: Bool32,
56707    pub _marker: PhantomData<&'a ()>,
56708}
56709unsafe impl Send for PhysicalDeviceRenderPassStripedFeaturesARM<'_> {}
56710unsafe impl Sync for PhysicalDeviceRenderPassStripedFeaturesARM<'_> {}
56711impl ::core::default::Default for PhysicalDeviceRenderPassStripedFeaturesARM<'_> {
56712    #[inline]
56713    fn default() -> Self {
56714        Self {
56715            s_type: Self::STRUCTURE_TYPE,
56716            p_next: ::core::ptr::null_mut(),
56717            render_pass_striped: Bool32::default(),
56718            _marker: PhantomData,
56719        }
56720    }
56721}
56722unsafe impl<'a> TaggedStructure for PhysicalDeviceRenderPassStripedFeaturesARM<'a> {
56723    const STRUCTURE_TYPE: StructureType =
56724        StructureType::PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM;
56725}
56726unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRenderPassStripedFeaturesARM<'_> {}
56727unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRenderPassStripedFeaturesARM<'_> {}
56728impl<'a> PhysicalDeviceRenderPassStripedFeaturesARM<'a> {
56729    #[inline]
56730    pub fn render_pass_striped(mut self, render_pass_striped: bool) -> Self {
56731        self.render_pass_striped = render_pass_striped.into();
56732        self
56733    }
56734}
56735#[repr(C)]
56736#[cfg_attr(feature = "debug", derive(Debug))]
56737#[derive(Copy, Clone)]
56738#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRenderPassStripedPropertiesARM.html>"]
56739#[must_use]
56740pub struct PhysicalDeviceRenderPassStripedPropertiesARM<'a> {
56741    pub s_type: StructureType,
56742    pub p_next: *mut c_void,
56743    pub render_pass_stripe_granularity: Extent2D,
56744    pub max_render_pass_stripes: u32,
56745    pub _marker: PhantomData<&'a ()>,
56746}
56747unsafe impl Send for PhysicalDeviceRenderPassStripedPropertiesARM<'_> {}
56748unsafe impl Sync for PhysicalDeviceRenderPassStripedPropertiesARM<'_> {}
56749impl ::core::default::Default for PhysicalDeviceRenderPassStripedPropertiesARM<'_> {
56750    #[inline]
56751    fn default() -> Self {
56752        Self {
56753            s_type: Self::STRUCTURE_TYPE,
56754            p_next: ::core::ptr::null_mut(),
56755            render_pass_stripe_granularity: Extent2D::default(),
56756            max_render_pass_stripes: u32::default(),
56757            _marker: PhantomData,
56758        }
56759    }
56760}
56761unsafe impl<'a> TaggedStructure for PhysicalDeviceRenderPassStripedPropertiesARM<'a> {
56762    const STRUCTURE_TYPE: StructureType =
56763        StructureType::PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM;
56764}
56765unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceRenderPassStripedPropertiesARM<'_> {}
56766impl<'a> PhysicalDeviceRenderPassStripedPropertiesARM<'a> {
56767    #[inline]
56768    pub fn render_pass_stripe_granularity(
56769        mut self,
56770        render_pass_stripe_granularity: Extent2D,
56771    ) -> Self {
56772        self.render_pass_stripe_granularity = render_pass_stripe_granularity;
56773        self
56774    }
56775    #[inline]
56776    pub fn max_render_pass_stripes(mut self, max_render_pass_stripes: u32) -> Self {
56777        self.max_render_pass_stripes = max_render_pass_stripes;
56778        self
56779    }
56780}
56781#[repr(C)]
56782#[cfg_attr(feature = "debug", derive(Debug))]
56783#[derive(Copy, Clone)]
56784#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassStripeInfoARM.html>"]
56785#[must_use]
56786pub struct RenderPassStripeInfoARM<'a> {
56787    pub s_type: StructureType,
56788    pub p_next: *const c_void,
56789    pub stripe_area: Rect2D,
56790    pub _marker: PhantomData<&'a ()>,
56791}
56792unsafe impl Send for RenderPassStripeInfoARM<'_> {}
56793unsafe impl Sync for RenderPassStripeInfoARM<'_> {}
56794impl ::core::default::Default for RenderPassStripeInfoARM<'_> {
56795    #[inline]
56796    fn default() -> Self {
56797        Self {
56798            s_type: Self::STRUCTURE_TYPE,
56799            p_next: ::core::ptr::null(),
56800            stripe_area: Rect2D::default(),
56801            _marker: PhantomData,
56802        }
56803    }
56804}
56805unsafe impl<'a> TaggedStructure for RenderPassStripeInfoARM<'a> {
56806    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_STRIPE_INFO_ARM;
56807}
56808impl<'a> RenderPassStripeInfoARM<'a> {
56809    #[inline]
56810    pub fn stripe_area(mut self, stripe_area: Rect2D) -> Self {
56811        self.stripe_area = stripe_area;
56812        self
56813    }
56814}
56815#[repr(C)]
56816#[cfg_attr(feature = "debug", derive(Debug))]
56817#[derive(Copy, Clone)]
56818#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassStripeBeginInfoARM.html>"]
56819#[must_use]
56820pub struct RenderPassStripeBeginInfoARM<'a> {
56821    pub s_type: StructureType,
56822    pub p_next: *const c_void,
56823    pub stripe_info_count: u32,
56824    pub p_stripe_infos: *const RenderPassStripeInfoARM<'a>,
56825    pub _marker: PhantomData<&'a ()>,
56826}
56827unsafe impl Send for RenderPassStripeBeginInfoARM<'_> {}
56828unsafe impl Sync for RenderPassStripeBeginInfoARM<'_> {}
56829impl ::core::default::Default for RenderPassStripeBeginInfoARM<'_> {
56830    #[inline]
56831    fn default() -> Self {
56832        Self {
56833            s_type: Self::STRUCTURE_TYPE,
56834            p_next: ::core::ptr::null(),
56835            stripe_info_count: u32::default(),
56836            p_stripe_infos: ::core::ptr::null(),
56837            _marker: PhantomData,
56838        }
56839    }
56840}
56841unsafe impl<'a> TaggedStructure for RenderPassStripeBeginInfoARM<'a> {
56842    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_STRIPE_BEGIN_INFO_ARM;
56843}
56844unsafe impl ExtendsRenderingInfo for RenderPassStripeBeginInfoARM<'_> {}
56845unsafe impl ExtendsRenderPassBeginInfo for RenderPassStripeBeginInfoARM<'_> {}
56846impl<'a> RenderPassStripeBeginInfoARM<'a> {
56847    #[inline]
56848    pub fn stripe_infos(mut self, stripe_infos: &'a [RenderPassStripeInfoARM<'a>]) -> Self {
56849        self.stripe_info_count = stripe_infos.len() as _;
56850        self.p_stripe_infos = stripe_infos.as_ptr();
56851        self
56852    }
56853}
56854#[repr(C)]
56855#[cfg_attr(feature = "debug", derive(Debug))]
56856#[derive(Copy, Clone)]
56857#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderPassStripeSubmitInfoARM.html>"]
56858#[must_use]
56859pub struct RenderPassStripeSubmitInfoARM<'a> {
56860    pub s_type: StructureType,
56861    pub p_next: *const c_void,
56862    pub stripe_semaphore_info_count: u32,
56863    pub p_stripe_semaphore_infos: *const SemaphoreSubmitInfo<'a>,
56864    pub _marker: PhantomData<&'a ()>,
56865}
56866unsafe impl Send for RenderPassStripeSubmitInfoARM<'_> {}
56867unsafe impl Sync for RenderPassStripeSubmitInfoARM<'_> {}
56868impl ::core::default::Default for RenderPassStripeSubmitInfoARM<'_> {
56869    #[inline]
56870    fn default() -> Self {
56871        Self {
56872            s_type: Self::STRUCTURE_TYPE,
56873            p_next: ::core::ptr::null(),
56874            stripe_semaphore_info_count: u32::default(),
56875            p_stripe_semaphore_infos: ::core::ptr::null(),
56876            _marker: PhantomData,
56877        }
56878    }
56879}
56880unsafe impl<'a> TaggedStructure for RenderPassStripeSubmitInfoARM<'a> {
56881    const STRUCTURE_TYPE: StructureType = StructureType::RENDER_PASS_STRIPE_SUBMIT_INFO_ARM;
56882}
56883unsafe impl ExtendsCommandBufferSubmitInfo for RenderPassStripeSubmitInfoARM<'_> {}
56884impl<'a> RenderPassStripeSubmitInfoARM<'a> {
56885    #[inline]
56886    pub fn stripe_semaphore_infos(
56887        mut self,
56888        stripe_semaphore_infos: &'a [SemaphoreSubmitInfo<'a>],
56889    ) -> Self {
56890        self.stripe_semaphore_info_count = stripe_semaphore_infos.len() as _;
56891        self.p_stripe_semaphore_infos = stripe_semaphore_infos.as_ptr();
56892        self
56893    }
56894}
56895#[repr(C)]
56896#[cfg_attr(feature = "debug", derive(Debug))]
56897#[derive(Copy, Clone)]
56898#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR.html>"]
56899#[must_use]
56900pub struct PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'a> {
56901    pub s_type: StructureType,
56902    pub p_next: *mut c_void,
56903    pub shader_maximal_reconvergence: Bool32,
56904    pub _marker: PhantomData<&'a ()>,
56905}
56906unsafe impl Send for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'_> {}
56907unsafe impl Sync for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'_> {}
56908impl ::core::default::Default for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'_> {
56909    #[inline]
56910    fn default() -> Self {
56911        Self {
56912            s_type: Self::STRUCTURE_TYPE,
56913            p_next: ::core::ptr::null_mut(),
56914            shader_maximal_reconvergence: Bool32::default(),
56915            _marker: PhantomData,
56916        }
56917    }
56918}
56919unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'a> {
56920    const STRUCTURE_TYPE: StructureType =
56921        StructureType::PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR;
56922}
56923unsafe impl ExtendsPhysicalDeviceFeatures2
56924    for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'_>
56925{
56926}
56927unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'_> {}
56928impl<'a> PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR<'a> {
56929    #[inline]
56930    pub fn shader_maximal_reconvergence(mut self, shader_maximal_reconvergence: bool) -> Self {
56931        self.shader_maximal_reconvergence = shader_maximal_reconvergence.into();
56932        self
56933    }
56934}
56935#[repr(C)]
56936#[cfg_attr(feature = "debug", derive(Debug))]
56937#[derive(Copy, Clone)]
56938#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR.html>"]
56939#[must_use]
56940pub struct PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'a> {
56941    pub s_type: StructureType,
56942    pub p_next: *mut c_void,
56943    pub shader_subgroup_rotate: Bool32,
56944    pub shader_subgroup_rotate_clustered: Bool32,
56945    pub _marker: PhantomData<&'a ()>,
56946}
56947unsafe impl Send for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'_> {}
56948unsafe impl Sync for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'_> {}
56949impl ::core::default::Default for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'_> {
56950    #[inline]
56951    fn default() -> Self {
56952        Self {
56953            s_type: Self::STRUCTURE_TYPE,
56954            p_next: ::core::ptr::null_mut(),
56955            shader_subgroup_rotate: Bool32::default(),
56956            shader_subgroup_rotate_clustered: Bool32::default(),
56957            _marker: PhantomData,
56958        }
56959    }
56960}
56961unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'a> {
56962    const STRUCTURE_TYPE: StructureType =
56963        StructureType::PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR;
56964}
56965unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'_> {}
56966unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'_> {}
56967impl<'a> PhysicalDeviceShaderSubgroupRotateFeaturesKHR<'a> {
56968    #[inline]
56969    pub fn shader_subgroup_rotate(mut self, shader_subgroup_rotate: bool) -> Self {
56970        self.shader_subgroup_rotate = shader_subgroup_rotate.into();
56971        self
56972    }
56973    #[inline]
56974    pub fn shader_subgroup_rotate_clustered(
56975        mut self,
56976        shader_subgroup_rotate_clustered: bool,
56977    ) -> Self {
56978        self.shader_subgroup_rotate_clustered = shader_subgroup_rotate_clustered.into();
56979        self
56980    }
56981}
56982#[repr(C)]
56983#[cfg_attr(feature = "debug", derive(Debug))]
56984#[derive(Copy, Clone)]
56985#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderExpectAssumeFeaturesKHR.html>"]
56986#[must_use]
56987pub struct PhysicalDeviceShaderExpectAssumeFeaturesKHR<'a> {
56988    pub s_type: StructureType,
56989    pub p_next: *mut c_void,
56990    pub shader_expect_assume: Bool32,
56991    pub _marker: PhantomData<&'a ()>,
56992}
56993unsafe impl Send for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'_> {}
56994unsafe impl Sync for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'_> {}
56995impl ::core::default::Default for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'_> {
56996    #[inline]
56997    fn default() -> Self {
56998        Self {
56999            s_type: Self::STRUCTURE_TYPE,
57000            p_next: ::core::ptr::null_mut(),
57001            shader_expect_assume: Bool32::default(),
57002            _marker: PhantomData,
57003        }
57004    }
57005}
57006unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'a> {
57007    const STRUCTURE_TYPE: StructureType =
57008        StructureType::PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR;
57009}
57010unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'_> {}
57011unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderExpectAssumeFeaturesKHR<'_> {}
57012impl<'a> PhysicalDeviceShaderExpectAssumeFeaturesKHR<'a> {
57013    #[inline]
57014    pub fn shader_expect_assume(mut self, shader_expect_assume: bool) -> Self {
57015        self.shader_expect_assume = shader_expect_assume.into();
57016        self
57017    }
57018}
57019#[repr(C)]
57020#[cfg_attr(feature = "debug", derive(Debug))]
57021#[derive(Copy, Clone)]
57022#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderFloatControls2FeaturesKHR.html>"]
57023#[must_use]
57024pub struct PhysicalDeviceShaderFloatControls2FeaturesKHR<'a> {
57025    pub s_type: StructureType,
57026    pub p_next: *mut c_void,
57027    pub shader_float_controls2: Bool32,
57028    pub _marker: PhantomData<&'a ()>,
57029}
57030unsafe impl Send for PhysicalDeviceShaderFloatControls2FeaturesKHR<'_> {}
57031unsafe impl Sync for PhysicalDeviceShaderFloatControls2FeaturesKHR<'_> {}
57032impl ::core::default::Default for PhysicalDeviceShaderFloatControls2FeaturesKHR<'_> {
57033    #[inline]
57034    fn default() -> Self {
57035        Self {
57036            s_type: Self::STRUCTURE_TYPE,
57037            p_next: ::core::ptr::null_mut(),
57038            shader_float_controls2: Bool32::default(),
57039            _marker: PhantomData,
57040        }
57041    }
57042}
57043unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderFloatControls2FeaturesKHR<'a> {
57044    const STRUCTURE_TYPE: StructureType =
57045        StructureType::PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR;
57046}
57047unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderFloatControls2FeaturesKHR<'_> {}
57048unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderFloatControls2FeaturesKHR<'_> {}
57049impl<'a> PhysicalDeviceShaderFloatControls2FeaturesKHR<'a> {
57050    #[inline]
57051    pub fn shader_float_controls2(mut self, shader_float_controls2: bool) -> Self {
57052        self.shader_float_controls2 = shader_float_controls2.into();
57053        self
57054    }
57055}
57056#[repr(C)]
57057#[cfg_attr(feature = "debug", derive(Debug))]
57058#[derive(Copy, Clone)]
57059#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR.html>"]
57060#[must_use]
57061pub struct PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'a> {
57062    pub s_type: StructureType,
57063    pub p_next: *mut c_void,
57064    pub dynamic_rendering_local_read: Bool32,
57065    pub _marker: PhantomData<&'a ()>,
57066}
57067unsafe impl Send for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'_> {}
57068unsafe impl Sync for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'_> {}
57069impl ::core::default::Default for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'_> {
57070    #[inline]
57071    fn default() -> Self {
57072        Self {
57073            s_type: Self::STRUCTURE_TYPE,
57074            p_next: ::core::ptr::null_mut(),
57075            dynamic_rendering_local_read: Bool32::default(),
57076            _marker: PhantomData,
57077        }
57078    }
57079}
57080unsafe impl<'a> TaggedStructure for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'a> {
57081    const STRUCTURE_TYPE: StructureType =
57082        StructureType::PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR;
57083}
57084unsafe impl ExtendsPhysicalDeviceFeatures2
57085    for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'_>
57086{
57087}
57088unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'_> {}
57089impl<'a> PhysicalDeviceDynamicRenderingLocalReadFeaturesKHR<'a> {
57090    #[inline]
57091    pub fn dynamic_rendering_local_read(mut self, dynamic_rendering_local_read: bool) -> Self {
57092        self.dynamic_rendering_local_read = dynamic_rendering_local_read.into();
57093        self
57094    }
57095}
57096#[repr(C)]
57097#[cfg_attr(feature = "debug", derive(Debug))]
57098#[derive(Copy, Clone)]
57099#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingAttachmentLocationInfoKHR.html>"]
57100#[must_use]
57101pub struct RenderingAttachmentLocationInfoKHR<'a> {
57102    pub s_type: StructureType,
57103    pub p_next: *const c_void,
57104    pub color_attachment_count: u32,
57105    pub p_color_attachment_locations: *const u32,
57106    pub _marker: PhantomData<&'a ()>,
57107}
57108unsafe impl Send for RenderingAttachmentLocationInfoKHR<'_> {}
57109unsafe impl Sync for RenderingAttachmentLocationInfoKHR<'_> {}
57110impl ::core::default::Default for RenderingAttachmentLocationInfoKHR<'_> {
57111    #[inline]
57112    fn default() -> Self {
57113        Self {
57114            s_type: Self::STRUCTURE_TYPE,
57115            p_next: ::core::ptr::null(),
57116            color_attachment_count: u32::default(),
57117            p_color_attachment_locations: ::core::ptr::null(),
57118            _marker: PhantomData,
57119        }
57120    }
57121}
57122unsafe impl<'a> TaggedStructure for RenderingAttachmentLocationInfoKHR<'a> {
57123    const STRUCTURE_TYPE: StructureType = StructureType::RENDERING_ATTACHMENT_LOCATION_INFO_KHR;
57124}
57125unsafe impl ExtendsGraphicsPipelineCreateInfo for RenderingAttachmentLocationInfoKHR<'_> {}
57126unsafe impl ExtendsCommandBufferInheritanceInfo for RenderingAttachmentLocationInfoKHR<'_> {}
57127impl<'a> RenderingAttachmentLocationInfoKHR<'a> {
57128    #[inline]
57129    pub fn color_attachment_locations(mut self, color_attachment_locations: &'a [u32]) -> Self {
57130        self.color_attachment_count = color_attachment_locations.len() as _;
57131        self.p_color_attachment_locations = color_attachment_locations.as_ptr();
57132        self
57133    }
57134}
57135#[repr(C)]
57136#[cfg_attr(feature = "debug", derive(Debug))]
57137#[derive(Copy, Clone)]
57138#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkRenderingInputAttachmentIndexInfoKHR.html>"]
57139#[must_use]
57140pub struct RenderingInputAttachmentIndexInfoKHR<'a> {
57141    pub s_type: StructureType,
57142    pub p_next: *const c_void,
57143    pub color_attachment_count: u32,
57144    pub p_color_attachment_input_indices: *const u32,
57145    pub p_depth_input_attachment_index: *const u32,
57146    pub p_stencil_input_attachment_index: *const u32,
57147    pub _marker: PhantomData<&'a ()>,
57148}
57149unsafe impl Send for RenderingInputAttachmentIndexInfoKHR<'_> {}
57150unsafe impl Sync for RenderingInputAttachmentIndexInfoKHR<'_> {}
57151impl ::core::default::Default for RenderingInputAttachmentIndexInfoKHR<'_> {
57152    #[inline]
57153    fn default() -> Self {
57154        Self {
57155            s_type: Self::STRUCTURE_TYPE,
57156            p_next: ::core::ptr::null(),
57157            color_attachment_count: u32::default(),
57158            p_color_attachment_input_indices: ::core::ptr::null(),
57159            p_depth_input_attachment_index: ::core::ptr::null(),
57160            p_stencil_input_attachment_index: ::core::ptr::null(),
57161            _marker: PhantomData,
57162        }
57163    }
57164}
57165unsafe impl<'a> TaggedStructure for RenderingInputAttachmentIndexInfoKHR<'a> {
57166    const STRUCTURE_TYPE: StructureType = StructureType::RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR;
57167}
57168unsafe impl ExtendsGraphicsPipelineCreateInfo for RenderingInputAttachmentIndexInfoKHR<'_> {}
57169unsafe impl ExtendsCommandBufferInheritanceInfo for RenderingInputAttachmentIndexInfoKHR<'_> {}
57170impl<'a> RenderingInputAttachmentIndexInfoKHR<'a> {
57171    #[inline]
57172    pub fn color_attachment_input_indices(
57173        mut self,
57174        color_attachment_input_indices: &'a [u32],
57175    ) -> Self {
57176        self.color_attachment_count = color_attachment_input_indices.len() as _;
57177        self.p_color_attachment_input_indices = color_attachment_input_indices.as_ptr();
57178        self
57179    }
57180    #[inline]
57181    pub fn depth_input_attachment_index(mut self, depth_input_attachment_index: &'a u32) -> Self {
57182        self.p_depth_input_attachment_index = depth_input_attachment_index;
57183        self
57184    }
57185    #[inline]
57186    pub fn stencil_input_attachment_index(
57187        mut self,
57188        stencil_input_attachment_index: &'a u32,
57189    ) -> Self {
57190        self.p_stencil_input_attachment_index = stencil_input_attachment_index;
57191        self
57192    }
57193}
57194#[repr(C)]
57195#[cfg_attr(feature = "debug", derive(Debug))]
57196#[derive(Copy, Clone)]
57197#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderQuadControlFeaturesKHR.html>"]
57198#[must_use]
57199pub struct PhysicalDeviceShaderQuadControlFeaturesKHR<'a> {
57200    pub s_type: StructureType,
57201    pub p_next: *mut c_void,
57202    pub shader_quad_control: Bool32,
57203    pub _marker: PhantomData<&'a ()>,
57204}
57205unsafe impl Send for PhysicalDeviceShaderQuadControlFeaturesKHR<'_> {}
57206unsafe impl Sync for PhysicalDeviceShaderQuadControlFeaturesKHR<'_> {}
57207impl ::core::default::Default for PhysicalDeviceShaderQuadControlFeaturesKHR<'_> {
57208    #[inline]
57209    fn default() -> Self {
57210        Self {
57211            s_type: Self::STRUCTURE_TYPE,
57212            p_next: ::core::ptr::null_mut(),
57213            shader_quad_control: Bool32::default(),
57214            _marker: PhantomData,
57215        }
57216    }
57217}
57218unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderQuadControlFeaturesKHR<'a> {
57219    const STRUCTURE_TYPE: StructureType =
57220        StructureType::PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR;
57221}
57222unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceShaderQuadControlFeaturesKHR<'_> {}
57223unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderQuadControlFeaturesKHR<'_> {}
57224impl<'a> PhysicalDeviceShaderQuadControlFeaturesKHR<'a> {
57225    #[inline]
57226    pub fn shader_quad_control(mut self, shader_quad_control: bool) -> Self {
57227        self.shader_quad_control = shader_quad_control.into();
57228        self
57229    }
57230}
57231#[repr(C)]
57232#[cfg_attr(feature = "debug", derive(Debug))]
57233#[derive(Copy, Clone)]
57234#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceShaderAtomicFloat16VectorFeaturesNV.html>"]
57235#[must_use]
57236pub struct PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'a> {
57237    pub s_type: StructureType,
57238    pub p_next: *mut c_void,
57239    pub shader_float16_vector_atomics: Bool32,
57240    pub _marker: PhantomData<&'a ()>,
57241}
57242unsafe impl Send for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'_> {}
57243unsafe impl Sync for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'_> {}
57244impl ::core::default::Default for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'_> {
57245    #[inline]
57246    fn default() -> Self {
57247        Self {
57248            s_type: Self::STRUCTURE_TYPE,
57249            p_next: ::core::ptr::null_mut(),
57250            shader_float16_vector_atomics: Bool32::default(),
57251            _marker: PhantomData,
57252        }
57253    }
57254}
57255unsafe impl<'a> TaggedStructure for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'a> {
57256    const STRUCTURE_TYPE: StructureType =
57257        StructureType::PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV;
57258}
57259unsafe impl ExtendsPhysicalDeviceFeatures2
57260    for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'_>
57261{
57262}
57263unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'_> {}
57264impl<'a> PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV<'a> {
57265    #[inline]
57266    pub fn shader_float16_vector_atomics(mut self, shader_float16_vector_atomics: bool) -> Self {
57267        self.shader_float16_vector_atomics = shader_float16_vector_atomics.into();
57268        self
57269    }
57270}
57271#[repr(C)]
57272#[cfg_attr(feature = "debug", derive(Debug))]
57273#[derive(Copy, Clone)]
57274#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMapMemoryPlacedFeaturesEXT.html>"]
57275#[must_use]
57276pub struct PhysicalDeviceMapMemoryPlacedFeaturesEXT<'a> {
57277    pub s_type: StructureType,
57278    pub p_next: *mut c_void,
57279    pub memory_map_placed: Bool32,
57280    pub memory_map_range_placed: Bool32,
57281    pub memory_unmap_reserve: Bool32,
57282    pub _marker: PhantomData<&'a ()>,
57283}
57284unsafe impl Send for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'_> {}
57285unsafe impl Sync for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'_> {}
57286impl ::core::default::Default for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'_> {
57287    #[inline]
57288    fn default() -> Self {
57289        Self {
57290            s_type: Self::STRUCTURE_TYPE,
57291            p_next: ::core::ptr::null_mut(),
57292            memory_map_placed: Bool32::default(),
57293            memory_map_range_placed: Bool32::default(),
57294            memory_unmap_reserve: Bool32::default(),
57295            _marker: PhantomData,
57296        }
57297    }
57298}
57299unsafe impl<'a> TaggedStructure for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'a> {
57300    const STRUCTURE_TYPE: StructureType =
57301        StructureType::PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT;
57302}
57303unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'_> {}
57304unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceMapMemoryPlacedFeaturesEXT<'_> {}
57305impl<'a> PhysicalDeviceMapMemoryPlacedFeaturesEXT<'a> {
57306    #[inline]
57307    pub fn memory_map_placed(mut self, memory_map_placed: bool) -> Self {
57308        self.memory_map_placed = memory_map_placed.into();
57309        self
57310    }
57311    #[inline]
57312    pub fn memory_map_range_placed(mut self, memory_map_range_placed: bool) -> Self {
57313        self.memory_map_range_placed = memory_map_range_placed.into();
57314        self
57315    }
57316    #[inline]
57317    pub fn memory_unmap_reserve(mut self, memory_unmap_reserve: bool) -> Self {
57318        self.memory_unmap_reserve = memory_unmap_reserve.into();
57319        self
57320    }
57321}
57322#[repr(C)]
57323#[cfg_attr(feature = "debug", derive(Debug))]
57324#[derive(Copy, Clone)]
57325#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceMapMemoryPlacedPropertiesEXT.html>"]
57326#[must_use]
57327pub struct PhysicalDeviceMapMemoryPlacedPropertiesEXT<'a> {
57328    pub s_type: StructureType,
57329    pub p_next: *mut c_void,
57330    pub min_placed_memory_map_alignment: DeviceSize,
57331    pub _marker: PhantomData<&'a ()>,
57332}
57333unsafe impl Send for PhysicalDeviceMapMemoryPlacedPropertiesEXT<'_> {}
57334unsafe impl Sync for PhysicalDeviceMapMemoryPlacedPropertiesEXT<'_> {}
57335impl ::core::default::Default for PhysicalDeviceMapMemoryPlacedPropertiesEXT<'_> {
57336    #[inline]
57337    fn default() -> Self {
57338        Self {
57339            s_type: Self::STRUCTURE_TYPE,
57340            p_next: ::core::ptr::null_mut(),
57341            min_placed_memory_map_alignment: DeviceSize::default(),
57342            _marker: PhantomData,
57343        }
57344    }
57345}
57346unsafe impl<'a> TaggedStructure for PhysicalDeviceMapMemoryPlacedPropertiesEXT<'a> {
57347    const STRUCTURE_TYPE: StructureType =
57348        StructureType::PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT;
57349}
57350unsafe impl ExtendsPhysicalDeviceProperties2 for PhysicalDeviceMapMemoryPlacedPropertiesEXT<'_> {}
57351impl<'a> PhysicalDeviceMapMemoryPlacedPropertiesEXT<'a> {
57352    #[inline]
57353    pub fn min_placed_memory_map_alignment(
57354        mut self,
57355        min_placed_memory_map_alignment: DeviceSize,
57356    ) -> Self {
57357        self.min_placed_memory_map_alignment = min_placed_memory_map_alignment;
57358        self
57359    }
57360}
57361#[repr(C)]
57362#[cfg_attr(feature = "debug", derive(Debug))]
57363#[derive(Copy, Clone)]
57364#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryMapPlacedInfoEXT.html>"]
57365#[must_use]
57366pub struct MemoryMapPlacedInfoEXT<'a> {
57367    pub s_type: StructureType,
57368    pub p_next: *const c_void,
57369    pub p_placed_address: *mut c_void,
57370    pub _marker: PhantomData<&'a ()>,
57371}
57372unsafe impl Send for MemoryMapPlacedInfoEXT<'_> {}
57373unsafe impl Sync for MemoryMapPlacedInfoEXT<'_> {}
57374impl ::core::default::Default for MemoryMapPlacedInfoEXT<'_> {
57375    #[inline]
57376    fn default() -> Self {
57377        Self {
57378            s_type: Self::STRUCTURE_TYPE,
57379            p_next: ::core::ptr::null(),
57380            p_placed_address: ::core::ptr::null_mut(),
57381            _marker: PhantomData,
57382        }
57383    }
57384}
57385unsafe impl<'a> TaggedStructure for MemoryMapPlacedInfoEXT<'a> {
57386    const STRUCTURE_TYPE: StructureType = StructureType::MEMORY_MAP_PLACED_INFO_EXT;
57387}
57388unsafe impl ExtendsMemoryMapInfoKHR for MemoryMapPlacedInfoEXT<'_> {}
57389impl<'a> MemoryMapPlacedInfoEXT<'a> {
57390    #[inline]
57391    pub fn placed_address(mut self, placed_address: *mut c_void) -> Self {
57392        self.p_placed_address = placed_address;
57393        self
57394    }
57395}
57396#[repr(C)]
57397#[cfg_attr(feature = "debug", derive(Debug))]
57398#[derive(Copy, Clone)]
57399#[doc = "<https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceRawAccessChainsFeaturesNV.html>"]
57400#[must_use]
57401pub struct PhysicalDeviceRawAccessChainsFeaturesNV<'a> {
57402    pub s_type: StructureType,
57403    pub p_next: *mut c_void,
57404    pub shader_raw_access_chains: Bool32,
57405    pub _marker: PhantomData<&'a ()>,
57406}
57407unsafe impl Send for PhysicalDeviceRawAccessChainsFeaturesNV<'_> {}
57408unsafe impl Sync for PhysicalDeviceRawAccessChainsFeaturesNV<'_> {}
57409impl ::core::default::Default for PhysicalDeviceRawAccessChainsFeaturesNV<'_> {
57410    #[inline]
57411    fn default() -> Self {
57412        Self {
57413            s_type: Self::STRUCTURE_TYPE,
57414            p_next: ::core::ptr::null_mut(),
57415            shader_raw_access_chains: Bool32::default(),
57416            _marker: PhantomData,
57417        }
57418    }
57419}
57420unsafe impl<'a> TaggedStructure for PhysicalDeviceRawAccessChainsFeaturesNV<'a> {
57421    const STRUCTURE_TYPE: StructureType =
57422        StructureType::PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV;
57423}
57424unsafe impl ExtendsPhysicalDeviceFeatures2 for PhysicalDeviceRawAccessChainsFeaturesNV<'_> {}
57425unsafe impl ExtendsDeviceCreateInfo for PhysicalDeviceRawAccessChainsFeaturesNV<'_> {}
57426impl<'a> PhysicalDeviceRawAccessChainsFeaturesNV<'a> {
57427    #[inline]
57428    pub fn shader_raw_access_chains(mut self, shader_raw_access_chains: bool) -> Self {
57429        self.shader_raw_access_chains = shader_raw_access_chains.into();
57430        self
57431    }
57432}