aboutsummaryrefslogtreecommitdiff
path: root/src/vulkan/frame_buffer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/vulkan/frame_buffer.cc')
-rw-r--r--src/vulkan/frame_buffer.cc66
1 files changed, 9 insertions, 57 deletions
diff --git a/src/vulkan/frame_buffer.cc b/src/vulkan/frame_buffer.cc
index b6ad13a..47eb82d 100644
--- a/src/vulkan/frame_buffer.cc
+++ b/src/vulkan/frame_buffer.cc
@@ -30,12 +30,10 @@ FrameBuffer::FrameBuffer(
Device* device,
const std::vector<const amber::Pipeline::BufferInfo*>& color_attachments,
amber::Pipeline::BufferInfo depth_stencil_attachment,
- const std::vector<const amber::Pipeline::BufferInfo*>& resolve_targets,
uint32_t width,
uint32_t height)
: device_(device),
color_attachments_(color_attachments),
- resolve_targets_(resolve_targets),
depth_stencil_attachment_(depth_stencil_attachment),
width_(width),
height_(height) {}
@@ -64,16 +62,15 @@ Result FrameBuffer::Initialize(VkRenderPass render_pass) {
attachments.resize(color_attachments_.size());
for (auto* info : color_attachments_) {
- const VkImageUsageFlags usage_flags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
- VK_IMAGE_USAGE_TRANSFER_DST_BIT |
- VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
color_images_.push_back(MakeUnique<TransferImage>(
device_, *info->buffer->GetFormat(), VK_IMAGE_ASPECT_COLOR_BIT,
- VK_IMAGE_TYPE_2D, usage_flags, width_ << info->base_mip_level,
+ VK_IMAGE_TYPE_2D, width_ << info->base_mip_level,
height_ << info->base_mip_level, depth_, info->buffer->GetMipLevels(),
- info->base_mip_level, 1u, info->buffer->GetSamples()));
+ info->base_mip_level, 1u, 1u));
- Result r = color_images_.back()->Initialize();
+ Result r = color_images_.back()->Initialize(
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
+ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
if (!r.IsSuccess())
return r;
@@ -90,37 +87,19 @@ Result FrameBuffer::Initialize(VkRenderPass render_pass) {
aspect |= VK_IMAGE_ASPECT_STENCIL_BIT;
assert(aspect != 0);
- const VkImageUsageFlags usage_flags =
- VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
- VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
-
depth_stencil_image_ = MakeUnique<TransferImage>(
device_, *depth_stencil_attachment_.buffer->GetFormat(), aspect,
- VK_IMAGE_TYPE_2D, usage_flags, width_, height_, depth_, 1u, 0u, 1u, 1u);
+ VK_IMAGE_TYPE_2D, width_, height_, depth_, 1u, 0u, 1u, 1u);
- Result r = depth_stencil_image_->Initialize();
+ Result r = depth_stencil_image_->Initialize(
+ VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT |
+ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT);
if (!r.IsSuccess())
return r;
attachments.push_back(depth_stencil_image_->GetVkImageView());
}
- for (auto* info : resolve_targets_) {
- const VkImageUsageFlags usage_flags = VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
- VK_IMAGE_USAGE_TRANSFER_DST_BIT |
- VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
- resolve_images_.push_back(MakeUnique<TransferImage>(
- device_, *info->buffer->GetFormat(), VK_IMAGE_ASPECT_COLOR_BIT,
- VK_IMAGE_TYPE_2D, usage_flags, width_, height_, depth_, 1u, 0u, 1u,
- 1u));
-
- Result r = resolve_images_.back()->Initialize();
- if (!r.IsSuccess())
- return r;
-
- attachments.push_back(resolve_images_.back()->GetVkImageView());
- }
-
VkFramebufferCreateInfo frame_buffer_info = VkFramebufferCreateInfo();
frame_buffer_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
frame_buffer_info.renderPass = render_pass;
@@ -147,9 +126,6 @@ void FrameBuffer::ChangeFrameLayout(CommandBuffer* command,
for (auto& img : color_images_)
img->ImageBarrier(command, color_layout, color_stage);
- for (auto& img : resolve_images_)
- img->ImageBarrier(command, color_layout, color_stage);
-
if (depth_stencil_image_)
depth_stencil_image_->ImageBarrier(command, depth_layout, depth_stage);
}
@@ -186,9 +162,6 @@ void FrameBuffer::TransferImagesToHost(CommandBuffer* command) {
for (auto& img : color_images_)
img->CopyToHost(command);
- for (auto& img : resolve_images_)
- img->CopyToHost(command);
-
if (depth_stencil_image_)
depth_stencil_image_->CopyToHost(command);
}
@@ -203,15 +176,6 @@ void FrameBuffer::CopyImagesToBuffers() {
info->buffer->GetSizeInBytes());
}
- for (size_t i = 0; i < resolve_images_.size(); ++i) {
- auto& img = resolve_images_[i];
- auto* info = resolve_targets_[i];
- auto* values = info->buffer->ValuePtr();
- values->resize(info->buffer->GetSizeInBytes());
- std::memcpy(values->data(), img->HostAccessibleMemoryPtr(),
- info->buffer->GetSizeInBytes());
- }
-
if (depth_stencil_image_) {
auto* values = depth_stencil_attachment_.buffer->ValuePtr();
values->resize(depth_stencil_attachment_.buffer->GetSizeInBytes());
@@ -241,18 +205,6 @@ void FrameBuffer::CopyBuffersToImages() {
info->buffer->GetSizeInBytes());
}
- for (size_t i = 0; i < resolve_images_.size(); ++i) {
- auto& img = resolve_images_[i];
- auto* info = resolve_targets_[i];
- auto* values = info->buffer->ValuePtr();
- // Nothing to do if our local buffer is empty
- if (values->empty())
- continue;
-
- std::memcpy(img->HostAccessibleMemoryPtr(), values->data(),
- info->buffer->GetSizeInBytes());
- }
-
if (depth_stencil_image_) {
auto* values = depth_stencil_attachment_.buffer->ValuePtr();
// Nothing to do if our local buffer is empty