[Impeller] use sync fence for image uploads.#56609
[Impeller] use sync fence for image uploads.#56609auto-submit[bot] merged 11 commits intoflutter:mainfrom
Conversation
| return handle; | ||
| case HandleType::kFence: | ||
| return GLHandle{.sync = gl.FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0)}; | ||
| break; |
| } | ||
|
|
||
| std::optional<GLuint> ReactorGLES::GetGLHandle(const HandleGLES& handle) const { | ||
| if (handle.type == HandleType::kFence) { |
There was a problem hiding this comment.
The locking and the lookup in the handles_ map can be extracted out into a separate method in order to reduce the duplication between ReactorGLES::GetGLHandle and GetGLFence.
| } | ||
| blit_pass->EncodeCommands(context->GetResourceAllocator()); | ||
|
|
||
| bool did_add_fence = context->AddTrackingFence(result_texture); |
There was a problem hiding this comment.
Create the fence after the call to CommandQueue::Submit.
glFenceSync should be called after issuing all of the GL commands that write to the texture. In theory that may not happen until after Submit returns successfully.
(In practice the ReactorGLES::AddOperation calls done during encoding will probably be able to call React, which will call the GL APIs)
| case DebugResourceType::kFrameBuffer: | ||
| return gl.IsFramebuffer(name); | ||
| case DebugResourceType::kFence: | ||
| return true; |
There was a problem hiding this comment.
GLES3 has a glIsSync API that can be used here
There was a problem hiding this comment.
This is only used for debug labeling which I don't believe can be done to the sync fence APIs
|
|
||
| //---------------------------------------------------------------------------- | ||
| /// @brief Attach a sync fence to this texture that will be waited on | ||
| /// before encoding a rendering operatio that references it. |
gaaclarke
left a comment
There was a problem hiding this comment.
Stating the obvious; this should land after #56596 to get the gles3 context.
This is looking good. The test is looking good, the approach is looking right. I don't think we should introduce GLHandle when we have HandleGLES, it seems like we can merge those concepts, use HandleGLES when you need to potentially represent a fence.
gaaclarke
left a comment
There was a problem hiding this comment.
lgtm modulo any remaining of jason's feedback!
|
@jonahwilliams my PR that brings in an opengles3 context landed. This should be good to merge as far as I know. |
flutter/engine@878f593...c1b0e18 2024-11-19 jonahwilliams@google.com [Impeller] use sync fence for image uploads. (flutter/engine#56609) 2024-11-18 reidbaker@google.com Update emulator definitions version to latest available from chrome infra (flutter/engine#56313) 2024-11-18 skia-flutter-autoroll@skia.org Roll Dart SDK from 625e0a9cb67a to 05d58364e92f (1 revision) (flutter/engine#56688) 2024-11-18 chris@bracken.jp iOS: Eliminate unguarded-availability opt-out (flutter/engine#56689) 2024-11-18 jacksongardner@google.com [skwasm] Use `displayWidth`/`displayHeight` instead of `codedWidth`/`codedHeight` (flutter/engine#56686) 2024-11-18 chris@bracken.jp Extract TestGLContext to separate translation unit (flutter/engine#56647) 2024-11-18 skia-flutter-autoroll@skia.org Roll Skia from b79e71223284 to 492e8347d7a4 (2 revisions) (flutter/engine#56687) 2024-11-18 jason-simmons@users.noreply.github.com Update the Skia build scripts for a refactoring of the Fontconfig font manager (flutter/engine#56684) 2024-11-18 chris@bracken.jp iOS,macOS: Enable ARC in flutter_cflags_objc[c] (flutter/engine#56685) 2024-11-18 matanlurey@users.noreply.github.com Re-land "Remove `android_jit_release_x86`." (flutter/engine#56681) 2024-11-18 skia-flutter-autoroll@skia.org Roll Skia from 0d24bd3268ef to b79e71223284 (1 revision) (flutter/engine#56683) 2024-11-18 tugorez@users.noreply.github.com Flutter views can gain focus (flutter/engine#54985) 2024-11-18 skia-flutter-autoroll@skia.org Roll Skia from 0b74d5c3eb4f to 0d24bd3268ef (1 revision) (flutter/engine#56680) 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 jimgraham@google.com,zra@google.com 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
Fixes flutter#158963 If the GLES version is at least 3, then we can attach a sync fence to the texture gles object. If this operation succeeds, then we can use gl.Flush instad of gl.Finish. Then, when binding the texture - if a sync fence is present we wait and then remove the fence.
Fixes flutter/flutter#158963
If the GLES version is at least 3, then we can attach a sync fence to the texture gles object. If this operation succeeds, then we can use gl.Flush instad of gl.Finish. Then, when binding the texture - if a sync fence is present we wait and then remove the fence.