1    type BlitPushConstant = struct
2        rect : [f32; 4]
3    
4    type BlitImage = struct
5        image : Image
6        offset : Vector2i
7    
8    type Blit = struct
9        image_descriptor_sets : mut Map<Image, DescriptorSet>
10       pipeline_layout : PipelineLayout
11       pipeline : Pipeline
12       sampler : VkSampler
13   
14   object Blit =
15       def create (cache : RenderPassCache
16                   format : VkFormat
17                   vertex_shader : VertexShader
18                   fragment_shader : FragmentShader) =
19           let instance : Instance @auto
20           let pipeline_layout = PipelineLayout.raster vertex_shader fragment_shader
21   
22           let attachment_format = AttachmentFormat
23               =format
24               samples = SampleCountFlags/1
25               usage = ImageUsageFlags/ColorAttachment
26   
27           let render_pass_format = RenderPassFormat.create [attachment_format]
28   
29           let settings = Settings
30               color_enter_op = EnterOp/Clear
31               color_exit_op = ExitOp/Read
32               depth_enter_op = EnterOp/Clear
33               depth_exit_op = ExitOp/Read
34               no_dependencies = true
35   
36           let render_pass = RenderPass.create render_pass_format settings cache
37           let pipeline =
38               let blend = ColorBlend.disabled 1
39               Pipeline.create vertex_shader fragment_shader
40                               pipeline_layout render_pass VertexFormat@null
41                               Rasterization.default Multisample.default
42                               DepthStencil.default blend 0
43   
44           let sampler_properties = SamplerProperties max_lod = 1.0
45                                                      f@ SamplerProperties.default
46   
47           let sampler = VkSampler.create instance.device sampler_properties@ref
48   
49           Blit image_descriptor_sets = Map.new
50                =pipeline_layout =pipeline =sampler
51