From 55da4fb37dfc2bfc0766941e9150d2b3dc949170 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 21 Feb 2024 10:37:21 -0800 Subject: [PATCH] Make the GL context current in EmbedderSurfaceGLImpeller before creating the GPU surface (flutter/engine#50807) The GPUSurfaceGLImpeller ctor creates an AiksContext/ContentContext, which loads the shader pipelines. If the current thread does not have a GL context and can not execute ReactorGLES operations, then the pipeline futures will not complete. This can cause the raster thread to hang if the reactor has not run and the futures are still incomplete when a rendering task later needs to obtain the pipeline. --- .../flutter/shell/platform/embedder/BUILD.gn | 2 +- .../embedder/embedder_surface_gl_impeller.cc | 5 +++++ .../fixtures/impeller_gl_gradient.png | Bin 37220 -> 0 bytes .../embedder/fixtures/impeller_gl_test.png | Bin 0 -> 3274 bytes .../platform/embedder/fixtures/main.dart | 18 ++++++++++++++++++ .../embedder/tests/embedder_gl_unittests.cc | 4 ++-- 6 files changed, 26 insertions(+), 3 deletions(-) delete mode 100644 engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png create mode 100644 engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_test.png diff --git a/engine/src/flutter/shell/platform/embedder/BUILD.gn b/engine/src/flutter/shell/platform/embedder/BUILD.gn index b83364b8b0..e4754f1d55 100644 --- a/engine/src/flutter/shell/platform/embedder/BUILD.gn +++ b/engine/src/flutter/shell/platform/embedder/BUILD.gn @@ -242,7 +242,7 @@ test_fixtures("fixtures") { "fixtures/dpr_noxform.png", "fixtures/dpr_xform.png", "fixtures/gradient.png", - "fixtures/impeller_gl_gradient.png", + "fixtures/impeller_gl_test.png", "fixtures/vk_dpr_noxform.png", "fixtures/vk_gradient.png", "fixtures/gradient_metal.png", diff --git a/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc b/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc index cae8037083..c7efa86de8 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc +++ b/engine/src/flutter/shell/platform/embedder/embedder_surface_gl_impeller.cc @@ -178,6 +178,11 @@ EmbedderSurfaceGLImpeller::GLContextFramebufferInfo() const { // |EmbedderSurface| std::unique_ptr EmbedderSurfaceGLImpeller::CreateGPUSurface() { + // Ensure that the GL context is current before creating the GPU surface. + // GPUSurfaceGLImpeller initialization will set up shader pipelines, and the + // current thread needs to be able to execute reactor operations. + GLContextMakeCurrent(); + return std::make_unique( this, // GPU surface GL delegate impeller_context_, // Impeller context diff --git a/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png b/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_gradient.png deleted file mode 100644 index 76fd5b12f1f122de5e771763d7c0af67af28837d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37220 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 diff --git a/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_test.png b/engine/src/flutter/shell/platform/embedder/fixtures/impeller_gl_test.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1fdb37ef1518e8bf88abd2696b1eb570abb4ba GIT binary patch literal 3274 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>iV_;yIRn}C%z`(##?Bp53!NI{%!;#X# zz`)b!>EaktG3V{ggPhEcJS>iD3;$`J_LSNCU^SP+ne7*E&Xi?fXgKiv8v_Hw16vjj z28IcO3JeSmZVe0!43dmY3=An$6MXjj%R%GcUp#lDJ-;)Lf#E}VjRONiLk|NZ1A`G0 z3j@Om4gm%R1?5q}(Eu4liQ&x6nR{)S7#J$p3h(jINFjMj#u gwISi!@H6v#bFQ`FOD_j7FfcH9y85}Sb4q9e0F;Tm