@@ -368,6 +368,41 @@ InferMetalPlatformViewCreationCallback(
368368#endif
369369}
370370
371+ static flutter::Shell::CreateCallback<flutter::PlatformView>
372+ InferVulkanPlatformViewCreationCallback (
373+ const FlutterRendererConfig* config,
374+ void * user_data,
375+ flutter::PlatformViewEmbedder::PlatformDispatchTable
376+ platform_dispatch_table,
377+ std::unique_ptr<flutter::EmbedderExternalViewEmbedder>
378+ external_view_embedder) {
379+ if (config->type != kVulkan ) {
380+ return nullptr ;
381+ }
382+
383+ #ifdef SHELL_ENABLE_VULKAN
384+ std::shared_ptr<flutter::EmbedderExternalViewEmbedder> view_embedder =
385+ std::move (external_view_embedder);
386+
387+ std::unique_ptr<flutter::EmbedderSurfaceVulkan> embedder_surface =
388+ std::make_unique<flutter::EmbedderSurfaceVulkan>(view_embedder);
389+
390+ return fml::MakeCopyable (
391+ [embedder_surface = std::move (embedder_surface), platform_dispatch_table,
392+ external_view_embedder = view_embedder](flutter::Shell& shell) mutable {
393+ return std::make_unique<flutter::PlatformViewEmbedder>(
394+ shell, // delegate
395+ shell.GetTaskRunners (), // task runners
396+ std::move (embedder_surface), // embedder surface
397+ platform_dispatch_table, // platform dispatch table
398+ std::move (external_view_embedder) // external view embedder
399+ );
400+ });
401+ #else
402+ return nullptr ;
403+ #endif
404+ }
405+
371406static flutter::Shell::CreateCallback<flutter::PlatformView>
372407InferSoftwarePlatformViewCreationCallback (
373408 const FlutterRendererConfig* config,
@@ -430,6 +465,10 @@ InferPlatformViewCreationCallback(
430465 return InferMetalPlatformViewCreationCallback (
431466 config, user_data, platform_dispatch_table,
432467 std::move (external_view_embedder));
468+ case kVulkan :
469+ return InferVulkanPlatformViewCreationCallback (
470+ config, user_data, platform_dispatch_table,
471+ std::move (external_view_embedder));
433472 default :
434473 return nullptr ;
435474 }
@@ -604,6 +643,14 @@ static sk_sp<SkSurface> MakeSkSurfaceFromBackingStore(
604643#endif
605644}
606645
646+ static sk_sp<SkSurface> MakeSkSurfaceFromBackingStore (
647+ GrDirectContext* context,
648+ const FlutterBackingStoreConfig& config,
649+ const FlutterVulkanBackingStore* vulkan) {
650+ assert (false ); // TODO(bdero)
651+ return nullptr ;
652+ }
653+
607654static std::unique_ptr<flutter::EmbedderRenderTarget>
608655CreateEmbedderRenderTarget (const FlutterCompositor* compositor,
609656 const FlutterBackingStoreConfig& config,
@@ -665,6 +712,11 @@ CreateEmbedderRenderTarget(const FlutterCompositor* compositor,
665712 render_surface =
666713 MakeSkSurfaceFromBackingStore (context, config, &backing_store.metal );
667714 break ;
715+
716+ case kFlutterBackingStoreTypeVulkan :
717+ render_surface =
718+ MakeSkSurfaceFromBackingStore (context, config, &backing_store.vulkan );
719+ break ;
668720 };
669721
670722 if (!render_surface) {
0 commit comments