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

Commit d108909

Browse files
committed
Render target wrapping
1 parent 4b2f185 commit d108909

29 files changed

+256
-110
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,6 +1481,8 @@ ORIGIN: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.h + ../../.
14811481
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm + ../../../flutter/LICENSE
14821482
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h + ../../../flutter/LICENSE
14831483
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm + ../../../flutter/LICENSE
1484+
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h + ../../../flutter/LICENSE
1485+
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm + ../../../flutter/LICENSE
14841486
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h + ../../../flutter/LICENSE
14851487
ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm + ../../../flutter/LICENSE
14861488
ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc + ../../../flutter/LICENSE
@@ -2799,6 +2801,8 @@ ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_gl.cc + ../../
27992801
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h + ../../../flutter/LICENSE
28002802
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h + ../../../flutter/LICENSE
28012803
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm + ../../../flutter/LICENSE
2804+
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h + ../../../flutter/LICENSE
2805+
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm + ../../../flutter/LICENSE
28022806
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc + ../../../flutter/LICENSE
28032807
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.h + ../../../flutter/LICENSE
28042808
ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc + ../../../flutter/LICENSE
@@ -4138,6 +4142,8 @@ FILE: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.h
41384142
FILE: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm
41394143
FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h
41404144
FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm
4145+
FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h
4146+
FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm
41414147
FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h
41424148
FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm
41434149
FILE: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc
@@ -5472,6 +5478,8 @@ FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.cc
54725478
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h
54735479
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h
54745480
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm
5481+
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h
5482+
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm
54755483
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc
54765484
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.h
54775485
FILE: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc

flow/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ source_set("flow") {
9393
"//flutter/common",
9494
"//flutter/common/graphics",
9595
"//flutter/fml",
96+
"//flutter/impeller/aiks:aiks",
9697
"//third_party/skia",
9798
]
9899

flow/embedded_views.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@ bool DisplayListEmbedderViewSlice::recording_ended() {
4242
return builder_ == nullptr;
4343
}
4444

45-
void ExternalViewEmbedder::SubmitFrame(GrDirectContext* context,
46-
std::unique_ptr<SurfaceFrame> frame) {
45+
void ExternalViewEmbedder::SubmitFrame(
46+
GrDirectContext* context,
47+
const std::shared_ptr<impeller::AiksContext>& aiks_context,
48+
std::unique_ptr<SurfaceFrame> frame) {
4749
frame->Submit();
4850
};
4951

flow/embedded_views.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "flutter/flow/surface_frame.h"
1515
#include "flutter/fml/memory/ref_counted.h"
1616
#include "flutter/fml/raster_thread_merger.h"
17-
#include "impeller/renderer/context.h"
17+
#include "impeller/aiks/aiks_context.h"
1818
#include "third_party/skia/include/core/SkCanvas.h"
1919
#include "third_party/skia/include/core/SkPath.h"
2020
#include "third_party/skia/include/core/SkPictureRecorder.h"
@@ -418,7 +418,7 @@ class ExternalViewEmbedder {
418418
// It can also allocate frames for overlay surfaces to compose hybrid views.
419419
virtual void SubmitFrame(
420420
GrDirectContext* context,
421-
const std::shared_ptr<impeller::Context>& impeller_context,
421+
const std::shared_ptr<impeller::AiksContext>& aiks_context,
422422
std::unique_ptr<SurfaceFrame> frame);
423423

424424
// This method provides the embedder a way to do additional tasks after

impeller/renderer/backend/metal/BUILD.gn

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ impeller_component("metal") {
4242
"surface_mtl.mm",
4343
"texture_mtl.h",
4444
"texture_mtl.mm",
45+
"texture_wrapper_mtl.h",
46+
"texture_wrapper_mtl.mm",
4547
"vertex_descriptor_mtl.h",
4648
"vertex_descriptor_mtl.mm",
4749
]

impeller/renderer/backend/metal/texture_mtl.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ class TextureMTL final : public Texture,
1919
id<MTLTexture> texture,
2020
bool wrapped = false);
2121

22-
static std::shared_ptr<TextureMTL> Wrapper(TextureDescriptor desc,
23-
id<MTLTexture> texture);
22+
static std::shared_ptr<TextureMTL> Wrapper(
23+
TextureDescriptor desc,
24+
id<MTLTexture> texture,
25+
std::function<void()> deletion_proc = nullptr);
2426

2527
// |Texture|
2628
~TextureMTL() override;

impeller/renderer/backend/metal/texture_mtl.mm

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99

1010
namespace impeller {
1111

12+
std::shared_ptr<Texture> WrapperMTL(TextureDescriptor desc,
13+
const void* mtl_texture,
14+
std::function<void()> deletion_proc) {
15+
return TextureMTL::Wrapper(desc, (__bridge id<MTLTexture>)mtl_texture,
16+
std::move(deletion_proc));
17+
}
18+
1219
TextureMTL::TextureMTL(TextureDescriptor p_desc,
1320
id<MTLTexture> texture,
1421
bool wrapped)
@@ -28,9 +35,13 @@
2835
is_valid_ = true;
2936
}
3037

31-
std::shared_ptr<TextureMTL> TextureMTL::Wrapper(TextureDescriptor desc,
32-
id<MTLTexture> texture) {
33-
return std::make_shared<TextureMTL>(desc, texture, true);
38+
std::shared_ptr<TextureMTL> TextureMTL::Wrapper(
39+
TextureDescriptor desc,
40+
id<MTLTexture> texture,
41+
std::function<void()> deletion_proc) {
42+
return std::shared_ptr<TextureMTL>(new TextureMTL(desc, texture, true),
43+
[deletion_proc = std::move(deletion_proc)](
44+
TextureMTL* t) { deletion_proc(); });
3445
}
3546

3647
TextureMTL::~TextureMTL() = default;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#pragma once
6+
7+
#include "impeller/core/texture.h"
8+
9+
namespace impeller {
10+
11+
std::shared_ptr<Texture> WrapTextureMTL(
12+
TextureDescriptor desc,
13+
const void* mtl_texture,
14+
std::function<void()> deletion_proc = nullptr);
15+
16+
} // namespace impeller
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "impeller/renderer/backend/metal/texture_wrapper_mtl.h"
6+
7+
#include <Metal/Metal.h>
8+
9+
#include "impeller/renderer/backend/metal/texture_mtl.h"
10+
11+
namespace impeller {
12+
13+
std::shared_ptr<Texture> WrapTextureMTL(TextureDescriptor desc,
14+
const void* mtl_texture,
15+
std::function<void()> deletion_proc) {
16+
return TextureMTL::Wrapper(desc, (__bridge id<MTLTexture>)mtl_texture,
17+
std::move(deletion_proc));
18+
}
19+
20+
} // namespace impeller

shell/common/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ if (enable_unittests) {
315315
":shell_unittests_fixtures",
316316
"//flutter/assets",
317317
"//flutter/common/graphics",
318+
"//flutter/impeller/aiks:aiks",
318319
"//flutter/shell/profiling:profiling_unittests",
319320
"//flutter/shell/version",
320321
"//flutter/testing:fixture_test",

0 commit comments

Comments
 (0)