| 592 | } |
| 593 | |
| 594 | pub fn create_render_pass(&self) -> vk::RenderPass { |
| 595 | let renderpass_attachments = [vk::AttachmentDescription { |
| 596 | format: self.surface_format.format, |
| 597 | samples: vk::SampleCountFlags::TYPE_1, |
| 598 | load_op: vk::AttachmentLoadOp::CLEAR, |
| 599 | store_op: vk::AttachmentStoreOp::STORE, |
| 600 | final_layout: vk::ImageLayout::PRESENT_SRC_KHR, |
| 601 | ..Default::default() |
| 602 | }]; |
| 603 | let color_attachment_refs = [vk::AttachmentReference { |
| 604 | attachment: 0, |
| 605 | layout: vk::ImageLayout::COLOR_ATTACHMENT_OPTIMAL, |
| 606 | }]; |
| 607 | let dependencies = [vk::SubpassDependency { |
| 608 | src_subpass: vk::SUBPASS_EXTERNAL, |
| 609 | src_stage_mask: vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT, |
| 610 | dst_access_mask: vk::AccessFlags::COLOR_ATTACHMENT_READ |
| 611 | | vk::AccessFlags::COLOR_ATTACHMENT_WRITE, |
| 612 | dst_stage_mask: vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT, |
| 613 | ..Default::default() |
| 614 | }]; |
| 615 | let subpasses = [vk::SubpassDescription::builder() |
| 616 | .color_attachments(&color_attachment_refs) |
| 617 | .pipeline_bind_point(vk::PipelineBindPoint::GRAPHICS) |
| 618 | .build()]; |
| 619 | let renderpass_create_info = vk::RenderPassCreateInfo::builder() |
| 620 | .attachments(&renderpass_attachments) |
| 621 | .subpasses(&subpasses) |
| 622 | .dependencies(&dependencies); |
| 623 | unsafe { |
| 624 | self.device |
| 625 | .create_render_pass(&renderpass_create_info, None) |
| 626 | .unwrap() |
| 627 | } |
| 628 | } |
| 629 | |
| 630 | pub fn create_render_sync(&self) -> RenderSync { |
| 631 | RenderSync::new(self) |