Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 55c62ff

Browse files
author
Jonah Williams
authored
[Impeller] reland: directly encode blit commands for Metal. (#52819)
Fixes bad interaction with render pass clear patch, which potentially created an active blit and render pass encoder at the same time. Make sure that we start/finish the render pass before we start the blit pass.
1 parent e6e5e00 commit 55c62ff

File tree

8 files changed

+206
-348
lines changed

8 files changed

+206
-348
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42656,8 +42656,6 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/gles/texture_gles.cc + ../../
4265642656
ORIGIN: ../../../flutter/impeller/renderer/backend/gles/texture_gles.h + ../../../flutter/LICENSE
4265742657
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/allocator_mtl.h + ../../../flutter/LICENSE
4265842658
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/allocator_mtl.mm + ../../../flutter/LICENSE
42659-
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/blit_command_mtl.h + ../../../flutter/LICENSE
42660-
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/blit_command_mtl.mm + ../../../flutter/LICENSE
4266142659
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/blit_pass_mtl.h + ../../../flutter/LICENSE
4266242660
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/blit_pass_mtl.mm + ../../../flutter/LICENSE
4266342661
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/command_buffer_mtl.h + ../../../flutter/LICENSE
@@ -45531,8 +45529,6 @@ FILE: ../../../flutter/impeller/renderer/backend/gles/texture_gles.cc
4553145529
FILE: ../../../flutter/impeller/renderer/backend/gles/texture_gles.h
4553245530
FILE: ../../../flutter/impeller/renderer/backend/metal/allocator_mtl.h
4553345531
FILE: ../../../flutter/impeller/renderer/backend/metal/allocator_mtl.mm
45534-
FILE: ../../../flutter/impeller/renderer/backend/metal/blit_command_mtl.h
45535-
FILE: ../../../flutter/impeller/renderer/backend/metal/blit_command_mtl.mm
4553645532
FILE: ../../../flutter/impeller/renderer/backend/metal/blit_pass_mtl.h
4553745533
FILE: ../../../flutter/impeller/renderer/backend/metal/blit_pass_mtl.mm
4553845534
FILE: ../../../flutter/impeller/renderer/backend/metal/command_buffer_mtl.h

impeller/renderer/backend/metal/BUILD.gn

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ impeller_component("metal") {
88
sources = [
99
"allocator_mtl.h",
1010
"allocator_mtl.mm",
11-
"blit_command_mtl.h",
12-
"blit_command_mtl.mm",
1311
"blit_pass_mtl.h",
1412
"blit_pass_mtl.mm",
1513
"command_buffer_mtl.h",

impeller/renderer/backend/metal/blit_command_mtl.h

Lines changed: 0 additions & 66 deletions
This file was deleted.

impeller/renderer/backend/metal/blit_command_mtl.mm

Lines changed: 0 additions & 152 deletions
This file was deleted.

impeller/renderer/backend/metal/blit_pass_mtl.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
#include <Metal/Metal.h>
99

10-
#include "impeller/renderer/backend/metal/blit_command_mtl.h"
1110
#include "impeller/renderer/blit_pass.h"
1211

1312
namespace impeller {
@@ -20,10 +19,14 @@ class BlitPassMTL final : public BlitPass {
2019
private:
2120
friend class CommandBufferMTL;
2221

23-
std::vector<std::unique_ptr<BlitEncodeMTL>> commands_;
22+
id<MTLBlitCommandEncoder> encoder_ = nil;
2423
id<MTLCommandBuffer> buffer_ = nil;
25-
std::string label_;
2624
bool is_valid_ = false;
25+
bool is_metal_trace_active_ = false;
26+
// Many parts of the codebase will start writing to a render pass but
27+
// never submit them. This boolean is used to track if a submit happened
28+
// so that in the dtor we can always ensure the render pass is finished.
29+
mutable bool did_finish_encoding_ = false;
2730

2831
explicit BlitPassMTL(id<MTLCommandBuffer> buffer);
2932

@@ -37,8 +40,6 @@ class BlitPassMTL final : public BlitPass {
3740
bool EncodeCommands(
3841
const std::shared_ptr<Allocator>& transients_allocator) const override;
3942

40-
bool EncodeCommands(id<MTLBlitCommandEncoder> pass) const;
41-
4243
// |BlitPass|
4344
bool OnCopyTextureToTextureCommand(std::shared_ptr<Texture> source,
4445
std::shared_ptr<Texture> destination,

0 commit comments

Comments
 (0)