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