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}