93 const vk::Device&
device)
const {
96 const auto color_attachments_count =
97 colors_.empty() ? 0u : colors_.rbegin()->first + 1u;
99 std::vector<vk::AttachmentDescription> attachments;
101 std::vector<vk::AttachmentReference> color_refs(color_attachments_count,
103 std::vector<vk::AttachmentReference> resolve_refs(color_attachments_count,
107 for (
const auto&
color : colors_) {
108 vk::AttachmentReference color_ref;
109 color_ref.attachment = attachments.size();
110 color_ref.layout = vk::ImageLayout::eGeneral;
111 color_refs[
color.first] = color_ref;
112 attachments.push_back(
color.second);
114 if (
auto found = resolves_.find(
color.first); found != resolves_.end()) {
115 vk::AttachmentReference resolve_ref;
116 resolve_ref.attachment = attachments.size();
117 resolve_ref.layout = vk::ImageLayout::eGeneral;
118 resolve_refs[
color.first] = resolve_ref;
119 attachments.push_back(found->second);
123 if (depth_stencil_.has_value()) {
124 depth_stencil_ref.attachment = attachments.size();
125 depth_stencil_ref.layout = vk::ImageLayout::eGeneral;
126 attachments.push_back(depth_stencil_.value());
129 vk::SubpassDescription subpass0;
130 subpass0.pipelineBindPoint = vk::PipelineBindPoint::eGraphics;
131 subpass0.setInputAttachments(color_refs);
132 subpass0.setColorAttachments(color_refs);
133 subpass0.setResolveAttachments(resolve_refs);
134 subpass0.setPDepthStencilAttachment(&depth_stencil_ref);
136 vk::SubpassDependency self_dep;
137 self_dep.srcSubpass = 0u;
138 self_dep.dstSubpass = 0u;
145 vk::RenderPassCreateInfo render_pass_desc;
146 render_pass_desc.setAttachments(attachments);
147 render_pass_desc.setSubpasses(subpass0);
148 render_pass_desc.setDependencies(self_dep);
150 auto [
result, pass] =
device.createRenderPassUnique(render_pass_desc);
151 if (
result != vk::Result::eSuccess) {
155 return std::move(pass);
159 const vk::Image&
image) {
162 vk::ImageMemoryBarrier barrier;
165 barrier.oldLayout = vk::ImageLayout::eGeneral;
166 barrier.newLayout = vk::ImageLayout::eGeneral;
169 barrier.image =
image;
171 vk::ImageSubresourceRange image_levels;
172 image_levels.aspectMask = vk::ImageAspectFlagBits::eColor;
173 image_levels.baseArrayLayer = 0u;
174 image_levels.baseMipLevel = 0u;
177 barrier.subresourceRange = image_levels;
static const uint8_t buffer[]
uint32_t uint32_t * format