blob: 8d0ebcc954c8d08647eb3761232b8a25d7a06841 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lib/escher/vk/render_pass.h"
namespace escher {
const ResourceTypeInfo RenderPass::kTypeInfo("RenderPass",
ResourceType::kResource,
ResourceType::kRenderPass);
RenderPass::RenderPass(ResourceManager* manager, vk::RenderPass render_pass)
: Resource(manager),
render_pass_(render_pass),
color_attachment_count_(0),
depth_attachment_count_(0) {
FXL_DCHECK(render_pass);
create_info_.attachmentCount = 0;
create_info_.pAttachments = nullptr;
create_info_.subpassCount = 0;
create_info_.pSubpasses = nullptr;
create_info_.dependencyCount = 0;
create_info_.pDependencies = nullptr;
}
RenderPass::RenderPass(ResourceManager* manager,
uint32_t color_attachment_count,
uint32_t depth_attachment_count,
uint32_t attachment_reference_count,
uint32_t subpass_count,
uint32_t subpass_dependency_count)
: Resource(manager),
color_attachment_count_(color_attachment_count),
depth_attachment_count_(depth_attachment_count) {
FXL_DCHECK(subpass_count > 0);
attachments_.resize(color_attachment_count + depth_attachment_count);
attachment_references_.resize(attachment_reference_count);
subpass_descriptions_.resize(subpass_count);
subpass_dependencies_.resize(subpass_dependency_count);
create_info_.attachmentCount = attachments_.size();
create_info_.pAttachments = attachments_.data();
create_info_.subpassCount = subpass_descriptions_.size();
create_info_.pSubpasses = subpass_descriptions_.data();
create_info_.dependencyCount = subpass_dependencies_.size();
create_info_.pDependencies = subpass_dependencies_.data();
}
RenderPass::~RenderPass() {
if (render_pass_) {
vk_device().destroyRenderPass(render_pass_);
}
}
void RenderPass::CreateRenderPass() {
FXL_DCHECK(!render_pass_);
auto result = vk_device().createRenderPass(create_info_);
if (result.result == vk::Result::eSuccess) {
render_pass_ = result.value;
} else {
FXL_LOG(ERROR) << "Failed to create Vulkan RenderPass.";
}
}
} // namespace escher