kronos_compute/core/
compute.rs

1//! Compute-specific structures for Kronos
2
3use std::ffi::c_void;
4use std::ptr;
5use crate::sys::*;
6use crate::core::enums::*;
7use crate::core::flags::*;
8
9/// Shader module creation info
10#[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/// Specialization map entry
33#[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/// Specialization info
42#[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/// Pipeline shader stage creation info
52#[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/// Compute pipeline creation info (optimized)
79#[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/// Push constant range
106#[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/// Pipeline layout creation info
115#[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/// Descriptor set layout binding
142#[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/// Descriptor set layout creation info
153#[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/// Descriptor pool size
176#[repr(C)]
177#[derive(Debug, Clone, Copy)]
178pub struct VkDescriptorPoolSize {
179    pub type_: VkDescriptorType,
180    pub descriptorCount: u32,
181}
182
183/// Descriptor pool creation info
184#[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/// Descriptor set allocate info
209#[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/// Descriptor buffer info
232#[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/// Descriptor image info
241#[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/// Write descriptor set
250#[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/// Copy descriptor set
283#[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
297// BufferView handle type
298pub type VkBufferView = Handle<BufferViewT>;
299
300#[derive(Debug, Clone, Copy)]
301pub enum BufferViewT {}
302
303// Add missing enums
304#[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}