Skip to content

Conversation

@robert-ancell
Copy link
Contributor

This framebuffer then gets copied into GTK during the draw calls. This disconnects the Flutter rendering from the GTK rendering which will allow us to render Flutter using EGL directly and support rendering without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts using EGLImage. When running under X11 GTK uses GLX and this is not possible - instead the buffers are copied via the CPU in this case.

@robert-ancell robert-ancell requested a review from mattkae July 14, 2025 04:09
@github-actions github-actions bot added engine flutter/engine related. See also e: labels. platform-linux Building on or for Linux specifically a: desktop Running on desktop labels Jul 14, 2025
…buffer.

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will allow
us to render Flutter using EGL directly and support rendering without
any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts using
EGLImage. When running under X11 GTK uses GLX and this is not possible -
instead the buffers are copied via the CPU in this case.
Copy link
Contributor

@mattkae mattkae left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool 🫘 I've got a couple of small nits, but nothing blocking!

@robert-ancell
Copy link
Contributor Author

@richardexfo if possible can you test this on your ARM device and see if the Blit issue is still there?

@robert-ancell
Copy link
Contributor Author

@bleroux if possible could you test this on your NVIDIA driver and see if the Blit issue is still there?

@bleroux
Copy link
Contributor

bleroux commented Jul 16, 2025

@robert-ancell I tried your PR and it works (no crash).

I also tried on master with a change to the driver_supports_blit function (always returning TRUE) and I don't observe the issue initially reported in #152099. So maybe there was some changes on Ubuntu (I'm using 24.04.02 now, when I reported the issue it was on Ubuntu 24.04) or on the NVidia driver?

@robert-ancell
Copy link
Contributor Author

@robert-ancell I tried your PR and it works (no crash).

I also tried on master with a change to the driver_supports_blit function (always returning TRUE) and I don't observe the issue initially reported in #152099. So maybe there was some changes on Ubuntu (I'm using 24.04.02 now, when I reported the issue it was on Ubuntu 24.04) or on the NVidia driver?

Thanks for confirming!

I think the original issue was the framebuffer that Flutter was writing into was being used by GTK after Flutter had returned from the present layers callback. Therefore it could be cleared or overwritten if GTK did not do this quickly enough. So this would be timing/hardware dependent. With the change in this PR Flutter writes into a framebuffer owned by the embedder, and that is read by GTK ensuring it is always in a valid state.

@robert-ancell robert-ancell added this pull request to the merge queue Jul 17, 2025
Merged via the queue into flutter:master with commit e983e59 Jul 17, 2025
178 checks passed
@robert-ancell robert-ancell deleted the linux-opengl-compositor-frame branch July 17, 2025 00:42
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jul 17, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Jul 17, 2025
flutter/flutter@c2739f0...9c626d9

2025-07-17 [email protected] Roll Skia from 5b4afa58289a to 3673a1f26a63 (1 revision) (flutter/flutter#172274)
2025-07-17 [email protected] Roll Fuchsia Linux SDK from JRFUXSNXExcfjVYvA... to HXdm7P0a4ZJVm_TE-... (flutter/flutter#172268)
2025-07-17 [email protected] Roll Dart SDK from d71df90177e4 to 486f9c0663bc (1 revision) (flutter/flutter#172269)
2025-07-17 [email protected] Roll Skia from 3ad1aace3e02 to 5b4afa58289a (3 revisions) (flutter/flutter#172264)
2025-07-17 [email protected] Perform OpenGL compositing in the Flutter thread and write to a framebuffer. (flutter/flutter#172090)
2025-07-17 [email protected] Licenses cpp 716 (flutter/flutter#172261)
2025-07-16 [email protected] Remove emoji from ci.yaml, because we still live with CP1252 for some silly reason (flutter/flutter#172256)
2025-07-16 [email protected] Roll Skia from bf3f9b77d3a8 to 3ad1aace3e02 (11 revisions) (flutter/flutter#172255)
2025-07-16 [email protected] Sync `CHANGELOG.md` (3.32.7) to `master` branch (flutter/flutter#172253)
2025-07-16 [email protected] Properly lay out and position RenderWebImage (flutter/flutter#171916)
2025-07-16 [email protected] Remove dead link in the doc index. (flutter/flutter#172240)
2025-07-16 [email protected] Roll Dart SDK from 766ee8029b11 to d71df90177e4 (1 revision) (flutter/flutter#172243)
2025-07-16 [email protected] Fix use of `Join-Path` in `last_engine_commit.ps1`(poweshell) (flutter/flutter#172242)
2025-07-16 [email protected] Marks Linux_pixel_7pro integration_ui_driver to be unflaky (flutter/flutter#172213)
2025-07-16 [email protected] [skwasm] Decrease reliance on finalizers/GC (flutter/flutter#172187)
2025-07-16 [email protected] Use `release-*.version` to simplify `last_engine_commit.sh` (no branch operations) (flutter/flutter#172236)
2025-07-16 [email protected] Roll Skia from 59be8479c637 to bf3f9b77d3a8 (7 revisions) (flutter/flutter#172233)
2025-07-16 [email protected] [web] Remove all usages of js_util. (flutter/flutter#171871)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
azatech pushed a commit to azatech/flutter that referenced this pull request Jul 28, 2025
…buffer. (flutter#172090)

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will
allow us to render Flutter using EGL directly and support rendering
without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts
using EGLImage. When running under X11 GTK uses GLX and this is not
possible - instead the buffers are copied via the CPU in this case.
vashworth pushed a commit to vashworth/packages that referenced this pull request Jul 30, 2025
…r#9641)

flutter/flutter@c2739f0...9c626d9

2025-07-17 [email protected] Roll Skia from 5b4afa58289a to 3673a1f26a63 (1 revision) (flutter/flutter#172274)
2025-07-17 [email protected] Roll Fuchsia Linux SDK from JRFUXSNXExcfjVYvA... to HXdm7P0a4ZJVm_TE-... (flutter/flutter#172268)
2025-07-17 [email protected] Roll Dart SDK from d71df90177e4 to 486f9c0663bc (1 revision) (flutter/flutter#172269)
2025-07-17 [email protected] Roll Skia from 3ad1aace3e02 to 5b4afa58289a (3 revisions) (flutter/flutter#172264)
2025-07-17 [email protected] Perform OpenGL compositing in the Flutter thread and write to a framebuffer. (flutter/flutter#172090)
2025-07-17 [email protected] Licenses cpp 716 (flutter/flutter#172261)
2025-07-16 [email protected] Remove emoji from ci.yaml, because we still live with CP1252 for some silly reason (flutter/flutter#172256)
2025-07-16 [email protected] Roll Skia from bf3f9b77d3a8 to 3ad1aace3e02 (11 revisions) (flutter/flutter#172255)
2025-07-16 [email protected] Sync `CHANGELOG.md` (3.32.7) to `master` branch (flutter/flutter#172253)
2025-07-16 [email protected] Properly lay out and position RenderWebImage (flutter/flutter#171916)
2025-07-16 [email protected] Remove dead link in the doc index. (flutter/flutter#172240)
2025-07-16 [email protected] Roll Dart SDK from 766ee8029b11 to d71df90177e4 (1 revision) (flutter/flutter#172243)
2025-07-16 [email protected] Fix use of `Join-Path` in `last_engine_commit.ps1`(poweshell) (flutter/flutter#172242)
2025-07-16 [email protected] Marks Linux_pixel_7pro integration_ui_driver to be unflaky (flutter/flutter#172213)
2025-07-16 [email protected] [skwasm] Decrease reliance on finalizers/GC (flutter/flutter#172187)
2025-07-16 [email protected] Use `release-*.version` to simplify `last_engine_commit.sh` (no branch operations) (flutter/flutter#172236)
2025-07-16 [email protected] Roll Skia from 59be8479c637 to bf3f9b77d3a8 (7 revisions) (flutter/flutter#172233)
2025-07-16 [email protected] [web] Remove all usages of js_util. (flutter/flutter#171871)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC [email protected],[email protected] on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
ksokolovskyi pushed a commit to ksokolovskyi/flutter that referenced this pull request Aug 19, 2025
…buffer. (flutter#172090)

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will
allow us to render Flutter using EGL directly and support rendering
without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts
using EGLImage. When running under X11 GTK uses GLX and this is not
possible - instead the buffers are copied via the CPU in this case.
mboetger pushed a commit to mboetger/flutter that referenced this pull request Sep 18, 2025
…buffer. (flutter#172090)

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will
allow us to render Flutter using EGL directly and support rendering
without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts
using EGLImage. When running under X11 GTK uses GLX and this is not
possible - instead the buffers are copied via the CPU in this case.
robert-ancell added a commit to robert-ancell/flutter that referenced this pull request Sep 19, 2025
…buffer. (flutter#172090)

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will
allow us to render Flutter using EGL directly and support rendering
without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts
using EGLImage. When running under X11 GTK uses GLX and this is not
possible - instead the buffers are copied via the CPU in this case.
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Nov 12, 2025
lucaantonelli pushed a commit to lucaantonelli/flutter that referenced this pull request Nov 21, 2025
…buffer. (flutter#172090)

This framebuffer then gets copied into GTK during the draw calls. This
disconnects the Flutter rendering from the GTK rendering which will
allow us to render Flutter using EGL directly and support rendering
without any views present (required for multi-window).

Framebuffers are shared between the Flutter and GTK OpenGL contexts
using EGLImage. When running under X11 GTK uses GLX and this is not
possible - instead the buffers are copied via the CPU in this case.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: desktop Running on desktop engine flutter/engine related. See also e: labels. platform-linux Building on or for Linux specifically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants