Commit 5d6e8d14 authored by Vasiliy Telezhnikov's avatar Vasiliy Telezhnikov Committed by Commit Bot

Fix WebView interop mode with Vulkan hwui

This CL fixes two problems with WebView/SkiaRenderer/GL with vulkan hwui:
* Missing allocator, chrome introduced one to use single instance with Skia.
* Wrong fboid for query alpha capabilities.

Bug: 984955
Change-Id: Ib8e9fb57bcf9b11557aac5a412abb91556819038
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2314419Reviewed-by: default avatarPeng Huang <penghuang@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791036}
parent ec43c758
......@@ -89,6 +89,7 @@ source_set("gfx") {
"//gpu/skia_bindings",
"//gpu/vulkan:vulkan",
"//gpu/vulkan/init",
"//gpu/vulkan/init:skia",
"//services/viz/privileged/mojom",
"//services/viz/public/mojom",
"//skia",
......
......@@ -12,6 +12,7 @@
#include "base/files/file_path.h"
#include "base/logging.h"
#include "base/native_library.h"
#include "gpu/vulkan/init/gr_vk_memory_allocator_impl.h"
#include "gpu/vulkan/init/vulkan_factory.h"
#include "gpu/vulkan/vulkan_device_queue.h"
#include "gpu/vulkan/vulkan_fence_helper.h"
......@@ -173,7 +174,7 @@ bool AwVulkanContextProvider::Initialize(AwDrawFn_InitVkParams* params) {
.fVkExtensions = &vk_extensions,
.fDeviceFeatures = params->device_features,
.fDeviceFeatures2 = params->device_features_2,
.fMemoryAllocator = nullptr,
.fMemoryAllocator = gpu::CreateGrVkMemoryAllocator(device_queue_.get()),
.fGetProc = get_proc,
.fOwnsInstanceAndDevice = false,
};
......
......@@ -37,7 +37,8 @@ SkiaOutputDeviceWebView::SkiaOutputDeviceWebView(
DCHECK(context_state_->context());
// Get alpha bits from the default frame buffer.
glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER,
gl_surface_->GetBackingFramebufferObject());
context_state_->gr_context()->resetContext(kRenderTarget_GrGLBackendState);
GLint alpha_bits = 0;
glGetIntegerv(GL_ALPHA_BITS, &alpha_bits);
......
......@@ -291,6 +291,9 @@ bool VulkanDeviceQueue::InitializeForWebView(
vk_queue_index_ = vk_queue_index;
enabled_extensions_ = std::move(enabled_extensions);
vma::CreateAllocator(vk_physical_device_, vk_device_, vk_instance_,
&vma_allocator_);
cleanup_helper_ = std::make_unique<VulkanFenceHelper>(this);
return true;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment