1use std::ffi::c_void;
4use std::ptr;
5use crate::sys::*;
6use crate::core::enums::*;
7use crate::core::flags::*;
8
9#[repr(C)]
11#[derive(Debug, Clone, Copy)]
12pub struct VkShaderModuleCreateInfo {
13 pub sType: VkStructureType,
14 pub pNext: *const c_void,
15 pub flags: VkFlags,
16 pub codeSize: usize,
17 pub pCode: *const u32,
18}
19
20impl Default for VkShaderModuleCreateInfo {
21 fn default() -> Self {
22 Self {
23 sType: VkStructureType::ShaderModuleCreateInfo,
24 pNext: ptr::null(),
25 flags: 0,
26 codeSize: 0,
27 pCode: ptr::null(),
28 }
29 }
30}
31
32#[repr(C)]
34#[derive(Debug, Clone, Copy)]
35pub struct VkSpecializationMapEntry {
36 pub constantID: u32,
37 pub offset: u32,
38 pub size: usize,
39}
40
41#[repr(C)]
43#[derive(Debug, Clone, Copy)]
44pub struct VkSpecializationInfo {
45 pub mapEntryCount: u32,
46 pub pMapEntries: *const VkSpecializationMapEntry,
47 pub dataSize: usize,
48 pub pData: *const c_void,
49}
50
51#[repr(C)]
53#[derive(Debug, Clone, Copy)]
54pub struct VkPipelineShaderStageCreateInfo {
55 pub sType: VkStructureType,
56 pub pNext: *const c_void,
57 pub flags: VkPipelineShaderStageCreateFlags,
58 pub stage: VkShaderStageFlagBits,
59 pub module: VkShaderModule,
60 pub pName: *const i8,
61 pub pSpecializationInfo: *const VkSpecializationInfo,
62}
63
64impl Default for VkPipelineShaderStageCreateInfo {
65 fn default() -> Self {
66 Self {
67 sType: VkStructureType::PipelineShaderStageCreateInfo,
68 pNext: ptr::null(),
69 flags: VkPipelineShaderStageCreateFlags::empty(),
70 stage: VkShaderStageFlagBits::Compute,
71 module: VkShaderModule::NULL,
72 pName: b"main\0".as_ptr() as *const i8,
73 pSpecializationInfo: ptr::null(),
74 }
75 }
76}
77
78#[repr(C)]
80#[derive(Debug, Clone, Copy)]
81pub struct VkComputePipelineCreateInfo {
82 pub sType: VkStructureType,
83 pub pNext: *const c_void,
84 pub flags: VkPipelineCreateFlags,
85 pub stage: VkPipelineShaderStageCreateInfo,
86 pub layout: VkPipelineLayout,
87 pub basePipelineHandle: VkPipeline,
88 pub basePipelineIndex: i32,
89}
90
91impl Default for VkComputePipelineCreateInfo {
92 fn default() -> Self {
93 Self {
94 sType: VkStructureType::ComputePipelineCreateInfo,
95 pNext: ptr::null(),
96 flags: VkPipelineCreateFlags::empty(),
97 stage: VkPipelineShaderStageCreateInfo::default(),
98 layout: VkPipelineLayout::NULL,
99 basePipelineHandle: VkPipeline::NULL,
100 basePipelineIndex: -1,
101 }
102 }
103}
104
105#[repr(C)]
107#[derive(Debug, Clone, Copy)]
108pub struct VkPushConstantRange {
109 pub stageFlags: VkShaderStageFlags,
110 pub offset: u32,
111 pub size: u32,
112}
113
114#[repr(C)]
116#[derive(Debug, Clone, Copy)]
117pub struct VkPipelineLayoutCreateInfo {
118 pub sType: VkStructureType,
119 pub pNext: *const c_void,
120 pub flags: VkPipelineLayoutCreateFlags,
121 pub setLayoutCount: u32,
122 pub pSetLayouts: *const VkDescriptorSetLayout,
123 pub pushConstantRangeCount: u32,
124 pub pPushConstantRanges: *const VkPushConstantRange,
125}
126
127impl Default for VkPipelineLayoutCreateInfo {
128 fn default() -> Self {
129 Self {
130 sType: VkStructureType::PipelineLayoutCreateInfo,
131 pNext: ptr::null(),
132 flags: 0,
133 setLayoutCount: 0,
134 pSetLayouts: ptr::null(),
135 pushConstantRangeCount: 0,
136 pPushConstantRanges: ptr::null(),
137 }
138 }
139}
140
141#[repr(C)]
143#[derive(Debug, Clone, Copy)]
144pub struct VkDescriptorSetLayoutBinding {
145 pub binding: u32,
146 pub descriptorType: VkDescriptorType,
147 pub descriptorCount: u32,
148 pub stageFlags: VkShaderStageFlags,
149 pub pImmutableSamplers: *const VkSampler,
150}
151
152#[repr(C)]
154#[derive(Debug, Clone, Copy)]
155pub struct VkDescriptorSetLayoutCreateInfo {
156 pub sType: VkStructureType,
157 pub pNext: *const c_void,
158 pub flags: VkDescriptorSetLayoutCreateFlags,
159 pub bindingCount: u32,
160 pub pBindings: *const VkDescriptorSetLayoutBinding,
161}
162
163impl Default for VkDescriptorSetLayoutCreateInfo {
164 fn default() -> Self {
165 Self {
166 sType: VkStructureType::DescriptorSetLayoutCreateInfo,
167 pNext: ptr::null(),
168 flags: 0,
169 bindingCount: 0,
170 pBindings: ptr::null(),
171 }
172 }
173}
174
175#[repr(C)]
177#[derive(Debug, Clone, Copy)]
178pub struct VkDescriptorPoolSize {
179 pub type_: VkDescriptorType,
180 pub descriptorCount: u32,
181}
182
183#[repr(C)]
185#[derive(Debug, Clone, Copy)]
186pub struct VkDescriptorPoolCreateInfo {
187 pub sType: VkStructureType,
188 pub pNext: *const c_void,
189 pub flags: VkDescriptorPoolCreateFlags,
190 pub maxSets: u32,
191 pub poolSizeCount: u32,
192 pub pPoolSizes: *const VkDescriptorPoolSize,
193}
194
195impl Default for VkDescriptorPoolCreateInfo {
196 fn default() -> Self {
197 Self {
198 sType: VkStructureType::DescriptorPoolCreateInfo,
199 pNext: ptr::null(),
200 flags: VkDescriptorPoolCreateFlags::empty(),
201 maxSets: 0,
202 poolSizeCount: 0,
203 pPoolSizes: ptr::null(),
204 }
205 }
206}
207
208#[repr(C)]
210#[derive(Debug, Clone, Copy)]
211pub struct VkDescriptorSetAllocateInfo {
212 pub sType: VkStructureType,
213 pub pNext: *const c_void,
214 pub descriptorPool: VkDescriptorPool,
215 pub descriptorSetCount: u32,
216 pub pSetLayouts: *const VkDescriptorSetLayout,
217}
218
219impl Default for VkDescriptorSetAllocateInfo {
220 fn default() -> Self {
221 Self {
222 sType: VkStructureType::DescriptorSetAllocateInfo,
223 pNext: ptr::null(),
224 descriptorPool: VkDescriptorPool::NULL,
225 descriptorSetCount: 0,
226 pSetLayouts: ptr::null(),
227 }
228 }
229}
230
231#[repr(C)]
233#[derive(Debug, Clone, Copy)]
234pub struct VkDescriptorBufferInfo {
235 pub buffer: VkBuffer,
236 pub offset: VkDeviceSize,
237 pub range: VkDeviceSize,
238}
239
240#[repr(C)]
242#[derive(Debug, Clone, Copy)]
243pub struct VkDescriptorImageInfo {
244 pub sampler: VkSampler,
245 pub imageView: VkImageView,
246 pub imageLayout: VkImageLayout,
247}
248
249#[repr(C)]
251#[derive(Debug, Clone, Copy)]
252pub struct VkWriteDescriptorSet {
253 pub sType: VkStructureType,
254 pub pNext: *const c_void,
255 pub dstSet: VkDescriptorSet,
256 pub dstBinding: u32,
257 pub dstArrayElement: u32,
258 pub descriptorCount: u32,
259 pub descriptorType: VkDescriptorType,
260 pub pImageInfo: *const VkDescriptorImageInfo,
261 pub pBufferInfo: *const VkDescriptorBufferInfo,
262 pub pTexelBufferView: *const VkBufferView,
263}
264
265impl Default for VkWriteDescriptorSet {
266 fn default() -> Self {
267 Self {
268 sType: VkStructureType::WriteDescriptorSet,
269 pNext: ptr::null(),
270 dstSet: VkDescriptorSet::NULL,
271 dstBinding: 0,
272 dstArrayElement: 0,
273 descriptorCount: 0,
274 descriptorType: VkDescriptorType::StorageBuffer,
275 pImageInfo: ptr::null(),
276 pBufferInfo: ptr::null(),
277 pTexelBufferView: ptr::null(),
278 }
279 }
280}
281
282#[repr(C)]
284#[derive(Debug, Clone, Copy)]
285pub struct VkCopyDescriptorSet {
286 pub sType: VkStructureType,
287 pub pNext: *const c_void,
288 pub srcSet: VkDescriptorSet,
289 pub srcBinding: u32,
290 pub srcArrayElement: u32,
291 pub dstSet: VkDescriptorSet,
292 pub dstBinding: u32,
293 pub dstArrayElement: u32,
294 pub descriptorCount: u32,
295}
296
297pub type VkBufferView = Handle<BufferViewT>;
299
300#[derive(Debug, Clone, Copy)]
301pub enum BufferViewT {}
302
303#[repr(i32)]
305#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
306pub enum VkImageLayout {
307 Undefined = 0,
308 General = 1,
309 TransferSrcOptimal = 6,
310 TransferDstOptimal = 7,
311}