Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Impeller] cache and reuse openGL framebuffer attachments. #56746

Merged
merged 3 commits into from
Nov 22, 2024

Conversation

jonahwilliams
Copy link
Member

Creating and attaching textures/render buffers to a FBO is an expensive operation. Similar to how we cache vulkan framebuffers/render passes, we can cache the FBO object on the color0 texture to avoid extra state invalidation.

Part of flutter/flutter#159177

@@ -207,13 +207,6 @@ void RenderPassGLES::ResetGLState(const ProcTableGLES& gl) {
}

GLuint fbo = GL_NONE;
fml::ScopedCleanupClosure delete_fbo([&gl, &fbo]() {
if (fbo != GL_NONE) {
gl.BindFramebuffer(GL_FRAMEBUFFER, GL_NONE);
Copy link
Member Author

Choose a reason for hiding this comment

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

from looking at profiles binding this framebuffer actually triggers a driver workload to flush from fb0.

Copy link
Member

@gaaclarke gaaclarke left a comment

Choose a reason for hiding this comment

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

This looks like it will do it, did you get a chance to profile it? Storing the fbo on the texture is a bit weird. I think it might make more sense to store on the render pass. Otherwise looking good.

@jonahwilliams
Copy link
Member Author

profiles seem slightly faster but I'd want real benchmarks to confirm.

Storing the fbo on the texture is a bit weird. I think it might make more sense to store on the render pass. Otherwise looking good.

The render pass is a temporary object/one shot object, so storing it there doesn't buy us anything. This matches how we cache the vulkan framebuffer object on the color attachment.

@@ -217,6 +217,9 @@ TextureGLES::TextureGLES(std::shared_ptr<ReactorGLES> reactor,
// |Texture|
TextureGLES::~TextureGLES() {
reactor_->CollectHandle(handle_);
if (cached_fbo_ != GL_NONE) {
reactor_->GetProcTable().DeleteFramebuffers(1, &cached_fbo_);
Copy link
Member

Choose a reason for hiding this comment

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

I'm a bit fuzzy on how reactor is supposed to work. Are you supposed to schedule this to be deleted with it?

Copy link
Member Author

Choose a reason for hiding this comment

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

only if its stored in the reactor as a Handle, which this one isn't

@jonahwilliams jonahwilliams marked this pull request as ready for review November 22, 2024 17:42
@jonahwilliams jonahwilliams added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 22, 2024
@auto-submit auto-submit bot merged commit 202506d into flutter:main Nov 22, 2024
30 checks passed
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Nov 22, 2024
…159345)

flutter/engine@6f941c9...202506d

2024-11-22 [email protected] [Impeller] cache and reuse openGL
framebuffer attachments. (flutter/engine#56746)
2024-11-22 [email protected] Roll Skia from 700e685861c8 to
e7caf38140ce (25 revisions) (flutter/engine#56756)
2024-11-22 [email protected] Roll Dart SDK from
c1106f7e4cde to 141291fd570d (1 revision) (flutter/engine#56748)
2024-11-22 [email protected] [engine] more consistently flush
dart event loop, run vsync callback immediately (flutter/engine#56738)
2024-11-22 [email protected] Extract backend-specific code in
ShellTestPlatformView (flutter/engine#56722)
2024-11-22 [email protected] Eliminate
ShellTestPlatformView::BackendType::kDefaultBackendType
(flutter/engine#56744)
2024-11-22 [email protected] Roll Skia from 2614590b4f32 to
700e685861c8 (1 revision) (flutter/engine#56725)
2024-11-22 [email protected] Roll Dart SDK from
b36e4d731d67 to c1106f7e4cde (12 revisions) (flutter/engine#56742)
2024-11-22 [email protected] [Impeller] libImpeller: A C++ wrapper
to the Impeller API. (flutter/engine#56682)
2024-11-21 [email protected] [Impeller] Run simulator tests with
Impeller enabled. (flutter/engine#56740)

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

To file a bug in Flutter:
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
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Nov 22, 2024
…visions) (#159345)" (#159360)

<!-- start_original_pr_link -->
Reverts: #159345
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: hannah-hyj
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: tree is red on " Linux_build_test
flutter_gallery__transition_perf_hybrid" after engine auto roll
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: engine-flutter-autoroll
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {fluttergithubbot}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:

flutter/engine@6f941c9...202506d

2024-11-22 [email protected] [Impeller] cache and reuse openGL
framebuffer attachments. (flutter/engine#56746)
2024-11-22 [email protected] Roll Skia from 700e685861c8 to
e7caf38140ce (25 revisions) (flutter/engine#56756)
2024-11-22 [email protected] Roll Dart SDK from
c1106f7e4cde to 141291fd570d (1 revision) (flutter/engine#56748)
2024-11-22 [email protected] [engine] more consistently flush
dart event loop, run vsync callback immediately (flutter/engine#56738)
2024-11-22 [email protected] Extract backend-specific code in
ShellTestPlatformView (flutter/engine#56722)
2024-11-22 [email protected] Eliminate
ShellTestPlatformView::BackendType::kDefaultBackendType
(flutter/engine#56744)
2024-11-22 [email protected] Roll Skia from 2614590b4f32 to
700e685861c8 (1 revision) (flutter/engine#56725)
2024-11-22 [email protected] Roll Dart SDK from
b36e4d731d67 to c1106f7e4cde (12 revisions) (flutter/engine#56742)
2024-11-22 [email protected] [Impeller] libImpeller: A C++ wrapper
to the Impeller API. (flutter/engine#56682)
2024-11-21 [email protected] [Impeller] Run simulator tests with
Impeller enabled. (flutter/engine#56740)

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

To file a bug in Flutter:
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

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <[email protected]>
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Nov 23, 2024
…159364)

flutter/engine@6f941c9...f776c3a

2024-11-22 [email protected] Roll Skia from e7caf38140ce to
c3d9596a93f8 (2 revisions) (flutter/engine#56765)
2024-11-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts
"[engine] more consistently flush dart event loop, run vsync callback
immediately (#56738)" (flutter/engine#56767)
2024-11-22 [email protected] Roll Dart SDK from
8b65a7a628e2 to eb01a0430f72 (2 revisions) (flutter/engine#56764)
2024-11-22 [email protected] [Impeller] delete Impeller sim opt
out. (flutter/engine#56706)
2024-11-22 [email protected] [Impeller] Ensure that
SnapshotControllerImpeller has a rendering context before creating the
snapshot (flutter/engine#56743)
2024-11-22 [email protected] [DisplayList] migrate DlColorSource objects
to Impeller geometry (flutter/engine#56735)
2024-11-22 [email protected] [Impeller] libImpeller: Tinker on the
README. (flutter/engine#56761)
2024-11-22 [email protected] [Impeller] dont create temp vec for
discard. (flutter/engine#56759)
2024-11-22 [email protected] Roll Fuchsia Linux SDK from
zhFzwYCH-N_wasTnM... to D5CBHuB2c-v3Zai-c... (flutter/engine#56757)
2024-11-22 [email protected] Roll Dart SDK from
141291fd570d to 8b65a7a628e2 (1 revision) (flutter/engine#56755)
2024-11-22 [email protected] [Impeller] cache and reuse openGL
framebuffer attachments. (flutter/engine#56746)
2024-11-22 [email protected] Roll Skia from 700e685861c8 to
e7caf38140ce (25 revisions) (flutter/engine#56756)
2024-11-22 [email protected] Roll Dart SDK from
c1106f7e4cde to 141291fd570d (1 revision) (flutter/engine#56748)
2024-11-22 [email protected] [engine] more consistently flush
dart event loop, run vsync callback immediately (flutter/engine#56738)
2024-11-22 [email protected] Extract backend-specific code in
ShellTestPlatformView (flutter/engine#56722)
2024-11-22 [email protected] Eliminate
ShellTestPlatformView::BackendType::kDefaultBackendType
(flutter/engine#56744)
2024-11-22 [email protected] Roll Skia from 2614590b4f32 to
700e685861c8 (1 revision) (flutter/engine#56725)
2024-11-22 [email protected] Roll Dart SDK from
b36e4d731d67 to c1106f7e4cde (12 revisions) (flutter/engine#56742)
2024-11-22 [email protected] [Impeller] libImpeller: A C++ wrapper
to the Impeller API. (flutter/engine#56682)
2024-11-21 [email protected] [Impeller] Run simulator tests with
Impeller enabled. (flutter/engine#56740)

Also rolling transitive DEPS:
  fuchsia/sdk/core/linux-amd64 from zhFzwYCH-N_w to D5CBHuB2c-v3

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

To file a bug in Flutter:
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App e: impeller
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants