| OLD | NEW |
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/vulkan/vulkan_render_pass.h" | 5 #include "gpu/vulkan/vulkan_render_pass.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "gpu/vulkan/vulkan_command_buffer.h" | 8 #include "gpu/vulkan/vulkan_command_buffer.h" |
| 9 #include "gpu/vulkan/vulkan_device_queue.h" |
| 9 #include "gpu/vulkan/vulkan_image_view.h" | 10 #include "gpu/vulkan/vulkan_image_view.h" |
| 10 #include "gpu/vulkan/vulkan_implementation.h" | 11 #include "gpu/vulkan/vulkan_implementation.h" |
| 11 #include "gpu/vulkan/vulkan_swap_chain.h" | 12 #include "gpu/vulkan/vulkan_swap_chain.h" |
| 12 #include "ui/gfx/geometry/size.h" | 13 #include "ui/gfx/geometry/size.h" |
| 13 | 14 |
| 14 namespace gpu { | 15 namespace gpu { |
| 15 | 16 |
| 16 VkImageLayout ConvertImageLayout( | 17 VkImageLayout ConvertImageLayout( |
| 17 const VulkanImageView* image_view, | 18 const VulkanImageView* image_view, |
| 18 VulkanRenderPass::ImageLayoutType layout_type) { | 19 VulkanRenderPass::ImageLayoutType layout_type) { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 } | 121 } |
| 121 #endif | 122 #endif |
| 122 | 123 |
| 123 return true; | 124 return true; |
| 124 } | 125 } |
| 125 | 126 |
| 126 VulkanRenderPass::RenderPassData::RenderPassData() {} | 127 VulkanRenderPass::RenderPassData::RenderPassData() {} |
| 127 | 128 |
| 128 VulkanRenderPass::RenderPassData::~RenderPassData() {} | 129 VulkanRenderPass::RenderPassData::~RenderPassData() {} |
| 129 | 130 |
| 130 VulkanRenderPass::VulkanRenderPass() {} | 131 VulkanRenderPass::VulkanRenderPass(VulkanDeviceQueue* device_queue) |
| 132 : device_queue_(device_queue) {} |
| 131 | 133 |
| 132 VulkanRenderPass::~VulkanRenderPass() { | 134 VulkanRenderPass::~VulkanRenderPass() { |
| 133 DCHECK_EQ(static_cast<VkRenderPass>(VK_NULL_HANDLE), render_pass_); | 135 DCHECK_EQ(static_cast<VkRenderPass>(VK_NULL_HANDLE), render_pass_); |
| 134 DCHECK(frame_buffers_.empty()); | 136 DCHECK(frame_buffers_.empty()); |
| 135 } | 137 } |
| 136 | 138 |
| 137 bool VulkanRenderPass::RenderPassData::ValidateData( | 139 bool VulkanRenderPass::RenderPassData::ValidateData( |
| 138 const VulkanSwapChain* swap_chain) const { | 140 const VulkanSwapChain* swap_chain) const { |
| 139 #if DCHECK_IS_ON() | 141 #if DCHECK_IS_ON() |
| 140 for (const AttachmentData& attachment : attachments) { | 142 for (const AttachmentData& attachment : attachments) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 151 return true; | 153 return true; |
| 152 } | 154 } |
| 153 | 155 |
| 154 bool VulkanRenderPass::Initialize(const VulkanSwapChain* swap_chain, | 156 bool VulkanRenderPass::Initialize(const VulkanSwapChain* swap_chain, |
| 155 const RenderPassData& render_pass_data) { | 157 const RenderPassData& render_pass_data) { |
| 156 DCHECK(!executing_); | 158 DCHECK(!executing_); |
| 157 DCHECK_EQ(static_cast<VkRenderPass>(VK_NULL_HANDLE), render_pass_); | 159 DCHECK_EQ(static_cast<VkRenderPass>(VK_NULL_HANDLE), render_pass_); |
| 158 DCHECK(frame_buffers_.empty()); | 160 DCHECK(frame_buffers_.empty()); |
| 159 DCHECK(render_pass_data.ValidateData(swap_chain)); | 161 DCHECK(render_pass_data.ValidateData(swap_chain)); |
| 160 | 162 |
| 161 VkDevice device = GetVulkanDevice(); | 163 VkDevice device = device_queue_->GetVulkanDevice(); |
| 162 VkResult result = VK_SUCCESS; | 164 VkResult result = VK_SUCCESS; |
| 163 | 165 |
| 164 swap_chain_ = swap_chain; | 166 swap_chain_ = swap_chain; |
| 165 num_sub_passes_ = render_pass_data.subpass_datas.size(); | 167 num_sub_passes_ = render_pass_data.subpass_datas.size(); |
| 166 current_sub_pass_ = 0; | 168 current_sub_pass_ = 0; |
| 167 attachment_clear_values_.clear(); | 169 attachment_clear_values_.clear(); |
| 168 attachment_clear_indexes_.clear(); | 170 attachment_clear_indexes_.clear(); |
| 169 | 171 |
| 170 // Fill out attachment information. | 172 // Fill out attachment information. |
| 171 const uint32_t num_attachments = render_pass_data.attachments.size(); | 173 const uint32_t num_attachments = render_pass_data.attachments.size(); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 if (VK_SUCCESS != result) { | 323 if (VK_SUCCESS != result) { |
| 322 DLOG(ERROR) << "vkCreateFramebuffer() failed: " << result; | 324 DLOG(ERROR) << "vkCreateFramebuffer() failed: " << result; |
| 323 return false; | 325 return false; |
| 324 } | 326 } |
| 325 } | 327 } |
| 326 | 328 |
| 327 return true; | 329 return true; |
| 328 } | 330 } |
| 329 | 331 |
| 330 void VulkanRenderPass::Destroy() { | 332 void VulkanRenderPass::Destroy() { |
| 331 VkDevice device = GetVulkanDevice(); | 333 VkDevice device = device_queue_->GetVulkanDevice(); |
| 332 | 334 |
| 333 for (VkFramebuffer frame_buffer : frame_buffers_) { | 335 for (VkFramebuffer frame_buffer : frame_buffers_) { |
| 334 vkDestroyFramebuffer(device, frame_buffer, nullptr); | 336 vkDestroyFramebuffer(device, frame_buffer, nullptr); |
| 335 } | 337 } |
| 336 frame_buffers_.clear(); | 338 frame_buffers_.clear(); |
| 337 | 339 |
| 338 if (VK_NULL_HANDLE != render_pass_) { | 340 if (VK_NULL_HANDLE != render_pass_) { |
| 339 vkDestroyRenderPass(device, render_pass_, nullptr); | 341 vkDestroyRenderPass(device, render_pass_, nullptr); |
| 340 render_pass_ = VK_NULL_HANDLE; | 342 render_pass_ = VK_NULL_HANDLE; |
| 341 } | 343 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 auto iter = | 392 auto iter = |
| 391 std::lower_bound(attachment_clear_indexes_.begin(), | 393 std::lower_bound(attachment_clear_indexes_.begin(), |
| 392 attachment_clear_indexes_.end(), attachment_index); | 394 attachment_clear_indexes_.end(), attachment_index); |
| 393 if (iter != attachment_clear_indexes_.end() && *iter == attachment_index) { | 395 if (iter != attachment_clear_indexes_.end() && *iter == attachment_index) { |
| 394 const uint32_t index = iter - attachment_clear_indexes_.begin(); | 396 const uint32_t index = iter - attachment_clear_indexes_.begin(); |
| 395 attachment_clear_values_[index] = clear_value; | 397 attachment_clear_values_[index] = clear_value; |
| 396 } | 398 } |
| 397 } | 399 } |
| 398 | 400 |
| 399 } // namespace gpu | 401 } // namespace gpu |
| OLD | NEW |