Skip to content

[Linux] Move compositor shader into its own GObject#188144

Merged
robert-ancell merged 4 commits into
flutter:masterfrom
robert-ancell:refactor-linux-compositor-shader
Jun 22, 2026
Merged

[Linux] Move compositor shader into its own GObject#188144
robert-ancell merged 4 commits into
flutter:masterfrom
robert-ancell:refactor-linux-compositor-shader

Conversation

@robert-ancell

Copy link
Copy Markdown
Contributor

Extracts the OpenGL shader program used by FlCompositorOpenGL into a new FlCompositorOpenGLShader GObject. This encapsulates the shader sources, program, uniform locations and vertex buffer, along with their compilation and cleanup, behind a small API.

Extracts the OpenGL shader program used by FlCompositorOpenGL into a new
FlCompositorOpenGLShader GObject. This encapsulates the shader sources,
program, uniform locations and vertex buffer, along with their
compilation and cleanup, behind a small API.
@robert-ancell robert-ancell requested a review from a team as a code owner June 18, 2026 02:09
@flutter-dashboard flutter-dashboard Bot added the CICD Run CI/CD label Jun 18, 2026
@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@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 team-linux Owned by the Linux platform team labels Jun 18, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the Linux platform's OpenGL compositor by extracting shader compilation, binding, and uniform configuration logic from FlCompositorOpenGL into a new dedicated class, FlCompositorOpenGLShader. Feedback on these changes focuses on improving robustness: checking for null pointers during dispose to prevent crashes on subsequent calls, validating constructor arguments, and ensuring the shader program compiled successfully before attempting to use it or set uniform values.

Comment thread engine/src/flutter/shell/platform/linux/fl_compositor_opengl_shader.cc Outdated
- Fix the vertical layer offset to divide by frame height instead of
  width in composite_layer.
- Make fl_compositor_opengl_shader_dispose safe to run multiple times by
  guarding OpenGL cleanup on the OpenGL manager being set.
- Add a g_return_val_if_fail check to fl_compositor_opengl_shader_new.
@github-actions github-actions Bot removed the CICD Run CI/CD label Jun 18, 2026
@robert-ancell robert-ancell added the CICD Run CI/CD label Jun 18, 2026
mattkae
mattkae previously approved these changes Jun 18, 2026

@mattkae mattkae left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Solid change! I have a suggestion, but nothing blocking

Comment thread engine/src/flutter/shell/platform/linux/fl_compositor_opengl_shader.cc Outdated
@github-actions github-actions Bot removed the CICD Run CI/CD label Jun 18, 2026
@robert-ancell robert-ancell added the CICD Run CI/CD label Jun 18, 2026
@robert-ancell robert-ancell enabled auto-merge June 18, 2026 23:32
@robert-ancell robert-ancell requested a review from mattkae June 18, 2026 23:48
@robert-ancell robert-ancell added this pull request to the merge queue Jun 22, 2026
Merged via the queue into flutter:master with commit 8e7a634 Jun 22, 2026
201 checks passed
@robert-ancell robert-ancell deleted the refactor-linux-compositor-shader branch June 22, 2026 18:40
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jun 23, 2026
flutter/flutter@e228771...87224e0

2026-06-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 5cae7f9ada62 to 3a66ea7b9aaa (1 revision) (flutter/flutter#188379)
2026-06-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 1e6c246bb73a to 5cae7f9ada62 (2 revisions) (flutter/flutter#188370)
2026-06-23 engine-flutter-autoroll@skia.org Roll Skia from 766f21ae61dc to ffac3e91fbc7 (24 revisions) (flutter/flutter#188366)
2026-06-23 737941+loic-sharma@users.noreply.github.com [Windows] Add public API to post task to platform thread (flutter/flutter#187365)
2026-06-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 7ab0179ce4d4 to 1e6c246bb73a (1 revision) (flutter/flutter#188354)
2026-06-23 robert.ancell@canonical.com Fix byte/character offset confusion in FlAccessibleTextField (flutter/flutter#188138)
2026-06-22 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from Lm76V7lvxVA0r1De5... to RymJjIj7dd5vQ3Cnh... (flutter/flutter#188353)
2026-06-22 137456488+flutter-pub-roller-bot@users.noreply.github.com Roll pub packages (flutter/flutter#188355)
2026-06-22 154381524+flutteractionsbot@users.noreply.github.com Sync CHANGELOG.md from stable (flutter/flutter#188331)
2026-06-22 engine-flutter-autoroll@skia.org Roll Skia from 5fbb9bbd889c to 766f21ae61dc (2 revisions) (flutter/flutter#188184)
2026-06-22 49699333+dependabot[bot]@users.noreply.github.com Bump actions/checkout from 6.0.3 to 7.0.0 in the all-github-actions group (flutter/flutter#188350)
2026-06-22 robert.ancell@canonical.com Use g_signal_connect_object in the Linux embedder (flutter/flutter#188241)
2026-06-22 robert.ancell@canonical.com Disconnect from parent window signal when view is destroyed (flutter/flutter#185521)
2026-06-22 rmacnak@google.com Remove many absolute paths from build commands. (flutter/flutter#187765)
2026-06-22 haiderqadir.hq@gmail.com Fix spelling mistake in documentation (wether → whether) (flutter/flutter#186141)
2026-06-22 engine-flutter-autoroll@skia.org Roll Dart SDK from a748c4b15399 to 7ab0179ce4d4 (2 revisions) (flutter/flutter#188332)
2026-06-22 robert.ancell@canonical.com [Linux] Move compositor shader into its own GObject (flutter/flutter#188144)
2026-06-22 bkonyi@google.com Add agent skills for orchestrating cherry-picks to stable and beta channels (flutter/flutter#187860)
2026-06-22 engine-flutter-autoroll@skia.org Roll Packages from c516c92 to cd5194a (1 revision) (flutter/flutter#188312)

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 stuartmorgan@google.com 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
via-guy pushed a commit to via-guy/flutter that referenced this pull request Jun 26, 2026
Extracts the OpenGL shader program used by FlCompositorOpenGL into a new
FlCompositorOpenGLShader GObject. This encapsulates the shader sources,
program, uniform locations and vertex buffer, along with their
compilation and cleanup, behind a small API.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a: desktop Running on desktop CICD Run CI/CD engine flutter/engine related. See also e: labels. platform-linux Building on or for Linux specifically team-linux Owned by the Linux platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants