summaryrefslogtreecommitdiff
path: root/chromium/gpu/vulkan/vulkan_surface.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/gpu/vulkan/vulkan_surface.cc')
-rw-r--r--chromium/gpu/vulkan/vulkan_surface.cc27
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;
}