-
Notifications
You must be signed in to change notification settings - Fork 6k
[Impeller] allocate the impeller onscreen texture from the render target cache. #55943
[Impeller] allocate the impeller onscreen texture from the render target cache. #55943
Conversation
| pass_ = collapsed_parent_pass.value().pass; | ||
| } | ||
| } | ||
| InlinePassContext::InlinePassContext(const ContentContext& renderer, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
entity_count, collapsed_parent_pass, is_collapsed_ are all unused
|
|
||
| class InlinePassContext { | ||
| public: | ||
| struct RenderPassResult { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
None of these are used anymore
| TextureDescriptor new_descriptor = | ||
| color0.resolve_texture->GetTextureDescriptor(); | ||
| secondary_color_texture_ = allocator.CreateTexture(new_descriptor); | ||
| RenderTarget target = renderer.GetRenderTargetCache()->CreateOffscreenMSAA( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When we "flip" the backdrop texture, do the new allocation from the render target cache. Technically this creates some unused transients too but :shrug.
While we still only create a maximum of two backdrop textures per frame, this change ensures we recycle them across frames and avoid continual re-allocation
|
Is there an issue associated with this change? Sounds similar to some of the others I've seen. |
|
The related issues is flutter/flutter#149368 , we still have worst frame instability compared to skia which I suspect is related to the allocation. |
gaaclarke
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks mostly good to me, I just have one question about msaa
| } | ||
|
|
||
| entity.Render(renderer_, *result.pass); | ||
| entity.Render(renderer_, *result); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a FML_DCHECK that we can dereference this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
its null checked on the previous line?
| TextureDescriptor new_descriptor = | ||
| color0.resolve_texture->GetTextureDescriptor(); | ||
| secondary_color_texture_ = allocator.CreateTexture(new_descriptor); | ||
| RenderTarget target = renderer.GetRenderTargetCache()->CreateOffscreenMSAA( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should there be a branch here if we aren't using MSAA?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See above, we'll never use this on a non-MSAA target.
auto color0 = target_.GetColorAttachments().find(0)->second;
if (!color0.resolve_texture) {
VALIDATION_LOG << "EntityPassTarget Flip should never be called for a "
"non-MSAA target.";
|
|
||
| entity_pass_target.Flip( | ||
| *content_context->GetContext()->GetResourceAllocator()); | ||
| entity_pass_target.Flip(*content_context); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here, DCHECK for nullptr.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
|
|
||
| uint32_t GetPassCount() const; | ||
|
|
||
| RenderPassResult GetRenderPass(uint32_t pass_depth); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is just straight up dead code regardless of your change? No need to change this PR but for future PRs it would be easier if refactoring and functional changes are split into 2 different prs =)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I get it. Though I didn't intend to do a large refactoring, I realized all this was dead when I started changing it.
gaaclarke
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm, modulo a few nits on dereferencing a pointer into a reference that's potentially null.
…ngine into allocation_from_rt_cache
…render target cache. (flutter/engine#55943)
…render target cache. (flutter/engine#55943)
…157215) flutter/engine@76d310e...dd37446 2024-10-19 [email protected] Move keymap from FlKeyboardViewDelegate to FlKeyboardManager (flutter/engine#55942) 2024-10-19 [email protected] [UI] fix scene builder parameter naming. (flutter/engine#55969) 2024-10-19 [email protected] iOS: Improve thread safety of first frame callback (flutter/engine#55966) 2024-10-18 [email protected] iOS: Fix flaky tests (remove timeouts) (flutter/engine#55961) 2024-10-18 [email protected] [Impeller] allocate the impeller onscreen texture from the render target cache. (flutter/engine#55943) 2024-10-18 [email protected] Roll Fuchsia Linux SDK from 9F_NaKPd2twhbPwP7... to tNQZ8d5mRYpe3--lk... (flutter/engine#55963) 2024-10-18 [email protected] Started filtering out close line segments in rrect polylines. (flutter/engine#55929) 2024-10-18 [email protected] [Impeller] libImpeller: Allow custom font registrations. (flutter/engine#55934) 2024-10-18 [email protected] Re-reland "iOS: Migrate FlutterEngine to ARC" (flutter/engine#55962) 2024-10-18 [email protected] [Impeller] libImpeller: Add a README. (flutter/engine#55940) 2024-10-18 [email protected] iOS: Eliminate needless profiler metrics ivar (flutter/engine#55957) 2024-10-18 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Impeller] one descriptor pool per frame. (#55939)" (flutter/engine#55959) 2024-10-18 [email protected] Revert "Reland "iOS: Migrate FlutterEngine to ARC" (#55937)" (flutter/engine#55954) 2024-10-18 [email protected] Roll Dart SDK from 993d3069f42e to a51df90298ca (7 revisions) (flutter/engine#55951) 2024-10-18 [email protected] [engine] add back opt out for merged threads. (flutter/engine#55952) 2024-10-18 [email protected] [Impeller] one descriptor pool per frame. (flutter/engine#55939) 2024-10-18 [email protected] [Impeller] add mechanism for sharing bdf inputs. (flutter/engine#55701) Also rolling transitive DEPS: fuchsia/sdk/core/linux-amd64 from 9F_NaKPd2twh to tNQZ8d5mRYpe 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
…get cache. (flutter/engine#55943) Otherwise with backdrop filters we create and throw away a single fullscreen texture every frame. Very wasteful! Does not impact iOS because it has the read from resolve option. Removed some unused parts of the inline_pass_context that were only used in the entity pass days.
Otherwise with backdrop filters we create and throw away a single fullscreen texture every frame. Very wasteful!
Does not impact iOS because it has the read from resolve option. Removed some unused parts of the inline_pass_context that were only used in the entity pass days.