Skip to content

docs: update Impeller advanced blend docs for framebuffer fetch#185457

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
shivanshu877:fix/144004-impeller-blending-docs
Jun 3, 2026
Merged

docs: update Impeller advanced blend docs for framebuffer fetch#185457
auto-submit[bot] merged 4 commits into
flutter:masterfrom
shivanshu877:fix/144004-impeller-blending-docs

Conversation

@shivanshu877

Copy link
Copy Markdown
Contributor

Description

The advanced blend section of blending.md described a three-step cost (end render pass → copy backdrop → blit intermediary) that is no longer accurate on Metal and Vulkan, where framebuffer fetch is now the default.

Changes

  • docs/engine/impeller/docs/blending.md: Rewrites the cost model for advanced blends to describe both code paths:
    • Framebuffer fetch supported (Metal / Vulkan default): no render pass end, no backdrop copy, no intermediary blit — the shader reads the backdrop directly from the framebuffer. Only the source snapshot is required. Still more expensive than a pipeline blend, but significantly cheaper than the legacy path.
    • Framebuffer fetch not supported (some OpenGL ES devices): the original three-step path still applies.

Fixes #144004

@github-actions github-actions Bot added engine flutter/engine related. See also e: labels. team-engine Owned by Engine team d: docs/ flutter/flutter/docs, for contributors labels Apr 23, 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 updates the documentation for Impeller's advanced blends to clarify implementation differences based on framebuffer fetch support. It distinguishes between the optimized path used on Metal and Vulkan and the legacy path used on some OpenGL ES devices. A review comment suggests using more general terminology when describing how shaders retrieve backdrop data to accurately reflect both implementation strategies.

Comment thread docs/engine/impeller/docs/blending.md Outdated
@shivanshu877
shivanshu877 force-pushed the fix/144004-impeller-blending-docs branch from d464657 to c257d0c Compare April 23, 2026 05:24
The advanced blend documentation described a three-step cost
(end render pass, copy backdrop, blit intermediary) that is no
longer accurate on Metal and Vulkan, where framebuffer fetch is
now enabled by default.

Update the docs to describe both code paths:
- Framebuffer fetch path (Metal A8+, most Vulkan): no render pass
  end, no backdrop copy, no blit — much cheaper than before.
- Legacy path (OpenGL ES, iOS simulator, Adreno ≤630, PowerVR):
  the original three-step path still applies.

Fixes flutter#144004
@shivanshu877
shivanshu877 force-pushed the fix/144004-impeller-blending-docs branch from c257d0c to a11e949 Compare April 23, 2026 06:30
@shivanshu877

Copy link
Copy Markdown
Contributor Author

Thank you for the review, @gemini-code-assist!

"sample the backdrop texture" inaccuracy: Fixed — the introductory sentence now reads "access the backdrop color" which correctly covers both the framebuffer fetch path (reads from the framebuffer attachment, no texture involved) and the legacy path (samples a backdrop texture copy).

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Thank you for the update, @shivanshu877. The clarification regarding the framebuffer fetch path and the distinction between the framebuffer attachment and the legacy backdrop texture copy makes the documentation much more accurate and easier to follow. I have no further comments on this PR.

@gaaclarke gaaclarke added the CICD Run CI/CD label Apr 28, 2026

@gaaclarke gaaclarke left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

lgtm

@gaaclarke
gaaclarke requested a review from b-luk April 28, 2026 17:57
@gaaclarke gaaclarke added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 1, 2026
@github-actions github-actions Bot removed the CICD Run CI/CD label Jun 1, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 2, 2026
@auto-submit

auto-submit Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/185457, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@gaaclarke gaaclarke added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 2, 2026
@auto-submit

auto-submit Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/185457, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 2, 2026
@gaaclarke gaaclarke added the autosubmit Merge PR when tree becomes green via auto submit App label Jun 3, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 3, 2026
@auto-submit

auto-submit Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

auto label is removed for flutter/flutter/185457, Failed to enqueue flutter/flutter/185457 with HTTP 400: Pull request Required status check "Merge Queue Guard" is expected..

@gaaclarke gaaclarke added CICD Run CI/CD autosubmit Merge PR when tree becomes green via auto submit App labels Jun 3, 2026
@auto-submit
auto-submit Bot added this pull request to the merge queue Jun 3, 2026
Merged via the queue into flutter:master with commit 530792d Jun 3, 2026
24 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jun 3, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jun 5, 2026
Roll Flutter from 2ba5420a7049 to 1bdf4af29076 (43 revisions)

flutter/flutter@2ba5420...1bdf4af

2026-06-05 [email protected] Roll Packages from 03352b5 to 61bdbb4 (5 revisions) (flutter/flutter#187612)
2026-06-05 [email protected] Roll Skia from 6e003d7f69c8 to a47a9a2c8ae5 (1 revision) (flutter/flutter#187610)
2026-06-05 [email protected] Roll Dart SDK from aad8be4ce307 to 6a9a0efe66eb (10 revisions) (flutter/flutter#187609)
2026-06-05 [email protected] Roll Skia from 494f1bf55f51 to 6e003d7f69c8 (2 revisions) (flutter/flutter#187607)
2026-06-05 [email protected] Roll Fuchsia Linux SDK from ZE1Jy9CtVVi-tjBAE... to N_LiSaBSUsE2LDZgG... (flutter/flutter#187597)
2026-06-05 [email protected] Roll Skia from 59556fdb8c33 to 494f1bf55f51 (2 revisions) (flutter/flutter#187596)
2026-06-04 [email protected] Roll Skia from 8eb107046fd5 to 59556fdb8c33 (1 revision) (flutter/flutter#187590)
2026-06-04 [email protected] Remove `embedded_android_views_integration_test.dart` (flutter/flutter#187465)
2026-06-04 [email protected] Remove Material imports from rendering editable tests (flutter/flutter#186951)
2026-06-04 [email protected] [Impeller] Wait for the Vulkan device to become idle before destroying Vulkan objects in the AHBSwapchainImplVK destructor (flutter/flutter#187477)
2026-06-04 [email protected] [iOS] Eliminate unnecessary redeclaration of FlutterDisplayLink (flutter/flutter#187557)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187583)
2026-06-04 [email protected] Log stdout in adb.dart (flutter/flutter#187531)
2026-06-04 [email protected] Clarify RouterDelegate popRoute bubbling (flutter/flutter#186875)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187584)
2026-06-04 [email protected] Add updating-android-sdk agent skill for rolling Android SDK in CIPD (flutter/flutter#187576)
2026-06-04 [email protected] Fixing alignment issue (flutter/flutter#187518)
2026-06-04 [email protected] [Material Cross Imports] Clean up Material Divider usages (flutter/flutter#187300)
2026-06-04 [email protected] Roll Skia from cecc0e0da9ae to 928ded2a31af (6 revisions) (flutter/flutter#187574)
2026-06-04 [email protected] Use swift demangle to verify internal Swift symbols (flutter/flutter#186835)
2026-06-04 [email protected] Add android 37 platform and build tools to script for android cipd bundle creation (flutter/flutter#187571)
2026-06-04 [email protected] [Impeller] Increase the precision of the IPSampleWithTileModeOES coords parameter to match the input coordinates in the tiled_texture_fill_external shader (flutter/flutter#187545)
2026-06-04 [email protected] Roll Packages from b11504f to 03352b5 (4 revisions) (flutter/flutter#187569)
2026-06-04 [email protected] Roll Dart SDK to Dart 3.13 beta2 (flutter/flutter#187555)
2026-06-04 [email protected] Roll Skia from 611e3f8ceb93 to cecc0e0da9ae (1 revision) (flutter/flutter#187562)
2026-06-04 [email protected] Add step to bootstrap Flutter tool in coverage workflow (flutter/flutter#187199)
2026-06-04 [email protected] Roll Skia from 4fdb859c8da7 to 611e3f8ceb93 (4 revisions) (flutter/flutter#187554)
2026-06-04 [email protected] Roll Skia from 0020aae33f63 to 4fdb859c8da7 (2 revisions) (flutter/flutter#187552)
2026-06-04 [email protected] Roll Fuchsia Linux SDK from ap7MhLX4TdpWRrLS_... to ZE1Jy9CtVVi-tjBAE... (flutter/flutter#187550)
2026-06-04 [email protected] Add vector_math to package issue template (flutter/flutter#187536)
2026-06-04 [email protected] Manual roll Dart SDK from d39850bf4a01 to 3b70b98fa7c0 (flutter/flutter#187519)
2026-06-04 [email protected] Roll Skia from d625048c853a to 0020aae33f63 (20 revisions) (flutter/flutter#187539)
2026-06-04 [email protected] [Impeller][Windows] fix black screen on OpenGL fallback (flutter/flutter#187288)
2026-06-04 [email protected] Fix unintentionally joined path contours (flutter/flutter#187522)
2026-06-03 [email protected] fix: resolve issue #177379 by using lazy buildDirectory.dir() API in build.gradle template (flutter/flutter#187127)
2026-06-03 [email protected] Add a skill for flake analysis (flutter/flutter#187530)
2026-06-03 [email protected] adds linux impeller project flag (flutter/flutter#186982)
2026-06-03 [email protected] Add support for stylus buttons (flutter/flutter#183369)
2026-06-03 [email protected] Prevent Cubic transform from looping on out-of-range input (flutter/flutter#185875)
2026-06-03 [email protected] [Impeller] Reland: Allow attaching specific texture mip levels and slices (flutter/flutter#187470)
2026-06-03 [email protected] [skia] Update image deserial proc (flutter/flutter#185041)
2026-06-03 [email protected] docs: update Impeller advanced blend docs for framebuffer fetch (flutter/flutter#185457)
2026-06-03 [email protected] Handle#6537 fifth grouped tests (flutter/flutter#183720)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
...
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11849)

Roll Flutter from 2ba5420a7049 to 1bdf4af29076 (43 revisions)

flutter/flutter@2ba5420...1bdf4af

2026-06-05 [email protected] Roll Packages from 03352b5 to 61bdbb4 (5 revisions) (flutter/flutter#187612)
2026-06-05 [email protected] Roll Skia from 6e003d7f69c8 to a47a9a2c8ae5 (1 revision) (flutter/flutter#187610)
2026-06-05 [email protected] Roll Dart SDK from aad8be4ce307 to 6a9a0efe66eb (10 revisions) (flutter/flutter#187609)
2026-06-05 [email protected] Roll Skia from 494f1bf55f51 to 6e003d7f69c8 (2 revisions) (flutter/flutter#187607)
2026-06-05 [email protected] Roll Fuchsia Linux SDK from ZE1Jy9CtVVi-tjBAE... to N_LiSaBSUsE2LDZgG... (flutter/flutter#187597)
2026-06-05 [email protected] Roll Skia from 59556fdb8c33 to 494f1bf55f51 (2 revisions) (flutter/flutter#187596)
2026-06-04 [email protected] Roll Skia from 8eb107046fd5 to 59556fdb8c33 (1 revision) (flutter/flutter#187590)
2026-06-04 [email protected] Remove `embedded_android_views_integration_test.dart` (flutter/flutter#187465)
2026-06-04 [email protected] Remove Material imports from rendering editable tests (flutter/flutter#186951)
2026-06-04 [email protected] [Impeller] Wait for the Vulkan device to become idle before destroying Vulkan objects in the AHBSwapchainImplVK destructor (flutter/flutter#187477)
2026-06-04 [email protected] [iOS] Eliminate unnecessary redeclaration of FlutterDisplayLink (flutter/flutter#187557)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187583)
2026-06-04 [email protected] Log stdout in adb.dart (flutter/flutter#187531)
2026-06-04 [email protected] Clarify RouterDelegate popRoute bubbling (flutter/flutter#186875)
2026-06-04 [email protected] Roll Skia from 928ded2a31af to 8eb107046fd5 (1 revision) (flutter/flutter#187584)
2026-06-04 [email protected] Add updating-android-sdk agent skill for rolling Android SDK in CIPD (flutter/flutter#187576)
2026-06-04 [email protected] Fixing alignment issue (flutter/flutter#187518)
2026-06-04 [email protected] [Material Cross Imports] Clean up Material Divider usages (flutter/flutter#187300)
2026-06-04 [email protected] Roll Skia from cecc0e0da9ae to 928ded2a31af (6 revisions) (flutter/flutter#187574)
2026-06-04 [email protected] Use swift demangle to verify internal Swift symbols (flutter/flutter#186835)
2026-06-04 [email protected] Add android 37 platform and build tools to script for android cipd bundle creation (flutter/flutter#187571)
2026-06-04 [email protected] [Impeller] Increase the precision of the IPSampleWithTileModeOES coords parameter to match the input coordinates in the tiled_texture_fill_external shader (flutter/flutter#187545)
2026-06-04 [email protected] Roll Packages from b11504f to 03352b5 (4 revisions) (flutter/flutter#187569)
2026-06-04 [email protected] Roll Dart SDK to Dart 3.13 beta2 (flutter/flutter#187555)
2026-06-04 [email protected] Roll Skia from 611e3f8ceb93 to cecc0e0da9ae (1 revision) (flutter/flutter#187562)
2026-06-04 [email protected] Add step to bootstrap Flutter tool in coverage workflow (flutter/flutter#187199)
2026-06-04 [email protected] Roll Skia from 4fdb859c8da7 to 611e3f8ceb93 (4 revisions) (flutter/flutter#187554)
2026-06-04 [email protected] Roll Skia from 0020aae33f63 to 4fdb859c8da7 (2 revisions) (flutter/flutter#187552)
2026-06-04 [email protected] Roll Fuchsia Linux SDK from ap7MhLX4TdpWRrLS_... to ZE1Jy9CtVVi-tjBAE... (flutter/flutter#187550)
2026-06-04 [email protected] Add vector_math to package issue template (flutter/flutter#187536)
2026-06-04 [email protected] Manual roll Dart SDK from d39850bf4a01 to 3b70b98fa7c0 (flutter/flutter#187519)
2026-06-04 [email protected] Roll Skia from d625048c853a to 0020aae33f63 (20 revisions) (flutter/flutter#187539)
2026-06-04 [email protected] [Impeller][Windows] fix black screen on OpenGL fallback (flutter/flutter#187288)
2026-06-04 [email protected] Fix unintentionally joined path contours (flutter/flutter#187522)
2026-06-03 [email protected] fix: resolve issue #177379 by using lazy buildDirectory.dir() API in build.gradle template (flutter/flutter#187127)
2026-06-03 [email protected] Add a skill for flake analysis (flutter/flutter#187530)
2026-06-03 [email protected] adds linux impeller project flag (flutter/flutter#186982)
2026-06-03 [email protected] Add support for stylus buttons (flutter/flutter#183369)
2026-06-03 [email protected] Prevent Cubic transform from looping on out-of-range input (flutter/flutter#185875)
2026-06-03 [email protected] [Impeller] Reland: Allow attaching specific texture mip levels and slices (flutter/flutter#187470)
2026-06-03 [email protected] [skia] Update image deserial proc (flutter/flutter#185041)
2026-06-03 [email protected] docs: update Impeller advanced blend docs for framebuffer fetch (flutter/flutter#185457)
2026-06-03 [email protected] Handle#6537 fifth grouped tests (flutter/flutter#183720)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
...
via-guy pushed a commit to via-guy/flutter that referenced this pull request Jun 26, 2026
…ter#185457)

## Description

The advanced blend section of `blending.md` described a three-step cost
(end render pass → copy backdrop → blit intermediary) that is no longer
accurate on Metal and Vulkan, where framebuffer fetch is now the
default.

### Changes

- **`docs/engine/impeller/docs/blending.md`**: Rewrites the cost model
for advanced blends to describe both code paths:
- **Framebuffer fetch supported** (Metal / Vulkan default): no render
pass end, no backdrop copy, no intermediary blit — the shader reads the
backdrop directly from the framebuffer. Only the source snapshot is
required. Still more expensive than a pipeline blend, but significantly
cheaper than the legacy path.
- **Framebuffer fetch not supported** (some OpenGL ES devices): the
original three-step path still applies.

Fixes flutter#144004

Co-authored-by: gaaclarke <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD d: docs/ flutter/flutter/docs, for contributors engine flutter/engine related. See also e: labels. team-engine Owned by Engine team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Impeller] Documentation on why advanced blends are slow is out of date.

3 participants