@@ -103,24 +103,15 @@ bool VulkanSurface::CreateVulkanImage(vulkan::VulkanProvider& vulkan_provider,
103103VulkanSurface::VulkanSurface (
104104 vulkan::VulkanProvider& vulkan_provider,
105105 fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
106- fuchsia::scenic::allocation::AllocatorPtr& scenic_allocator,
107106 sk_sp<GrDirectContext> context,
108107 scenic::Session* session,
109- const SkISize& size)
108+ const SkISize& size,
109+ uint32_t buffer_id)
110110 : vulkan_provider_(vulkan_provider), session_(session), wait_(this ) {
111111 FML_DCHECK (session_);
112112
113- fuchsia::scenic::allocation::BufferCollectionExportToken export_token;
114- fuchsia::scenic::allocation::BufferCollectionImportToken import_token;
115- if (zx::eventpair::create (0 , &export_token.value , &import_token.value ) !=
116- ZX_OK) {
117- FML_DLOG (INFO) << " Failed to create event pair" ;
118- return ;
119- }
120-
121- if (!AllocateDeviceMemory (sysmem_allocator, scenic_allocator,
122- std::move (export_token), std::move (context),
123- size)) {
113+ if (!AllocateDeviceMemory (sysmem_allocator, std::move (context), size,
114+ buffer_id)) {
124115 FML_DLOG (INFO) << " Could not allocate device memory." ;
125116 return ;
126117 }
@@ -130,7 +121,7 @@ VulkanSurface::VulkanSurface(
130121 return ;
131122 }
132123
133- PushSessionImageSetupOps (session, std::move (import_token) );
124+ PushSessionImageSetupOps (session);
134125
135126 std::fill (size_history_.begin (), size_history_.end (), SkISize::MakeEmpty ());
136127
@@ -145,6 +136,9 @@ VulkanSurface::~VulkanSurface() {
145136 if (image_id_) {
146137 session_->Enqueue (scenic::NewReleaseResourceCmd (image_id_));
147138 }
139+ if (buffer_id_) {
140+ session_->DeregisterBufferCollection (buffer_id_);
141+ }
148142 wait_.Cancel ();
149143 wait_.set_object (ZX_HANDLE_INVALID);
150144}
@@ -230,10 +224,9 @@ bool VulkanSurface::CreateFences() {
230224
231225bool VulkanSurface::AllocateDeviceMemory (
232226 fuchsia::sysmem::AllocatorSyncPtr& sysmem_allocator,
233- fuchsia::scenic::allocation::AllocatorPtr& scenic_allocator,
234- fuchsia::scenic::allocation::BufferCollectionExportToken export_token,
235227 sk_sp<GrDirectContext> context,
236- const SkISize& size) {
228+ const SkISize& size,
229+ uint32_t buffer_id) {
237230 if (size.isEmpty ()) {
238231 return false ;
239232 }
@@ -249,14 +242,8 @@ bool VulkanSurface::AllocateDeviceMemory(
249242 status = vulkan_token->Sync ();
250243 LOG_AND_RETURN (status != ZX_OK, " Failed to sync token" );
251244
252- scenic_allocator->RegisterBufferCollection (
253- std::move (export_token), std::move (scenic_token),
254- [](fuchsia::scenic::allocation::Allocator_RegisterBufferCollection_Result
255- result) {
256- if (result.is_err ()) {
257- FML_DLOG (ERROR) << " RegisterBufferCollection failed" ;
258- }
259- });
245+ session_->RegisterBufferCollection (buffer_id, std::move (scenic_token));
246+ buffer_id_ = buffer_id;
260247
261248 VkBufferCollectionCreateInfoFUCHSIA import_info;
262249 import_info.collectionToken = vulkan_token.Unbind ().TakeChannel ().release ();
@@ -383,14 +370,11 @@ bool VulkanSurface::SetupSkiaSurface(sk_sp<GrDirectContext> context,
383370 return true ;
384371}
385372
386- void VulkanSurface::PushSessionImageSetupOps (
387- scenic::Session* session,
388- fuchsia::scenic::allocation::BufferCollectionImportToken import_token) {
373+ void VulkanSurface::PushSessionImageSetupOps (scenic::Session* session) {
389374 if (image_id_ == 0 )
390375 image_id_ = session->AllocResourceId ();
391- session->Enqueue (scenic::NewCreateImage3Cmd (image_id_, sk_surface_->width (),
392- sk_surface_->height (),
393- std::move (import_token), 0 ));
376+ session->Enqueue (scenic::NewCreateImage2Cmd (
377+ image_id_, sk_surface_->width (), sk_surface_->height (), buffer_id_, 0 ));
394378}
395379
396380uint32_t VulkanSurface::GetImageId () {
0 commit comments