summaryrefslogtreecommitdiff
path: root/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc')
-rw-r--r--chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc23
1 files changed, 22 insertions, 1 deletions
diff --git a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
index 300e188712e..e84f242d08e 100644
--- a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
+++ b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
@@ -10,6 +10,7 @@
#include "gpu/vulkan/vulkan_function_pointers.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/native_pixmap.h"
+#include "ui/ozone/platform/scenic/scenic_surface_factory.h"
namespace ui {
@@ -129,13 +130,15 @@ SysmemBufferCollection::SysmemBufferCollection(gfx::SysmemBufferCollectionId id)
bool SysmemBufferCollection::Initialize(
fuchsia::sysmem::Allocator_Sync* allocator,
+ ScenicSurfaceFactory* scenic_surface_factory,
zx::channel token_handle,
gfx::Size size,
gfx::BufferFormat format,
gfx::BufferUsage usage,
VkDevice vk_device,
size_t min_buffer_count,
- bool force_protected) {
+ bool force_protected,
+ bool register_with_image_pipe) {
DCHECK(IsNativePixmapConfigSupported(format, usage));
DCHECK(!collection_);
DCHECK(!vk_buffer_collection_);
@@ -165,6 +168,10 @@ bool SysmemBufferCollection::Initialize(
vk_device_ = vk_device;
is_protected_ = force_protected;
+ if (register_with_image_pipe) {
+ scenic_overlay_view_.emplace(scenic_surface_factory->CreateScenicSession());
+ }
+
fuchsia::sysmem::BufferCollectionTokenSyncPtr collection_token;
if (token_handle) {
collection_token.Bind(std::move(token_handle));
@@ -365,12 +372,26 @@ bool SysmemBufferCollection::InitializeInternal(
collection_token_for_vulkan;
collection_token->Duplicate(ZX_RIGHT_SAME_RIGHTS,
collection_token_for_vulkan.NewRequest());
+
+ // Duplicate one more token for Scenic if this collection can be used as an
+ // overlay.
+ fidl::InterfaceHandle<fuchsia::sysmem::BufferCollectionToken>
+ collection_token_for_scenic;
+ if (scenic_overlay_view_.has_value()) {
+ collection_token->Duplicate(ZX_RIGHT_SAME_RIGHTS,
+ collection_token_for_scenic.NewRequest());
+ }
+
zx_status_t status = collection_token->Sync();
if (status != ZX_OK) {
ZX_DLOG(ERROR, status) << "fuchsia.sysmem.BufferCollectionToken.Sync()";
return false;
}
+ if (scenic_overlay_view_.has_value()) {
+ scenic_overlay_view_->Initialize(std::move(collection_token_for_scenic));
+ }
+
status = allocator->BindSharedCollection(std::move(collection_token),
collection_.NewRequest());
if (status != ZX_OK) {