1    def draw_blit (blit_images : List<BlitImage>) =
2        let vulkan : Vulkan @auto
3        begin_label "Blit"
4    
5        begin_for_swapchain Vector4.new
6    
7        for blit_image in blit_images do
8            let image = blit_image.image
9            assert image <> null
10   
11           if not vulkan.blit.image_descriptor_sets.contains image then
12               let descriptor_set = DescriptorSet.create
13                   [(image, vulkan.blit.sampler).to_descriptor "source"]
14                   vulkan.blit.pipeline_layout[0]
15   
16               vulkan.blit.image_descriptor_sets.add image descriptor_set
17   
18           let size = Vector2 x = vulkan.swapchain.width as f32
19                              y = vulkan.swapchain.height as f32
20   
21           bind_pipeline vulkan.blit.pipeline
22           bind_index_buffer vulkan.quad_index_buffer 0 6
23           bind_descriptor_set vulkan.blit.image_descriptor_sets[image] 0
24   
25           let push_constant = BlitPushConstant
26               rect = [blit_image.offset.x as f32 / size.x
27                       blit_image.offset.y as f32 / size.y
28                       blit_image.image.width as f32 / size.x
29                       blit_image.image.height as f32 / size.y]
30   
31           set_push_constant push_constant@ptr
32           draw
33   
34       end
35   
36       end_label
37   
38   endmodule
39