diff options
Diffstat (limited to 'chromium/gpu/vulkan/vulkan_surface.cc')
-rw-r--r-- | chromium/gpu/vulkan/vulkan_surface.cc | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/chromium/gpu/vulkan/vulkan_surface.cc b/chromium/gpu/vulkan/vulkan_surface.cc index 8e20ccb7ded..5dfdff528c3 100644 --- a/chromium/gpu/vulkan/vulkan_surface.cc +++ b/chromium/gpu/vulkan/vulkan_surface.cc @@ -8,8 +8,10 @@ #include <algorithm> +#include "base/logging.h" #include "base/macros.h" #include "base/stl_util.h" +#include "base/threading/scoped_blocking_call.h" #include "gpu/vulkan/vulkan_device_queue.h" #include "gpu/vulkan/vulkan_function_pointers.h" #include "gpu/vulkan/vulkan_swap_chain.h" @@ -68,6 +70,9 @@ gfx::OverlayTransform FromVkSurfaceTransformFlag( } } +// Minimum VkImages in a vulkan swap chain. +uint32_t kMinImageCount = 3u; + } // namespace VulkanSurface::~VulkanSurface() { @@ -165,8 +170,6 @@ bool VulkanSurface::Initialize(VulkanDeviceQueue* device_queue, return false; } - image_count_ = std::max(surface_caps.minImageCount, 3u); - return true; } @@ -184,10 +187,18 @@ gfx::SwapResult VulkanSurface::SwapBuffers() { } gfx::SwapResult VulkanSurface::PostSubBuffer(const gfx::Rect& rect) { - return swap_chain_->PresentBuffer(rect); + return swap_chain_->PostSubBuffer(rect); +} + +void VulkanSurface::PostSubBufferAsync( + const gfx::Rect& rect, + VulkanSwapChain::PostSubBufferCompletionCallback callback) { + swap_chain_->PostSubBufferAsync(rect, std::move(callback)); } void VulkanSurface::Finish() { + base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, + base::BlockingType::WILL_BLOCK); vkQueueWaitIdle(device_queue_->GetVulkanQueue()); } @@ -259,12 +270,12 @@ bool VulkanSurface::CreateSwapChain(const gfx::Size& size, transform_ = transform; auto swap_chain = std::make_unique<VulkanSwapChain>(); - // Create swap chain. - DCHECK_EQ(image_count_, std::max(surface_caps.minImageCount, 3u)); - if (!swap_chain->Initialize( - device_queue_, surface_, surface_format_, image_size_, image_count_, - vk_transform, enforce_protected_memory_, std::move(swap_chain_))) { + auto min_image_count = std::max(surface_caps.minImageCount, kMinImageCount); + if (!swap_chain->Initialize(device_queue_, surface_, surface_format_, + image_size_, min_image_count, vk_transform, + enforce_protected_memory_, + std::move(swap_chain_))) { return false; } |