1    type ComputePipeline =
2        val instance : Instance
3        val shader : ComputeShader
4        val object : VkPipeline
5        val pipeline_layout : VkPipelineLayout
6        val push_constant_size : u32
7        val push_constant_stages : ShaderStageFlags
8        val local_group_size : [u32; 3]
9    
10       def discard =
11           vk/destroy_pipeline_layout instance.device pipeline_layout null
12   
13   object ComputePipeline =
14       def create (shader : ComputeShader) =
15           let instance : Instance @auto
16           let pipeline_layout = PipelineLayout.compute shader
17   
18           let compute_pipeline_create_info = ComputePipelineCreateInfo
19               type = StructureType/ComputePipelineCreateInfo
20               next = null
21               flags = PipelineCreateFlags@zero
22               stage = shader.create_info
23               layout = pipeline_layout.object
24               base_pipeline_handle = null
25               base_pipeline_index = 0
26   
27           let mut object = null
28           vk/create_compute_pipelines instance.device null 1
29                                       compute_pipeline_create_info@ptr
30                                       null object@mut_ptr
31           |> assert_success
32   
33           ComputePipeline =instance =shader =object
34                           pipeline_layout = pipeline_layout.object
35                           push_constant_size = shader.push_constant_size
36                           push_constant_stages = shader.push_constant_stages
37                           local_group_size = shader.compute_local_size
38