From 3d7eeccb5595204ba08f71d2dcf92ae2044e662f Mon Sep 17 00:00:00 2001 From: gaaclarke <30870216+gaaclarke@users.noreply.github.com> Date: Fri, 21 Apr 2023 10:45:26 -0700 Subject: [PATCH] [impeller] fixed flake where blit wasn't tracking its texture (flutter/engine#41347) fixes https://github.com/flutter/flutter/issues/125147 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [ ] I added new tests to check the change I am making or feature I am adding, or Hixie said the PR is test-exempt. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat --- .../renderer/backend/vulkan/blit_command_vk.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engine/src/flutter/impeller/renderer/backend/vulkan/blit_command_vk.cc b/engine/src/flutter/impeller/renderer/backend/vulkan/blit_command_vk.cc index 8636950744..1c45c3411d 100644 --- a/engine/src/flutter/impeller/renderer/backend/vulkan/blit_command_vk.cc +++ b/engine/src/flutter/impeller/renderer/backend/vulkan/blit_command_vk.cc @@ -29,6 +29,10 @@ bool BlitCopyTextureToTextureCommandVK::Encode( const auto& src = TextureVK::Cast(*source); const auto& dst = TextureVK::Cast(*destination); + if (!encoder.Track(source) || !encoder.Track(destination)) { + return false; + } + LayoutTransition src_tran; src_tran.cmd_buffer = cmd_buffer; src_tran.new_layout = vk::ImageLayout::eTransferSrcOptimal; @@ -96,6 +100,10 @@ bool BlitCopyTextureToBufferCommandVK::Encode(CommandEncoderVK& encoder) const { // cast source and destination to TextureVK const auto& src = TextureVK::Cast(*source); + if (!encoder.Track(source)) { + return false; + } + LayoutTransition transition; transition.cmd_buffer = cmd_buffer; transition.new_layout = vk::ImageLayout::eTransferSrcOptimal; @@ -190,6 +198,10 @@ bool BlitGenerateMipmapCommandVK::Encode(CommandEncoderVK& encoder) const { const auto& image = src.GetImage(); const auto& cmd = encoder.GetCommandBuffer(); + if (!encoder.Track(texture)) { + return false; + } + // Transition the base mip level to transfer-src layout so we can read from // it and transition the rest to dst-optimal since they are going to be // written to.