diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter
index e2eb8ee..69d87bc 100644
--- a/ci/licenses_golden/licenses_flutter
+++ b/ci/licenses_golden/licenses_flutter
@@ -1482,8 +1482,6 @@
 ORIGIN: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc + ../../../flutter/LICENSE
@@ -2803,10 +2801,6 @@
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.cc + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.h + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.cc + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.h + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.cc + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_struct_macros.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface.cc + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface.h + ../../../flutter/LICENSE
@@ -2814,8 +2808,6 @@
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h + ../../../flutter/LICENSE
-ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_software.h + ../../../flutter/LICENSE
 ORIGIN: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc + ../../../flutter/LICENSE
@@ -4156,8 +4148,6 @@
 FILE: ../../../flutter/impeller/renderer/backend/metal/surface_mtl.mm
 FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.h
 FILE: ../../../flutter/impeller/renderer/backend/metal/texture_mtl.mm
-FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.h
-FILE: ../../../flutter/impeller/renderer/backend/metal/texture_wrapper_mtl.mm
 FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.h
 FILE: ../../../flutter/impeller/renderer/backend/metal/vertex_descriptor_mtl.mm
 FILE: ../../../flutter/impeller/renderer/backend/vulkan/allocator_vk.cc
@@ -5493,10 +5483,6 @@
 FILE: ../../../flutter/shell/platform/embedder/embedder_render_target.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.cc
 FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_cache.h
-FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.cc
-FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_impeller.h
-FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.cc
-FILE: ../../../flutter/shell/platform/embedder/embedder_render_target_skia.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_struct_macros.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface.cc
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface.h
@@ -5504,8 +5490,6 @@
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_gl.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal.mm
-FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.h
-FILE: ../../../flutter/shell/platform/embedder/embedder_surface_metal_impeller.mm
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.cc
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_software.h
 FILE: ../../../flutter/shell/platform/embedder/embedder_surface_vulkan.cc
diff --git a/flow/BUILD.gn b/flow/BUILD.gn
index 560b067..efda895 100644
--- a/flow/BUILD.gn
+++ b/flow/BUILD.gn
@@ -4,7 +4,6 @@
 
 import("//build/fuchsia/sdk.gni")
 import("//flutter/common/config.gni")
-import("//flutter/impeller/tools/impeller.gni")
 import("//flutter/shell/config.gni")
 import("//flutter/testing/testing.gni")
 
@@ -97,10 +96,6 @@
     "//third_party/skia",
   ]
 
-  if (impeller_supports_rendering) {
-    deps += [ "//flutter/impeller" ]
-  }
-
   public_deps = [ "//flutter/display_list" ]
 }
 
diff --git a/flow/embedded_views.cc b/flow/embedded_views.cc
index c19f1c1..b76c973 100644
--- a/flow/embedded_views.cc
+++ b/flow/embedded_views.cc
@@ -42,10 +42,8 @@
   return builder_ == nullptr;
 }
 
-void ExternalViewEmbedder::SubmitFrame(
-    GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
-    std::unique_ptr<SurfaceFrame> frame) {
+void ExternalViewEmbedder::SubmitFrame(GrDirectContext* context,
+                                       std::unique_ptr<SurfaceFrame> frame) {
   frame->Submit();
 };
 
diff --git a/flow/embedded_views.h b/flow/embedded_views.h
index 5293bab..4162e79 100644
--- a/flow/embedded_views.h
+++ b/flow/embedded_views.h
@@ -5,7 +5,6 @@
 #ifndef FLUTTER_FLOW_EMBEDDED_VIEWS_H_
 #define FLUTTER_FLOW_EMBEDDED_VIEWS_H_
 
-#include <memory>
 #include <vector>
 
 #include "flutter/display_list/dl_builder.h"
@@ -23,16 +22,6 @@
 #include "third_party/skia/include/core/SkSize.h"
 #include "third_party/skia/include/core/SkSurface.h"
 
-#if IMPELLER_SUPPORTS_RENDERING
-#include "flutter/impeller/aiks/aiks_context.h"  // nogncheck
-#include "flutter/impeller/renderer/context.h"   // nogncheck
-#else                                            // IMPELLER_SUPPORTS_RENDERING
-namespace impeller {
-class Context;
-class AiksContext;
-}  // namespace impeller
-#endif                                           // !IMPELLER_SUPPORTS_RENDERING
-
 class GrDirectContext;
 
 namespace flutter {
@@ -425,10 +414,8 @@
   // This method can mutate the root Skia canvas before submitting the frame.
   //
   // It can also allocate frames for overlay surfaces to compose hybrid views.
-  virtual void SubmitFrame(
-      GrDirectContext* context,
-      const std::shared_ptr<impeller::AiksContext>& aiks_context,
-      std::unique_ptr<SurfaceFrame> frame);
+  virtual void SubmitFrame(GrDirectContext* context,
+                           std::unique_ptr<SurfaceFrame> frame);
 
   // This method provides the embedder a way to do additional tasks after
   // |SubmitFrame|. For example, merge task runners if `should_resubmit_frame`
diff --git a/impeller/playground/backend/metal/playground_impl_mtl.mm b/impeller/playground/backend/metal/playground_impl_mtl.mm
index 55e1787..25f1086 100644
--- a/impeller/playground/backend/metal/playground_impl_mtl.mm
+++ b/impeller/playground/backend/metal/playground_impl_mtl.mm
@@ -121,7 +121,7 @@
 
   auto drawable =
       SurfaceMTL::GetMetalDrawableAndValidate(context, data_->metal_layer);
-  return SurfaceMTL::MakeFromMetalLayerDrawable(context, drawable);
+  return SurfaceMTL::WrapCurrentMetalLayerDrawable(context, drawable);
 }
 
 }  // namespace impeller
diff --git a/impeller/renderer/backend/metal/BUILD.gn b/impeller/renderer/backend/metal/BUILD.gn
index 9a0f6a6..7ad03e9 100644
--- a/impeller/renderer/backend/metal/BUILD.gn
+++ b/impeller/renderer/backend/metal/BUILD.gn
@@ -42,8 +42,6 @@
     "surface_mtl.mm",
     "texture_mtl.h",
     "texture_mtl.mm",
-    "texture_wrapper_mtl.h",
-    "texture_wrapper_mtl.mm",
     "vertex_descriptor_mtl.h",
     "vertex_descriptor_mtl.mm",
   ]
diff --git a/impeller/renderer/backend/metal/context_mtl.h b/impeller/renderer/backend/metal/context_mtl.h
index 820c0e2..fe46160 100644
--- a/impeller/renderer/backend/metal/context_mtl.h
+++ b/impeller/renderer/backend/metal/context_mtl.h
@@ -21,12 +21,6 @@
 #include "impeller/renderer/capabilities.h"
 #include "impeller/renderer/context.h"
 
-#if TARGET_OS_SIMULATOR
-#define IMPELLER_CA_METAL_LAYER_AVAILABLE API_AVAILABLE(macos(10.11), ios(13.0))
-#else  // TARGET_OS_SIMULATOR
-#define IMPELLER_CA_METAL_LAYER_AVAILABLE API_AVAILABLE(macos(10.11), ios(8.0))
-#endif  // TARGET_OS_SIMULATOR
-
 namespace impeller {
 
 class ContextMTL final : public Context,
@@ -44,14 +38,6 @@
       std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch,
       const std::string& label);
 
-  static std::shared_ptr<ContextMTL> Create(
-      id<MTLDevice> device,
-      id<MTLCommandQueue> command_queue,
-      const std::vector<std::shared_ptr<fml::Mapping>>& shader_libraries_data,
-      std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
-      std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch,
-      const std::string& label);
-
   // |Context|
   ~ContextMTL() override;
 
@@ -104,7 +90,6 @@
 
   ContextMTL(
       id<MTLDevice> device,
-      id<MTLCommandQueue> command_queue,
       NSArray<id<MTLLibrary>>* shader_libraries,
       std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
       std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch);
diff --git a/impeller/renderer/backend/metal/context_mtl.mm b/impeller/renderer/backend/metal/context_mtl.mm
index cc4ea36..20af3b8 100644
--- a/impeller/renderer/backend/metal/context_mtl.mm
+++ b/impeller/renderer/backend/metal/context_mtl.mm
@@ -6,11 +6,9 @@
 
 #include <Foundation/Foundation.h>
 
-#include "flutter/fml/concurrent_message_loop.h"
 #include "flutter/fml/file.h"
 #include "flutter/fml/logging.h"
 #include "flutter/fml/paths.h"
-#include "flutter/fml/synchronization/sync_switch.h"
 #include "impeller/core/sampler_descriptor.h"
 #include "impeller/renderer/backend/metal/sampler_library_mtl.h"
 #include "impeller/renderer/capabilities.h"
@@ -69,12 +67,10 @@
 
 ContextMTL::ContextMTL(
     id<MTLDevice> device,
-    id<MTLCommandQueue> command_queue,
     NSArray<id<MTLLibrary>>* shader_libraries,
     std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
     std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch)
     : device_(device),
-      command_queue_(command_queue),
       worker_task_runner_(std::move(worker_task_runner)),
       is_gpu_disabled_sync_switch_(std::move(is_gpu_disabled_sync_switch)) {
   // Validate device.
@@ -100,6 +96,16 @@
     shader_library_ = std::move(library);
   }
 
+  // Setup command queue.
+  {
+    command_queue_ = device_.newCommandQueue;
+    if (!command_queue_) {
+      VALIDATION_LOG << "Could not setup the command queue.";
+      return;
+    }
+    command_queue_.label = @"Impeller Command Queue";
+  }
+
   // Setup the pipeline library.
   {
     pipeline_library_ =
@@ -198,28 +204,13 @@
   return ::MTLCreateSystemDefaultDevice();
 }
 
-static id<MTLCommandQueue> CreateMetalCommandQueue(id<MTLDevice> device) {
-  auto command_queue = device.newCommandQueue;
-  if (!command_queue) {
-    VALIDATION_LOG << "Could not setup the command queue.";
-    return nullptr;
-  }
-  command_queue.label = @"Impeller Command Queue";
-  return command_queue;
-}
-
 std::shared_ptr<ContextMTL> ContextMTL::Create(
     const std::vector<std::string>& shader_library_paths,
     std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
     std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch) {
   auto device = CreateMetalDevice();
-  auto command_queue = CreateMetalCommandQueue(device);
-  if (!command_queue) {
-    return nullptr;
-  }
   auto context = std::shared_ptr<ContextMTL>(new ContextMTL(
-      device, command_queue,
-      MTLShaderLibraryFromFilePaths(device, shader_library_paths),
+      device, MTLShaderLibraryFromFilePaths(device, shader_library_paths),
       std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch)));
   if (!context->IsValid()) {
     FML_LOG(ERROR) << "Could not create Metal context.";
@@ -232,36 +223,12 @@
     const std::vector<std::shared_ptr<fml::Mapping>>& shader_libraries_data,
     std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
     std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch,
-    const std::string& library_label) {
+    const std::string& label) {
   auto device = CreateMetalDevice();
-  auto command_queue = CreateMetalCommandQueue(device);
-  if (!command_queue) {
-    return nullptr;
-  }
   auto context = std::shared_ptr<ContextMTL>(new ContextMTL(
-      device, command_queue,
-      MTLShaderLibraryFromFileData(device, shader_libraries_data,
-                                   library_label),
-      std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch)));
-  if (!context->IsValid()) {
-    FML_LOG(ERROR) << "Could not create Metal context.";
-    return nullptr;
-  }
-  return context;
-}
-
-std::shared_ptr<ContextMTL> ContextMTL::Create(
-    id<MTLDevice> device,
-    id<MTLCommandQueue> command_queue,
-    const std::vector<std::shared_ptr<fml::Mapping>>& shader_libraries_data,
-    std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner,
-    std::shared_ptr<const fml::SyncSwitch> is_gpu_disabled_sync_switch,
-    const std::string& library_label) {
-  auto context = std::shared_ptr<ContextMTL>(new ContextMTL(
-      device, command_queue,
-      MTLShaderLibraryFromFileData(device, shader_libraries_data,
-                                   library_label),
-      std::move(worker_task_runner), std::move(is_gpu_disabled_sync_switch)));
+      device,
+      MTLShaderLibraryFromFileData(device, shader_libraries_data, label),
+      worker_task_runner, std::move(is_gpu_disabled_sync_switch)));
   if (!context->IsValid()) {
     FML_LOG(ERROR) << "Could not create Metal context.";
     return nullptr;
diff --git a/impeller/renderer/backend/metal/surface_mtl.h b/impeller/renderer/backend/metal/surface_mtl.h
index 3a7db1c..cebc43e 100644
--- a/impeller/renderer/backend/metal/surface_mtl.h
+++ b/impeller/renderer/backend/metal/surface_mtl.h
@@ -5,7 +5,6 @@
 #pragma once
 
 #include <QuartzCore/CAMetalLayer.h>
-#include <memory>
 
 #include "flutter/fml/macros.h"
 #include "impeller/geometry/rect.h"
@@ -38,15 +37,10 @@
       const std::shared_ptr<Context>& context,
       CAMetalLayer* layer);
 
-  static std::unique_ptr<SurfaceMTL> MakeFromMetalLayerDrawable(
+  static std::unique_ptr<SurfaceMTL> WrapCurrentMetalLayerDrawable(
       const std::shared_ptr<Context>& context,
       id<CAMetalDrawable> drawable,
       std::optional<IRect> clip_rect = std::nullopt);
-
-  static std::unique_ptr<SurfaceMTL> MakeFromTexture(
-      const std::shared_ptr<Context>& context,
-      id<MTLTexture> texture,
-      std::optional<IRect> clip_rect);
 #pragma GCC diagnostic pop
 
   // |Surface|
@@ -64,8 +58,6 @@
   std::weak_ptr<Context> context_;
   std::shared_ptr<Texture> resolve_texture_;
   id<CAMetalDrawable> drawable_ = nil;
-  std::shared_ptr<Texture> source_texture_;
-  std::shared_ptr<Texture> destination_texture_;
   bool requires_blit_ = false;
   std::optional<IRect> clip_rect_;
 
@@ -75,8 +67,6 @@
              const RenderTarget& target,
              std::shared_ptr<Texture> resolve_texture,
              id<CAMetalDrawable> drawable,
-             std::shared_ptr<Texture> source_texture,
-             std::shared_ptr<Texture> destination_texture,
              bool requires_blit,
              std::optional<IRect> clip_rect);
 
diff --git a/impeller/renderer/backend/metal/surface_mtl.mm b/impeller/renderer/backend/metal/surface_mtl.mm
index 7ff1810..90f70f5 100644
--- a/impeller/renderer/backend/metal/surface_mtl.mm
+++ b/impeller/renderer/backend/metal/surface_mtl.mm
@@ -7,7 +7,6 @@
 #include "flutter/fml/trace_event.h"
 #include "flutter/impeller/renderer/command_buffer.h"
 #include "impeller/base/validation.h"
-#include "impeller/core/texture_descriptor.h"
 #include "impeller/renderer/backend/metal/context_mtl.h"
 #include "impeller/renderer/backend/metal/formats_mtl.h"
 #include "impeller/renderer/backend/metal/texture_mtl.h"
@@ -40,11 +39,17 @@
   return current_drawable;
 }
 
-static std::optional<RenderTarget> WrapTextureWithRenderTarget(
-    Allocator& allocator,
-    id<MTLTexture> texture,
-    bool requires_blit,
+std::unique_ptr<SurfaceMTL> SurfaceMTL::WrapCurrentMetalLayerDrawable(
+    const std::shared_ptr<Context>& context,
+    id<CAMetalDrawable> drawable,
     std::optional<IRect> clip_rect) {
+  bool requires_blit = ShouldPerformPartialRepaint(clip_rect);
+  const auto color_format = FromMTLPixelFormat(drawable.texture.pixelFormat);
+
+  if (color_format == PixelFormat::kUnknown) {
+    VALIDATION_LOG << "Unknown drawable color format.";
+    return nullptr;
+  }
   // compositor_context.cc will offset the rendering by the clip origin. Here we
   // shrink to the size of the clip. This has the same effect as clipping the
   // rendering but also creates smaller intermediate passes.
@@ -52,144 +57,80 @@
   if (requires_blit) {
     if (!clip_rect.has_value()) {
       VALIDATION_LOG << "Missing clip rectangle.";
-      return std::nullopt;
+      return nullptr;
     }
     root_size = ISize(clip_rect->size.width, clip_rect->size.height);
   } else {
-    root_size = {static_cast<ISize::Type>(texture.width),
-                 static_cast<ISize::Type>(texture.height)};
+    root_size = {static_cast<ISize::Type>(drawable.texture.width),
+                 static_cast<ISize::Type>(drawable.texture.height)};
   }
 
-  TextureDescriptor resolve_tex_desc;
-  resolve_tex_desc.format = FromMTLPixelFormat(texture.pixelFormat);
-  resolve_tex_desc.size = root_size;
-  resolve_tex_desc.usage = static_cast<uint64_t>(TextureUsage::kRenderTarget) |
-                           static_cast<uint64_t>(TextureUsage::kShaderRead);
-  resolve_tex_desc.sample_count = SampleCount::kCount1;
-  resolve_tex_desc.storage_mode = StorageMode::kDevicePrivate;
-
-  if (resolve_tex_desc.format == PixelFormat::kUnknown) {
-    VALIDATION_LOG << "Unknown drawable color format.";
-    return std::nullopt;
-  }
-
-  // Create color resolve texture.
-  std::shared_ptr<Texture> resolve_tex;
-  if (requires_blit) {
-    resolve_tex_desc.compression_type = CompressionType::kLossy;
-    resolve_tex = allocator.CreateTexture(resolve_tex_desc);
-  } else {
-    resolve_tex = std::make_shared<TextureMTL>(resolve_tex_desc, texture);
-  }
-
-  if (!resolve_tex) {
-    VALIDATION_LOG << "Could not wrap resolve texture.";
-    return std::nullopt;
-  }
-  resolve_tex->SetLabel("ImpellerOnscreenResolve");
-
   TextureDescriptor msaa_tex_desc;
   msaa_tex_desc.storage_mode = StorageMode::kDeviceTransient;
   msaa_tex_desc.type = TextureType::kTexture2DMultisample;
   msaa_tex_desc.sample_count = SampleCount::kCount4;
-  msaa_tex_desc.format = resolve_tex->GetTextureDescriptor().format;
-  msaa_tex_desc.size = resolve_tex->GetSize();
+  msaa_tex_desc.format = color_format;
+  msaa_tex_desc.size = root_size;
   msaa_tex_desc.usage = static_cast<uint64_t>(TextureUsage::kRenderTarget);
 
-  auto msaa_tex = allocator.CreateTexture(msaa_tex_desc);
+  auto msaa_tex = context->GetResourceAllocator()->CreateTexture(msaa_tex_desc);
   if (!msaa_tex) {
     VALIDATION_LOG << "Could not allocate MSAA color texture.";
-    return std::nullopt;
+    return nullptr;
   }
   msaa_tex->SetLabel("ImpellerOnscreenColorMSAA");
 
+  TextureDescriptor resolve_tex_desc;
+  resolve_tex_desc.format = color_format;
+  resolve_tex_desc.size = msaa_tex_desc.size;
+  resolve_tex_desc.usage = static_cast<uint64_t>(TextureUsage::kRenderTarget) |
+                           static_cast<uint64_t>(TextureUsage::kShaderRead);
+  resolve_tex_desc.sample_count = SampleCount::kCount1;
+  resolve_tex_desc.storage_mode = StorageMode::kDevicePrivate;
+
+  // Create color resolve texture.
+  std::shared_ptr<Texture> resolve_tex;
+  if (requires_blit) {
+    resolve_tex_desc.compression_type = CompressionType::kLossy;
+    resolve_tex =
+        context->GetResourceAllocator()->CreateTexture(resolve_tex_desc);
+  } else {
+    resolve_tex =
+        std::make_shared<TextureMTL>(resolve_tex_desc, drawable.texture);
+  }
+
+  if (!resolve_tex) {
+    VALIDATION_LOG << "Could not wrap resolve texture.";
+    return nullptr;
+  }
+  resolve_tex->SetLabel("ImpellerOnscreenResolve");
+
   ColorAttachment color0;
   color0.texture = msaa_tex;
   color0.clear_color = Color::DarkSlateGray();
   color0.load_action = LoadAction::kClear;
   color0.store_action = StoreAction::kMultisampleResolve;
-  color0.resolve_texture = std::move(resolve_tex);
+  color0.resolve_texture = resolve_tex;
 
   RenderTarget render_target_desc;
   render_target_desc.SetColorAttachment(color0, 0u);
 
-  return render_target_desc;
-}
-
-std::unique_ptr<SurfaceMTL> SurfaceMTL::MakeFromMetalLayerDrawable(
-    const std::shared_ptr<Context>& context,
-    id<CAMetalDrawable> drawable,
-    std::optional<IRect> clip_rect) {
-  bool requires_blit = ShouldPerformPartialRepaint(clip_rect);
-
-  auto render_target =
-      WrapTextureWithRenderTarget(*context->GetResourceAllocator(),
-                                  drawable.texture, requires_blit, clip_rect);
-  if (!render_target) {
-    return nullptr;
-  }
-
-  auto source_texture =
-      requires_blit ? render_target->GetRenderTargetTexture() : nullptr;
-  auto destination_texture = TextureMTL::Wrapper(
-      render_target->GetRenderTargetTexture()->GetTextureDescriptor(),
-      drawable.texture);
-
-  return std::unique_ptr<SurfaceMTL>(new SurfaceMTL(
-      context,                                  // context
-      *render_target,                           // target
-      render_target->GetRenderTargetTexture(),  // resolve_texture
-      drawable,                                 // drawable
-      source_texture,                           // source_texture
-      destination_texture,                      // destination_texture
-      requires_blit,                            // requires_blit
-      clip_rect                                 // clip_rect
-      ));
-}
-
-std::unique_ptr<SurfaceMTL> SurfaceMTL::MakeFromTexture(
-    const std::shared_ptr<Context>& context,
-    id<MTLTexture> texture,
-    std::optional<IRect> clip_rect) {
-  bool requires_blit = ShouldPerformPartialRepaint(clip_rect);
-
-  auto render_target = WrapTextureWithRenderTarget(
-      *context->GetResourceAllocator(), texture, requires_blit, clip_rect);
-  if (!render_target) {
-    return nullptr;
-  }
-
-  auto source_texture =
-      requires_blit ? render_target->GetRenderTargetTexture() : nullptr;
-  auto destination_texture = TextureMTL::Wrapper(
-      render_target->GetRenderTargetTexture()->GetTextureDescriptor(), texture);
-
-  return std::unique_ptr<SurfaceMTL>(new SurfaceMTL(
-      context,                                  // context
-      *render_target,                           // target
-      render_target->GetRenderTargetTexture(),  // resolve_texture
-      nil,                                      // drawable
-      source_texture,                           // source_texture
-      destination_texture,                      // destination_texture
-      requires_blit,                            // requires_blit
-      clip_rect                                 // clip_rect
-      ));
+  // The constructor is private. So make_unique may not be used.
+  return std::unique_ptr<SurfaceMTL>(new SurfaceMTL(context, render_target_desc,
+                                                    resolve_tex, drawable,
+                                                    requires_blit, clip_rect));
 }
 
 SurfaceMTL::SurfaceMTL(const std::weak_ptr<Context>& context,
                        const RenderTarget& target,
                        std::shared_ptr<Texture> resolve_texture,
                        id<CAMetalDrawable> drawable,
-                       std::shared_ptr<Texture> source_texture,
-                       std::shared_ptr<Texture> destination_texture,
                        bool requires_blit,
                        std::optional<IRect> clip_rect)
     : Surface(target),
       context_(context),
       resolve_texture_(std::move(resolve_texture)),
       drawable_(drawable),
-      source_texture_(std::move(source_texture)),
-      destination_texture_(std::move(destination_texture)),
       requires_blit_(requires_blit),
       clip_rect_(clip_rect) {}
 
@@ -232,16 +173,16 @@
 
 // |Surface|
 bool SurfaceMTL::Present() const {
+  if (drawable_ == nil) {
+    return false;
+  }
+
   auto context = context_.lock();
   if (!context) {
     return false;
   }
 
   if (requires_blit_) {
-    if (!(source_texture_ && destination_texture_)) {
-      return false;
-    }
-
     auto blit_command_buffer = context->CreateCommandBuffer();
     if (!blit_command_buffer) {
       return false;
@@ -251,7 +192,8 @@
       VALIDATION_LOG << "Missing clip rectangle.";
       return false;
     }
-    blit_pass->AddCopy(source_texture_, destination_texture_, std::nullopt,
+    auto current = TextureMTL::Wrapper({}, drawable_.texture);
+    blit_pass->AddCopy(resolve_texture_, current, std::nullopt,
                        clip_rect_->origin);
     blit_pass->EncodeCommands(context->GetResourceAllocator());
     if (!blit_command_buffer->SubmitCommands()) {
@@ -259,15 +201,13 @@
     }
   }
 
-  if (drawable_) {
-    if (ShouldWaitForCommandBuffer()) {
-      id<MTLCommandBuffer> command_buffer =
-          ContextMTL::Cast(context.get())->CreateMTLCommandBuffer();
-      [command_buffer commit];
-      [command_buffer waitUntilScheduled];
-    }
-    [drawable_ present];
+  if (ShouldWaitForCommandBuffer()) {
+    id<MTLCommandBuffer> command_buffer =
+        ContextMTL::Cast(context.get())->CreateMTLCommandBuffer();
+    [command_buffer commit];
+    [command_buffer waitUntilScheduled];
   }
+  [drawable_ present];
 
   return true;
 }
diff --git a/impeller/renderer/backend/metal/texture_mtl.h b/impeller/renderer/backend/metal/texture_mtl.h
index 91cd8a1..9d9378d 100644
--- a/impeller/renderer/backend/metal/texture_mtl.h
+++ b/impeller/renderer/backend/metal/texture_mtl.h
@@ -19,10 +19,8 @@
              id<MTLTexture> texture,
              bool wrapped = false);
 
-  static std::shared_ptr<TextureMTL> Wrapper(
-      TextureDescriptor desc,
-      id<MTLTexture> texture,
-      std::function<void()> deletion_proc = nullptr);
+  static std::shared_ptr<TextureMTL> Wrapper(TextureDescriptor desc,
+                                             id<MTLTexture> texture);
 
   // |Texture|
   ~TextureMTL() override;
diff --git a/impeller/renderer/backend/metal/texture_mtl.mm b/impeller/renderer/backend/metal/texture_mtl.mm
index bc57684..5c63624 100644
--- a/impeller/renderer/backend/metal/texture_mtl.mm
+++ b/impeller/renderer/backend/metal/texture_mtl.mm
@@ -9,13 +9,6 @@
 
 namespace impeller {
 
-std::shared_ptr<Texture> WrapperMTL(TextureDescriptor desc,
-                                    const void* mtl_texture,
-                                    std::function<void()> deletion_proc) {
-  return TextureMTL::Wrapper(desc, (__bridge id<MTLTexture>)mtl_texture,
-                             std::move(deletion_proc));
-}
-
 TextureMTL::TextureMTL(TextureDescriptor p_desc,
                        id<MTLTexture> texture,
                        bool wrapped)
@@ -35,18 +28,9 @@
   is_valid_ = true;
 }
 
-std::shared_ptr<TextureMTL> TextureMTL::Wrapper(
-    TextureDescriptor desc,
-    id<MTLTexture> texture,
-    std::function<void()> deletion_proc) {
-  if (deletion_proc) {
-    return std::shared_ptr<TextureMTL>(
-        new TextureMTL(desc, texture, true),
-        [deletion_proc = std::move(deletion_proc)](TextureMTL* t) {
-          deletion_proc();
-        });
-  }
-  return std::shared_ptr<TextureMTL>(new TextureMTL(desc, texture, true));
+std::shared_ptr<TextureMTL> TextureMTL::Wrapper(TextureDescriptor desc,
+                                                id<MTLTexture> texture) {
+  return std::make_shared<TextureMTL>(desc, texture, true);
 }
 
 TextureMTL::~TextureMTL() = default;
diff --git a/impeller/renderer/backend/metal/texture_wrapper_mtl.h b/impeller/renderer/backend/metal/texture_wrapper_mtl.h
deleted file mode 100644
index e6fe71f..0000000
--- a/impeller/renderer/backend/metal/texture_wrapper_mtl.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#pragma once
-
-#include "impeller/core/texture.h"
-
-namespace impeller {
-
-std::shared_ptr<Texture> WrapTextureMTL(
-    TextureDescriptor desc,
-    const void* mtl_texture,
-    std::function<void()> deletion_proc = nullptr);
-
-}  // namespace impeller
diff --git a/impeller/renderer/backend/metal/texture_wrapper_mtl.mm b/impeller/renderer/backend/metal/texture_wrapper_mtl.mm
deleted file mode 100644
index 2b6a908..0000000
--- a/impeller/renderer/backend/metal/texture_wrapper_mtl.mm
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "impeller/renderer/backend/metal/texture_wrapper_mtl.h"
-
-#include <Metal/Metal.h>
-
-#include "impeller/renderer/backend/metal/formats_mtl.h"
-#include "impeller/renderer/backend/metal/texture_mtl.h"
-
-namespace impeller {
-
-std::shared_ptr<Texture> WrapTextureMTL(TextureDescriptor desc,
-                                        const void* mtl_texture,
-                                        std::function<void()> deletion_proc) {
-  auto texture = (__bridge id<MTLTexture>)mtl_texture;
-  desc.format = FromMTLPixelFormat(texture.pixelFormat);
-  return TextureMTL::Wrapper(desc, texture, std::move(deletion_proc));
-}
-
-}  // namespace impeller
diff --git a/shell/common/rasterizer.cc b/shell/common/rasterizer.cc
index 963c500..493befc 100644
--- a/shell/common/rasterizer.cc
+++ b/shell/common/rasterizer.cc
@@ -626,8 +626,8 @@
     if (external_view_embedder_ &&
         (!raster_thread_merger_ || raster_thread_merger_->IsMerged())) {
       FML_DCHECK(!frame->IsSubmitted());
-      external_view_embedder_->SubmitFrame(
-          surface_->GetContext(), surface_->GetAiksContext(), std::move(frame));
+      external_view_embedder_->SubmitFrame(surface_->GetContext(),
+                                           std::move(frame));
     } else {
       frame->Submit();
     }
diff --git a/shell/common/rasterizer_unittests.cc b/shell/common/rasterizer_unittests.cc
index daf36364..53de96c 100644
--- a/shell/common/rasterizer_unittests.cc
+++ b/shell/common/rasterizer_unittests.cc
@@ -74,9 +74,8 @@
                PostPrerollResult(
                    fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger));
   MOCK_METHOD1(CompositeEmbeddedView, DlCanvas*(int64_t view_id));
-  MOCK_METHOD3(SubmitFrame,
+  MOCK_METHOD2(SubmitFrame,
                void(GrDirectContext* context,
-                    const std::shared_ptr<impeller::AiksContext>& aiks_context,
                     std::unique_ptr<SurfaceFrame> frame));
   MOCK_METHOD2(EndFrame,
                void(bool should_resubmit_frame,
diff --git a/shell/common/shell_test_external_view_embedder.cc b/shell/common/shell_test_external_view_embedder.cc
index 22b9bfe..2536bb6 100644
--- a/shell/common/shell_test_external_view_embedder.cc
+++ b/shell/common/shell_test_external_view_embedder.cc
@@ -91,7 +91,6 @@
 // |ExternalViewEmbedder|
 void ShellTestExternalViewEmbedder::SubmitFrame(
     GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
     std::unique_ptr<SurfaceFrame> frame) {
   if (!frame) {
     return;
diff --git a/shell/common/shell_test_external_view_embedder.h b/shell/common/shell_test_external_view_embedder.h
index 36a392d..204472d 100644
--- a/shell/common/shell_test_external_view_embedder.h
+++ b/shell/common/shell_test_external_view_embedder.h
@@ -75,7 +75,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/gpu/gpu_surface_metal_impeller.h b/shell/gpu/gpu_surface_metal_impeller.h
index d89e5bf..3b139c1 100644
--- a/shell/gpu/gpu_surface_metal_impeller.h
+++ b/shell/gpu/gpu_surface_metal_impeller.h
@@ -5,25 +5,22 @@
 #ifndef FLUTTER_SHELL_GPU_GPU_SURFACE_METAL_IMPELLER_H_
 #define FLUTTER_SHELL_GPU_GPU_SURFACE_METAL_IMPELLER_H_
 
-#include <Metal/Metal.h>
+#include <QuartzCore/CAMetalLayer.h>
 
 #include "flutter/flow/surface.h"
 #include "flutter/fml/macros.h"
 #include "flutter/fml/platform/darwin/scoped_nsobject.h"
 #include "flutter/impeller/aiks/aiks_context.h"
-#include "flutter/impeller/renderer/backend/metal/context_mtl.h"
 #include "flutter/impeller/renderer/renderer.h"
 #include "flutter/shell/gpu/gpu_surface_metal_delegate.h"
 #include "third_party/skia/include/gpu/mtl/GrMtlTypes.h"
 
 namespace flutter {
 
-class IMPELLER_CA_METAL_LAYER_AVAILABLE GPUSurfaceMetalImpeller
-    : public Surface {
+class SK_API_AVAILABLE_CA_METAL_LAYER GPUSurfaceMetalImpeller : public Surface {
  public:
   GPUSurfaceMetalImpeller(GPUSurfaceMetalDelegate* delegate,
-                          const std::shared_ptr<impeller::Context>& context,
-                          bool render_to_surface = true);
+                          const std::shared_ptr<impeller::Context>& context);
 
   // |Surface|
   ~GPUSurfaceMetalImpeller();
@@ -35,29 +32,16 @@
 
  private:
   const GPUSurfaceMetalDelegate* delegate_;
-  const MTLRenderTargetType render_target_type_;
   std::shared_ptr<impeller::Renderer> impeller_renderer_;
   std::shared_ptr<impeller::AiksContext> aiks_context_;
-  fml::scoped_nsprotocol<id<MTLTexture>> last_texture_;
-  // TODO(38466): Refactor GPU surface APIs take into account the fact that an
-  // external view embedder may want to render to the root surface. This is a
-  // hack to make avoid allocating resources for the root surface when an
-  // external view embedder is present.
-  bool render_to_surface_ = true;
+  fml::scoped_nsprotocol<id<MTLDrawable>> last_drawable_;
   bool disable_partial_repaint_ = false;
   // Accumulated damage for each framebuffer; Key is address of underlying
   // MTLTexture for each drawable
   std::map<uintptr_t, SkIRect> damage_;
 
   // |Surface|
-  std::unique_ptr<SurfaceFrame> AcquireFrame(
-      const SkISize& frame_size) override;
-
-  std::unique_ptr<SurfaceFrame> AcquireFrameFromCAMetalLayer(
-      const SkISize& frame_size);
-
-  std::unique_ptr<SurfaceFrame> AcquireFrameFromMTLTexture(
-      const SkISize& frame_size);
+  std::unique_ptr<SurfaceFrame> AcquireFrame(const SkISize& size) override;
 
   // |Surface|
   SkMatrix GetRootTransformation() const override;
diff --git a/shell/gpu/gpu_surface_metal_impeller.mm b/shell/gpu/gpu_surface_metal_impeller.mm
index 32b2f28..94f77a1 100644
--- a/shell/gpu/gpu_surface_metal_impeller.mm
+++ b/shell/gpu/gpu_surface_metal_impeller.mm
@@ -29,14 +29,11 @@
 }
 
 GPUSurfaceMetalImpeller::GPUSurfaceMetalImpeller(GPUSurfaceMetalDelegate* delegate,
-                                                 const std::shared_ptr<impeller::Context>& context,
-                                                 bool render_to_surface)
+                                                 const std::shared_ptr<impeller::Context>& context)
     : delegate_(delegate),
-      render_target_type_(delegate->GetRenderTargetType()),
       impeller_renderer_(CreateImpellerRenderer(context)),
       aiks_context_(
-          std::make_shared<impeller::AiksContext>(impeller_renderer_ ? context : nullptr)),
-      render_to_surface_(render_to_surface) {
+          std::make_shared<impeller::AiksContext>(impeller_renderer_ ? context : nullptr)) {
   // If this preference is explicitly set, we allow for disabling partial repaint.
   NSNumber* disablePartialRepaint =
       [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FLTDisablePartialRepaint"];
@@ -53,7 +50,7 @@
 }
 
 // |Surface|
-std::unique_ptr<SurfaceFrame> GPUSurfaceMetalImpeller::AcquireFrame(const SkISize& frame_size) {
+std::unique_ptr<SurfaceFrame> GPUSurfaceMetalImpeller::AcquireFrame(const SkISize& frame_info) {
   TRACE_EVENT0("impeller", "GPUSurfaceMetalImpeller::AcquireFrame");
 
   if (!IsValid()) {
@@ -61,33 +58,7 @@
     return nullptr;
   }
 
-  if (frame_size.isEmpty()) {
-    FML_LOG(ERROR) << "Metal surface was asked for an empty frame.";
-    return nullptr;
-  }
-
-  if (!render_to_surface_) {
-    return std::make_unique<SurfaceFrame>(
-        nullptr, SurfaceFrame::FramebufferInfo(),
-        [](const SurfaceFrame& surface_frame, DlCanvas* canvas) { return true; }, frame_size);
-  }
-
-  switch (render_target_type_) {
-    case MTLRenderTargetType::kCAMetalLayer:
-      return AcquireFrameFromCAMetalLayer(frame_size);
-    case MTLRenderTargetType::kMTLTexture:
-      return AcquireFrameFromMTLTexture(frame_size);
-    default:
-      FML_CHECK(false) << "Unknown MTLRenderTargetType type.";
-  }
-
-  return nullptr;
-}
-
-std::unique_ptr<SurfaceFrame> GPUSurfaceMetalImpeller::AcquireFrameFromCAMetalLayer(
-    const SkISize& frame_size) {
-  auto layer = delegate_->GetCAMetalLayer(frame_size);
-
+  auto layer = delegate_->GetCAMetalLayer(frame_info);
   if (!layer) {
     FML_LOG(ERROR) << "Invalid CAMetalLayer given by the embedder.";
     return nullptr;
@@ -98,16 +69,15 @@
   auto drawable = impeller::SurfaceMTL::GetMetalDrawableAndValidate(
       impeller_renderer_->GetContext(), mtl_layer);
   if (Settings::kSurfaceDataAccessible) {
-    last_texture_.reset([drawable.texture retain]);
+    last_drawable_.reset([drawable retain]);
   }
 
-  id<MTLTexture> last_texture = static_cast<id<MTLTexture>>(last_texture_);
+  id<CAMetalDrawable> metal_drawable = static_cast<id<CAMetalDrawable>>(last_drawable_);
   SurfaceFrame::SubmitCallback submit_callback =
       fml::MakeCopyable([this,                           //
                          renderer = impeller_renderer_,  //
                          aiks_context = aiks_context_,   //
-                         drawable,                       //
-                         last_texture                    //
+                         metal_drawable                  //
   ](SurfaceFrame& surface_frame, DlCanvas* canvas) mutable -> bool {
         if (!aiks_context) {
           return false;
@@ -120,7 +90,7 @@
         }
 
         if (!disable_partial_repaint_) {
-          uintptr_t texture = reinterpret_cast<uintptr_t>(last_texture);
+          uintptr_t texture = reinterpret_cast<uintptr_t>(metal_drawable.texture);
 
           for (auto& entry : damage_) {
             if (entry.first != texture) {
@@ -141,8 +111,8 @@
                                                 buffer_damage->width(), buffer_damage->height());
         }
 
-        auto surface = impeller::SurfaceMTL::MakeFromMetalLayerDrawable(
-            impeller_renderer_->GetContext(), drawable, clip_rect);
+        auto surface = impeller::SurfaceMTL::WrapCurrentMetalLayerDrawable(
+            impeller_renderer_->GetContext(), metal_drawable, clip_rect);
 
         if (clip_rect && (clip_rect->size.width == 0 || clip_rect->size.height == 0)) {
           return surface->Present();
@@ -168,7 +138,7 @@
   if (!disable_partial_repaint_) {
     // Provide accumulated damage to rasterizer (area in current framebuffer that lags behind
     // front buffer)
-    uintptr_t texture = reinterpret_cast<uintptr_t>(drawable.texture);
+    uintptr_t texture = reinterpret_cast<uintptr_t>(metal_drawable.texture);
     auto i = damage_.find(texture);
     if (i != damage_.end()) {
       framebuffer_info.existing_damage = i->second;
@@ -179,107 +149,7 @@
   return std::make_unique<SurfaceFrame>(nullptr,           // surface
                                         framebuffer_info,  // framebuffer info
                                         submit_callback,   // submit callback
-                                        frame_size,        // frame size
-                                        nullptr,           // context result
-                                        true               // display list fallback
-  );
-}
-
-std::unique_ptr<SurfaceFrame> GPUSurfaceMetalImpeller::AcquireFrameFromMTLTexture(
-    const SkISize& frame_size) {
-  GPUMTLTextureInfo texture_info = delegate_->GetMTLTexture(frame_size);
-  id<MTLTexture> mtl_texture = (id<MTLTexture>)(texture_info.texture);
-
-  if (!mtl_texture) {
-    FML_LOG(ERROR) << "Invalid MTLTexture given by the embedder.";
-    return nullptr;
-  }
-
-  if (Settings::kSurfaceDataAccessible) {
-    last_texture_.reset([mtl_texture retain]);
-  }
-
-  SurfaceFrame::SubmitCallback submit_callback =
-      fml::MakeCopyable([this,                           //
-                         renderer = impeller_renderer_,  //
-                         aiks_context = aiks_context_,   //
-                         texture_info,                   //
-                         mtl_texture,                    //
-                         delegate = delegate_            //
-  ](SurfaceFrame& surface_frame, DlCanvas* canvas) mutable -> bool {
-        if (!aiks_context) {
-          return false;
-        }
-
-        auto display_list = surface_frame.BuildDisplayList();
-        if (!display_list) {
-          FML_LOG(ERROR) << "Could not build display list for surface frame.";
-          return false;
-        }
-
-        if (!disable_partial_repaint_) {
-          uintptr_t texture_ptr = reinterpret_cast<uintptr_t>(mtl_texture);
-
-          for (auto& entry : damage_) {
-            if (entry.first != texture_ptr) {
-              // Accumulate damage for other framebuffers
-              if (surface_frame.submit_info().frame_damage) {
-                entry.second.join(*surface_frame.submit_info().frame_damage);
-              }
-            }
-          }
-          // Reset accumulated damage for current framebuffer
-          damage_[texture_ptr] = SkIRect::MakeEmpty();
-        }
-
-        std::optional<impeller::IRect> clip_rect;
-        if (surface_frame.submit_info().buffer_damage.has_value()) {
-          auto buffer_damage = surface_frame.submit_info().buffer_damage;
-          clip_rect = impeller::IRect::MakeXYWH(buffer_damage->x(), buffer_damage->y(),
-                                                buffer_damage->width(), buffer_damage->height());
-        }
-
-        auto surface =
-            impeller::SurfaceMTL::MakeFromTexture(renderer->GetContext(), mtl_texture, clip_rect);
-
-        if (clip_rect && (clip_rect->size.width == 0 || clip_rect->size.height == 0)) {
-          return surface->Present();
-        }
-
-        impeller::IRect cull_rect = surface->coverage();
-        SkIRect sk_cull_rect = SkIRect::MakeWH(cull_rect.size.width, cull_rect.size.height);
-        impeller::DlDispatcher impeller_dispatcher(cull_rect);
-        display_list->Dispatch(impeller_dispatcher, sk_cull_rect);
-        auto picture = impeller_dispatcher.EndRecordingAsPicture();
-
-        return renderer->Render(
-            std::move(surface),
-            fml::MakeCopyable([aiks_context, picture = std::move(picture)](
-                                  impeller::RenderTarget& render_target) -> bool {
-              return aiks_context->Render(picture, render_target);
-            }));
-
-        delegate->PresentTexture(texture_info);
-      });
-
-  SurfaceFrame::FramebufferInfo framebuffer_info;
-  framebuffer_info.supports_readback = true;
-
-  if (!disable_partial_repaint_) {
-    // Provide accumulated damage to rasterizer (area in current framebuffer that lags behind
-    // front buffer)
-    uintptr_t texture = reinterpret_cast<uintptr_t>(mtl_texture);
-    auto i = damage_.find(texture);
-    if (i != damage_.end()) {
-      framebuffer_info.existing_damage = i->second;
-    }
-    framebuffer_info.supports_partial_repaint = true;
-  }
-
-  return std::make_unique<SurfaceFrame>(nullptr,           // surface
-                                        framebuffer_info,  // framebuffer info
-                                        submit_callback,   // submit callback
-                                        frame_size,        // frame size
+                                        frame_info,        // frame size
                                         nullptr,           // context result
                                         true               // display list fallback
   );
@@ -318,10 +188,11 @@
 }
 
 Surface::SurfaceData GPUSurfaceMetalImpeller::GetSurfaceData() const {
-  if (!(last_texture_ && [last_texture_ conformsToProtocol:@protocol(MTLTexture)])) {
+  if (!(last_drawable_ && [last_drawable_ conformsToProtocol:@protocol(CAMetalDrawable)])) {
     return {};
   }
-  id<MTLTexture> texture = last_texture_.get();
+  id<CAMetalDrawable> metal_drawable = static_cast<id<CAMetalDrawable>>(last_drawable_);
+  id<MTLTexture> texture = metal_drawable.texture;
   int bytesPerPixel = 0;
   std::string pixel_format;
   switch (texture.pixelFormat) {
diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.cc b/shell/platform/android/external_view_embedder/external_view_embedder.cc
index d29a80e..f1d8af9 100644
--- a/shell/platform/android/external_view_embedder/external_view_embedder.cc
+++ b/shell/platform/android/external_view_embedder/external_view_embedder.cc
@@ -64,7 +64,6 @@
 // |ExternalViewEmbedder|
 void AndroidExternalViewEmbedder::SubmitFrame(
     GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
     std::unique_ptr<SurfaceFrame> frame) {
   TRACE_EVENT0("flutter", "AndroidExternalViewEmbedder::SubmitFrame");
 
diff --git a/shell/platform/android/external_view_embedder/external_view_embedder.h b/shell/platform/android/external_view_embedder/external_view_embedder.h
index 33b8766..03bae5e 100644
--- a/shell/platform/android/external_view_embedder/external_view_embedder.h
+++ b/shell/platform/android/external_view_embedder/external_view_embedder.h
@@ -46,7 +46,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc
index e6417a0..3c08eef 100644
--- a/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc
+++ b/shell/platform/android/external_view_embedder/external_view_embedder_unittests.cc
@@ -313,7 +313,7 @@
         },
         /*frame_size=*/SkISize::Make(800, 600));
 
-    embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+    embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
     // Submits frame if no Android view in the current frame.
     EXPECT_TRUE(did_submit_frame);
     // Doesn't resubmit frame.
@@ -381,7 +381,7 @@
         },
         /*frame_size=*/SkISize::Make(800, 600));
 
-    embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+    embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
     // Doesn't submit frame if there aren't Android views in the previous frame.
     EXPECT_FALSE(did_submit_frame);
     // Resubmits frame.
@@ -446,7 +446,7 @@
           return true;
         },
         /*frame_size=*/SkISize::Make(800, 600));
-    embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+    embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
     // Submits frame if there are Android views in the previous frame.
     EXPECT_TRUE(did_submit_frame);
     // Doesn't resubmit frame.
@@ -553,7 +553,7 @@
       },
       /*frame_size=*/SkISize::Make(800, 600));
 
-  embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+  embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
   EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
   embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -656,7 +656,7 @@
       },
       /*frame_size=*/SkISize::Make(800, 600));
 
-  embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+  embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
   EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
   embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -724,7 +724,7 @@
       },
       /*frame_size=*/SkISize::Make(800, 600));
 
-  embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+  embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
   EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
   embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -825,7 +825,7 @@
           return true;
         },
         /*frame_size=*/SkISize::Make(800, 600));
-    embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+    embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
     EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
     embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -912,7 +912,7 @@
           return true;
         },
         /*frame_size=*/SkISize::Make(800, 600));
-    embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+    embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
     EXPECT_CALL(*jni_mock, FlutterViewEndFrame());
     embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
@@ -1023,7 +1023,7 @@
       SkSurfaces::Null(1000, 1000), framebuffer_info,
       [](const SurfaceFrame& surface_frame, DlCanvas* canvas) { return true; },
       /*frame_size=*/SkISize::Make(800, 600));
-  embedder->SubmitFrame(gr_context.get(), nullptr, std::move(surface_frame));
+  embedder->SubmitFrame(gr_context.get(), std::move(surface_frame));
 
   embedder->EndFrame(/*should_resubmit_frame=*/false, raster_thread_merger);
 
diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.h b/shell/platform/darwin/ios/ios_external_view_embedder.h
index d83b435..3893cce 100644
--- a/shell/platform/darwin/ios/ios_external_view_embedder.h
+++ b/shell/platform/darwin/ios/ios_external_view_embedder.h
@@ -51,7 +51,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/platform/darwin/ios/ios_external_view_embedder.mm b/shell/platform/darwin/ios/ios_external_view_embedder.mm
index 67112e9..4e28b6c 100644
--- a/shell/platform/darwin/ios/ios_external_view_embedder.mm
+++ b/shell/platform/darwin/ios/ios_external_view_embedder.mm
@@ -66,10 +66,8 @@
 }
 
 // |ExternalViewEmbedder|
-void IOSExternalViewEmbedder::SubmitFrame(
-    GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
-    std::unique_ptr<SurfaceFrame> frame) {
+void IOSExternalViewEmbedder::SubmitFrame(GrDirectContext* context,
+                                          std::unique_ptr<SurfaceFrame> frame) {
   TRACE_EVENT0("flutter", "IOSExternalViewEmbedder::SubmitFrame");
   FML_CHECK(platform_views_controller_);
   platform_views_controller_->SubmitFrame(context, ios_context_, std::move(frame));
diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn
index aa43f3f..9c827ac 100644
--- a/shell/platform/embedder/BUILD.gn
+++ b/shell/platform/embedder/BUILD.gn
@@ -5,7 +5,6 @@
 import("//build/toolchain/clang.gni")
 import("//flutter/build/zip_bundle.gni")
 import("//flutter/common/config.gni")
-import("//flutter/impeller/tools/impeller.gni")
 import("//flutter/shell/gpu/gpu.gni")
 import("//flutter/shell/platform/embedder/embedder.gni")
 import("//flutter/testing/testing.gni")
@@ -76,8 +75,6 @@
       "embedder_render_target.h",
       "embedder_render_target_cache.cc",
       "embedder_render_target_cache.h",
-      "embedder_render_target_skia.cc",
-      "embedder_render_target_skia.h",
       "embedder_struct_macros.h",
       "embedder_surface.cc",
       "embedder_surface.h",
@@ -94,8 +91,6 @@
       "vsync_waiter_embedder.h",
     ]
 
-    public_deps = [ ":embedder_headers" ]
-
     if (embedder_enable_gl) {
       sources += [
         "embedder_external_texture_gl.cc",
@@ -121,15 +116,6 @@
       "//third_party/skia",
     ]
 
-    if (impeller_supports_rendering) {
-      sources += [
-        "embedder_render_target_impeller.cc",
-        "embedder_render_target_impeller.h",
-      ]
-
-      deps += [ "//flutter/impeller" ]
-    }
-
     if (embedder_enable_metal) {
       sources += [
         "embedder_external_texture_metal.h",
@@ -138,13 +124,6 @@
         "embedder_surface_metal.mm",
       ]
 
-      if (impeller_supports_rendering) {
-        sources += [
-          "embedder_surface_metal_impeller.h",
-          "embedder_surface_metal_impeller.mm",
-        ]
-      }
-
       cflags_objc = flutter_cflags_objc
       cflags_objcc = flutter_cflags_objcc
 
@@ -163,11 +142,12 @@
       ]
     }
 
+    public_deps = [ ":embedder_headers" ]
+
     public_configs += [
       ":embedder_gpu_configuration_config",
       ":embedder_header_config",
       "//flutter:config",
-      "//flutter/impeller:impeller_public_config",
     ]
   }
 }
diff --git a/shell/platform/embedder/embedder.cc b/shell/platform/embedder/embedder.cc
index 7e026d8..3090f58 100644
--- a/shell/platform/embedder/embedder.cc
+++ b/shell/platform/embedder/embedder.cc
@@ -54,7 +54,6 @@
 #include "flutter/shell/platform/embedder/embedder_external_texture_resolver.h"
 #include "flutter/shell/platform/embedder/embedder_platform_message_response.h"
 #include "flutter/shell/platform/embedder/embedder_render_target.h"
-#include "flutter/shell/platform/embedder/embedder_render_target_skia.h"
 #include "flutter/shell/platform/embedder/embedder_struct_macros.h"
 #include "flutter/shell/platform/embedder/embedder_task_runner.h"
 #include "flutter/shell/platform/embedder/embedder_thread_host.h"
@@ -69,14 +68,7 @@
 
 #ifdef SHELL_ENABLE_METAL
 #include "flutter/shell/platform/embedder/embedder_surface_metal.h"
-#ifdef IMPELLER_SUPPORTS_RENDERING
-#include "flutter/shell/platform/embedder/embedder_render_target_impeller.h"  // nogncheck
-#include "flutter/shell/platform/embedder/embedder_surface_metal_impeller.h"  // nogncheck
-#include "impeller/core/texture.h"                                // nogncheck
-#include "impeller/renderer/backend/metal/texture_wrapper_mtl.h"  // nogncheck
-#include "impeller/renderer/render_target.h"                      // nogncheck
-#endif  // IMPELLER_SUPPORTS_RENDERING
-#endif  // SHELL_ENABLE_METAL
+#endif
 
 const int32_t kFlutterSemanticsNodeIdBatchEnd = -1;
 const int32_t kFlutterSemanticsCustomActionIdBatchEnd = -1;
@@ -460,8 +452,7 @@
     const flutter::PlatformViewEmbedder::PlatformDispatchTable&
         platform_dispatch_table,
     std::unique_ptr<flutter::EmbedderExternalViewEmbedder>
-        external_view_embedder,
-    bool enable_impeller) {
+        external_view_embedder) {
   if (config->type != kMetal) {
     return nullptr;
   }
@@ -495,33 +486,20 @@
     return texture_info;
   };
 
+  flutter::EmbedderSurfaceMetal::MetalDispatchTable metal_dispatch_table = {
+      .present = metal_present,
+      .get_texture = metal_get_texture,
+  };
+
   std::shared_ptr<flutter::EmbedderExternalViewEmbedder> view_embedder =
       std::move(external_view_embedder);
 
-  std::unique_ptr<flutter::EmbedderSurface> embedder_surface;
-
-  if (enable_impeller) {
-    flutter::EmbedderSurfaceMetalImpeller::MetalDispatchTable
-        metal_dispatch_table = {
-            .present = metal_present,
-            .get_texture = metal_get_texture,
-        };
-    embedder_surface = std::make_unique<flutter::EmbedderSurfaceMetalImpeller>(
-        const_cast<flutter::GPUMTLDeviceHandle>(config->metal.device),
-        const_cast<flutter::GPUMTLCommandQueueHandle>(
-            config->metal.present_command_queue),
-        metal_dispatch_table, view_embedder);
-  } else {
-    flutter::EmbedderSurfaceMetal::MetalDispatchTable metal_dispatch_table = {
-        .present = metal_present,
-        .get_texture = metal_get_texture,
-    };
-    embedder_surface = std::make_unique<flutter::EmbedderSurfaceMetal>(
-        const_cast<flutter::GPUMTLDeviceHandle>(config->metal.device),
-        const_cast<flutter::GPUMTLCommandQueueHandle>(
-            config->metal.present_command_queue),
-        metal_dispatch_table, view_embedder);
-  }
+  std::unique_ptr<flutter::EmbedderSurfaceMetal> embedder_surface =
+      std::make_unique<flutter::EmbedderSurfaceMetal>(
+          const_cast<flutter::GPUMTLDeviceHandle>(config->metal.device),
+          const_cast<flutter::GPUMTLCommandQueueHandle>(
+              config->metal.present_command_queue),
+          metal_dispatch_table, view_embedder);
 
   // The static leak checker gets confused by the use of fml::MakeCopyable.
   // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
@@ -672,8 +650,7 @@
     const flutter::PlatformViewEmbedder::PlatformDispatchTable&
         platform_dispatch_table,
     std::unique_ptr<flutter::EmbedderExternalViewEmbedder>
-        external_view_embedder,
-    bool enable_impeller) {
+        external_view_embedder) {
   if (config == nullptr) {
     return nullptr;
   }
@@ -690,7 +667,7 @@
     case kMetal:
       return InferMetalPlatformViewCreationCallback(
           config, user_data, platform_dispatch_table,
-          std::move(external_view_embedder), enable_impeller);
+          std::move(external_view_embedder));
     case kVulkan:
       return InferVulkanPlatformViewCreationCallback(
           config, user_data, platform_dispatch_table,
@@ -920,76 +897,6 @@
 #endif
 }
 
-static std::unique_ptr<flutter::EmbedderRenderTarget>
-MakeRenderTargetFromBackingStoreImpeller(
-    FlutterBackingStore backing_store,
-    const fml::closure& on_release,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
-    const FlutterBackingStoreConfig& config,
-    const FlutterMetalBackingStore* metal) {
-#if defined(SHELL_ENABLE_METAL) && defined(IMPELLER_SUPPORTS_RENDERING)
-  if (!metal->texture.texture) {
-    FML_LOG(ERROR) << "Embedder supplied null Metal texture.";
-    return nullptr;
-  }
-
-  const auto size = impeller::ISize(config.size.width, config.size.height);
-
-  impeller::TextureDescriptor resolve_tex_desc;
-  resolve_tex_desc.size = size;
-  resolve_tex_desc.sample_count = impeller::SampleCount::kCount1;
-  resolve_tex_desc.storage_mode = impeller::StorageMode::kDevicePrivate;
-  resolve_tex_desc.usage =
-      static_cast<uint64_t>(impeller::TextureUsage::kRenderTarget) |
-      static_cast<uint64_t>(impeller::TextureUsage::kShaderRead);
-
-  auto resolve_tex = impeller::WrapTextureMTL(
-      resolve_tex_desc, metal->texture.texture,
-      [callback = metal->texture.destruction_callback,
-       user_data = metal->texture.user_data]() { callback(user_data); });
-  if (!resolve_tex) {
-    FML_LOG(ERROR) << "Could not wrap embedder supplied Metal render texture.";
-    return nullptr;
-  }
-  resolve_tex->SetLabel("ImpellerBackingStoreResolve");
-
-  impeller::TextureDescriptor msaa_tex_desc;
-  msaa_tex_desc.storage_mode = impeller::StorageMode::kDeviceTransient;
-  msaa_tex_desc.type = impeller::TextureType::kTexture2DMultisample;
-  msaa_tex_desc.sample_count = impeller::SampleCount::kCount4;
-  msaa_tex_desc.format = resolve_tex->GetTextureDescriptor().format;
-  msaa_tex_desc.size = size;
-  msaa_tex_desc.usage =
-      static_cast<uint64_t>(impeller::TextureUsage::kRenderTarget);
-
-  auto msaa_tex =
-      aiks_context->GetContext()->GetResourceAllocator()->CreateTexture(
-          msaa_tex_desc);
-  if (!msaa_tex) {
-    FML_LOG(ERROR) << "Could not allocate MSAA color texture.";
-    return nullptr;
-  }
-  msaa_tex->SetLabel("ImpellerBackingStoreColorMSAA");
-
-  impeller::ColorAttachment color0;
-  color0.texture = msaa_tex;
-  color0.clear_color = impeller::Color::DarkSlateGray();
-  color0.load_action = impeller::LoadAction::kClear;
-  color0.store_action = impeller::StoreAction::kMultisampleResolve;
-  color0.resolve_texture = resolve_tex;
-
-  impeller::RenderTarget render_target_desc;
-  render_target_desc.SetColorAttachment(color0, 0u);
-
-  return std::make_unique<flutter::EmbedderRenderTargetImpeller>(
-      backing_store, aiks_context,
-      std::make_unique<impeller::RenderTarget>(std::move(render_target_desc)),
-      on_release);
-#else
-  return nullptr;
-#endif
-}
-
 static sk_sp<SkSurface> MakeSkSurfaceFromBackingStore(
     GrDirectContext* context,
     const FlutterBackingStoreConfig& config,
@@ -1044,23 +951,9 @@
 }
 
 static std::unique_ptr<flutter::EmbedderRenderTarget>
-MakeRenderTargetFromSkSurface(FlutterBackingStore backing_store,
-                              sk_sp<SkSurface> skia_surface,
-                              fml::closure on_release) {
-  if (!skia_surface) {
-    return nullptr;
-  }
-  return std::make_unique<flutter::EmbedderRenderTargetSkia>(
-      backing_store, std::move(skia_surface), std::move(on_release));
-}
-
-static std::unique_ptr<flutter::EmbedderRenderTarget>
-CreateEmbedderRenderTarget(
-    const FlutterCompositor* compositor,
-    const FlutterBackingStoreConfig& config,
-    GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
-    bool enable_impeller) {
+CreateEmbedderRenderTarget(const FlutterCompositor* compositor,
+                           const FlutterBackingStoreConfig& config,
+                           GrDirectContext* context) {
   FlutterBackingStore backing_store = {};
   backing_store.struct_size = sizeof(backing_store);
 
@@ -1095,77 +988,53 @@
   // No safe access checks on the renderer are necessary since we allocated
   // the struct.
 
-  std::unique_ptr<flutter::EmbedderRenderTarget> render_target;
+  sk_sp<SkSurface> render_surface;
 
   switch (backing_store.type) {
-    case kFlutterBackingStoreTypeOpenGL: {
+    case kFlutterBackingStoreTypeOpenGL:
       switch (backing_store.open_gl.type) {
-        case kFlutterOpenGLTargetTypeTexture: {
-          auto skia_surface = MakeSkSurfaceFromBackingStore(
+        case kFlutterOpenGLTargetTypeTexture:
+          render_surface = MakeSkSurfaceFromBackingStore(
               context, config, &backing_store.open_gl.texture);
-          render_target = MakeRenderTargetFromSkSurface(
-              backing_store, std::move(skia_surface),
-              collect_callback.Release());
           break;
-        }
-        case kFlutterOpenGLTargetTypeFramebuffer: {
-          auto skia_surface = MakeSkSurfaceFromBackingStore(
+        case kFlutterOpenGLTargetTypeFramebuffer:
+          render_surface = MakeSkSurfaceFromBackingStore(
               context, config, &backing_store.open_gl.framebuffer);
-          render_target = MakeRenderTargetFromSkSurface(
-              backing_store, std::move(skia_surface),
-              collect_callback.Release());
           break;
-        }
       }
       break;
-    }
-    case kFlutterBackingStoreTypeSoftware: {
-      auto skia_surface = MakeSkSurfaceFromBackingStore(
-          context, config, &backing_store.software);
-      render_target = MakeRenderTargetFromSkSurface(
-          backing_store, std::move(skia_surface), collect_callback.Release());
+    case kFlutterBackingStoreTypeSoftware:
+      render_surface = MakeSkSurfaceFromBackingStore(context, config,
+                                                     &backing_store.software);
       break;
-    }
-    case kFlutterBackingStoreTypeSoftware2: {
-      auto skia_surface = MakeSkSurfaceFromBackingStore(
-          context, config, &backing_store.software2);
-      render_target = MakeRenderTargetFromSkSurface(
-          backing_store, std::move(skia_surface), collect_callback.Release());
+    case kFlutterBackingStoreTypeSoftware2:
+      render_surface = MakeSkSurfaceFromBackingStore(context, config,
+                                                     &backing_store.software2);
       break;
-    }
-    case kFlutterBackingStoreTypeMetal: {
-      if (enable_impeller) {
-        auto impeller_target = MakeRenderTargetFromBackingStoreImpeller(
-            backing_store, collect_callback.Release(), aiks_context, config,
-            &backing_store.metal);
-      } else {
-        auto skia_surface = MakeSkSurfaceFromBackingStore(context, config,
-                                                          &backing_store.metal);
-        render_target = MakeRenderTargetFromSkSurface(
-            backing_store, std::move(skia_surface), collect_callback.Release());
-      }
+    case kFlutterBackingStoreTypeMetal:
+      render_surface =
+          MakeSkSurfaceFromBackingStore(context, config, &backing_store.metal);
       break;
-    }
-    case kFlutterBackingStoreTypeVulkan: {
-      auto skia_surface =
+
+    case kFlutterBackingStoreTypeVulkan:
+      render_surface =
           MakeSkSurfaceFromBackingStore(context, config, &backing_store.vulkan);
-      render_target = MakeRenderTargetFromSkSurface(
-          backing_store, std::move(skia_surface), collect_callback.Release());
       break;
-    }
   };
 
-  if (!render_target) {
+  if (!render_surface) {
     FML_LOG(ERROR) << "Could not create a surface from an embedder provided "
                       "render target.";
+    return nullptr;
   }
-  return render_target;
+
+  return std::make_unique<flutter::EmbedderRenderTarget>(
+      backing_store, std::move(render_surface), collect_callback.Release());
 }
 
 static std::pair<std::unique_ptr<flutter::EmbedderExternalViewEmbedder>,
                  bool /* halt engine launch if true */>
-InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor,
-                                  bool enable_impeller) {
+InferExternalViewEmbedderFromArgs(const FlutterCompositor* compositor) {
   if (compositor == nullptr) {
     return {nullptr, false};
   }
@@ -1189,13 +1058,9 @@
 
   flutter::EmbedderExternalViewEmbedder::CreateRenderTargetCallback
       create_render_target_callback =
-          [captured_compositor, enable_impeller](
-              GrDirectContext* context,
-              const std::shared_ptr<impeller::AiksContext>& aiks_context,
-              const auto& config) {
+          [captured_compositor](GrDirectContext* context, const auto& config) {
             return CreateEmbedderRenderTarget(&captured_compositor, config,
-                                              context, aiks_context,
-                                              enable_impeller);
+                                              context);
           };
 
   flutter::EmbedderExternalViewEmbedder::PresentCallback present_callback =
@@ -1947,8 +1812,8 @@
                                       user_data]() { return ptr(user_data); };
   }
 
-  auto external_view_embedder_result = InferExternalViewEmbedderFromArgs(
-      SAFE_ACCESS(args, compositor, nullptr), settings.enable_impeller);
+  auto external_view_embedder_result =
+      InferExternalViewEmbedderFromArgs(SAFE_ACCESS(args, compositor, nullptr));
   if (external_view_embedder_result.second) {
     return LOG_EMBEDDER_ERROR(kInvalidArguments,
                               "Compositor arguments were invalid.");
@@ -1965,7 +1830,7 @@
 
   auto on_create_platform_view = InferPlatformViewCreationCallback(
       config, user_data, platform_dispatch_table,
-      std::move(external_view_embedder_result.first), settings.enable_impeller);
+      std::move(external_view_embedder_result.first));
 
   if (!on_create_platform_view) {
     return LOG_EMBEDDER_ERROR(
diff --git a/shell/platform/embedder/embedder_external_view.cc b/shell/platform/embedder/embedder_external_view.cc
index fe013ef..cd72a3e 100644
--- a/shell/platform/embedder/embedder_external_view.cc
+++ b/shell/platform/embedder/embedder_external_view.cc
@@ -3,15 +3,9 @@
 // found in the LICENSE file.
 
 #include "flutter/shell/platform/embedder/embedder_external_view.h"
-
-#include "flutter/display_list/dl_builder.h"
 #include "flutter/fml/trace_event.h"
 #include "flutter/shell/common/dl_op_spy.h"
 
-#ifdef IMPELLER_SUPPORTS_RENDERING
-#include "impeller/display_list/dl_dispatcher.h"
-#endif  // IMPELLER_SUPPORTS_RENDERING
-
 namespace flutter {
 
 static SkISize TransformedSurfaceSize(const SkISize& size,
@@ -89,30 +83,15 @@
       << "Unnecessarily asked to render into a render target when there was "
          "nothing to render.";
 
-#ifdef IMPELLER_SUPPORTS_RENDERING
-  auto* impeller_target = render_target.GetImpellerRenderTarget();
-  if (impeller_target) {
-    auto aiks_context = render_target.GetAiksContext();
-
-    auto dl_builder = DisplayListBuilder();
-    dl_builder.SetTransform(&surface_transformation_);
-    slice_->render_into(&dl_builder);
-
-    auto dispatcher = impeller::DlDispatcher();
-    dispatcher.drawDisplayList(dl_builder.Build(), 1);
-    return aiks_context->Render(dispatcher.EndRecordingAsPicture(),
-                                *impeller_target);
-  }
-#endif  // IMPELLER_SUPPORTS_RENDERING
-
-  auto skia_surface = render_target.GetSkiaSurface();
-  if (!skia_surface) {
+  auto surface = render_target.GetRenderSurface();
+  if (!surface) {
     return false;
   }
 
-  FML_DCHECK(render_target.GetRenderTargetSize() == render_surface_size_);
+  FML_DCHECK(SkISize::Make(surface->width(), surface->height()) ==
+             render_surface_size_);
 
-  auto canvas = skia_surface->getCanvas();
+  auto canvas = surface->getCanvas();
   if (!canvas) {
     return false;
   }
diff --git a/shell/platform/embedder/embedder_external_view_embedder.cc b/shell/platform/embedder/embedder_external_view_embedder.cc
index f87d451..e487009 100644
--- a/shell/platform/embedder/embedder_external_view_embedder.cc
+++ b/shell/platform/embedder/embedder_external_view_embedder.cc
@@ -125,7 +125,6 @@
 // |ExternalViewEmbedder|
 void EmbedderExternalViewEmbedder::SubmitFrame(
     GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
     std::unique_ptr<SurfaceFrame> frame) {
   auto [matched_render_targets, pending_keys] =
       render_target_cache_.GetExistingTargetsInCache(pending_views_);
@@ -173,8 +172,8 @@
     // the context must be reset.
     //
     // @warning: Embedder may trample on our OpenGL context here.
-    auto render_target = create_render_target_callback_(context, aiks_context,
-                                                        backing_store_config);
+    auto render_target =
+        create_render_target_callback_(context, backing_store_config);
 
     if (!render_target) {
       FML_LOG(ERROR) << "Embedder did not return a valid render target.";
diff --git a/shell/platform/embedder/embedder_external_view_embedder.h b/shell/platform/embedder/embedder_external_view_embedder.h
index 014f739..55a08f0 100644
--- a/shell/platform/embedder/embedder_external_view_embedder.h
+++ b/shell/platform/embedder/embedder_external_view_embedder.h
@@ -6,7 +6,6 @@
 #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_EXTERNAL_VIEW_EMBEDDER_H_
 
 #include <map>
-#include <memory>
 #include <unordered_map>
 
 #include "flutter/flow/embedded_views.h"
@@ -32,7 +31,6 @@
   using CreateRenderTargetCallback =
       std::function<std::unique_ptr<EmbedderRenderTarget>(
           GrDirectContext* context,
-          const std::shared_ptr<impeller::AiksContext>& aiks_context,
           const FlutterBackingStoreConfig& config)>;
   using PresentCallback =
       std::function<bool(const std::vector<const FlutterLayer*>& layers)>;
@@ -97,7 +95,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/platform/embedder/embedder_render_target.cc b/shell/platform/embedder/embedder_render_target.cc
index 69259e3..5d6d228 100644
--- a/shell/platform/embedder/embedder_render_target.cc
+++ b/shell/platform/embedder/embedder_render_target.cc
@@ -4,17 +4,24 @@
 
 #include "flutter/shell/platform/embedder/embedder_render_target.h"
 
-#include <optional>
 #include <utility>
 
+#include "flutter/fml/logging.h"
+
+#include "third_party/skia/include/core/SkSurface.h"
+
 namespace flutter {
 
 EmbedderRenderTarget::EmbedderRenderTarget(FlutterBackingStore backing_store,
+                                           sk_sp<SkSurface> render_surface,
                                            fml::closure on_release)
-    : backing_store_(backing_store), on_release_(std::move(on_release)) {
+    : backing_store_(backing_store),
+      render_surface_(std::move(render_surface)),
+      on_release_(std::move(on_release)) {
   // TODO(38468): The optimization to elide backing store updates between frames
   // has not been implemented yet.
   backing_store_.did_update = true;
+  FML_DCHECK(render_surface_);
 }
 
 EmbedderRenderTarget::~EmbedderRenderTarget() {
@@ -27,4 +34,8 @@
   return &backing_store_;
 }
 
+sk_sp<SkSurface> EmbedderRenderTarget::GetRenderSurface() const {
+  return render_surface_;
+}
+
 }  // namespace flutter
diff --git a/shell/platform/embedder/embedder_render_target.h b/shell/platform/embedder/embedder_render_target.h
index cfbb67c..8afbed3 100644
--- a/shell/platform/embedder/embedder_render_target.h
+++ b/shell/platform/embedder/embedder_render_target.h
@@ -5,18 +5,12 @@
 #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_
 #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_H_
 
-#include <memory>
 #include "flutter/fml/closure.h"
 #include "flutter/fml/macros.h"
 #include "flutter/shell/platform/embedder/embedder.h"
-#include "third_party/skia/include/core/SkSize.h"
+#include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkSurface.h"
 
-namespace impeller {
-class RenderTarget;
-class AiksContext;
-}  // namespace impeller
-
 namespace flutter {
 
 //------------------------------------------------------------------------------
@@ -28,11 +22,28 @@
 class EmbedderRenderTarget {
  public:
   //----------------------------------------------------------------------------
+  /// @brief      Creates a render target whose backing store is managed by the
+  ///             embedder. The way this render target is exposed to the engine
+  ///             is via an SkSurface and a callback that is invoked by this
+  ///             object in its destructor.
+  ///
+  /// @param[in]  backing_store   The backing store describing this render
+  ///                             target.
+  /// @param[in]  render_surface  The surface for this target.
+  /// @param[in]  on_release      The callback to invoke (eventually forwarded
+  ///                             to the embedder) when the backing store is no
+  ///                             longer required by the engine.
+  ///
+  EmbedderRenderTarget(FlutterBackingStore backing_store,
+                       sk_sp<SkSurface> render_surface,
+                       fml::closure on_release);
+
+  //----------------------------------------------------------------------------
   /// @brief      Destroys this instance of the render target and invokes the
   ///             callback for the embedder to release its resource associated
   ///             with the particular backing store.
   ///
-  virtual ~EmbedderRenderTarget();
+  ~EmbedderRenderTarget();
 
   //----------------------------------------------------------------------------
   /// @brief      A render surface the rasterizer can use to draw into the
@@ -40,30 +51,7 @@
   ///
   /// @return     The render surface.
   ///
-  virtual sk_sp<SkSurface> GetSkiaSurface() const = 0;
-
-  //----------------------------------------------------------------------------
-  /// @brief      An impeller render target the rasterizer can use to draw into
-  ///             the backing store.
-  ///
-  /// @return     The Impeller render target.
-  ///
-  virtual impeller::RenderTarget* GetImpellerRenderTarget() const = 0;
-
-  //----------------------------------------------------------------------------
-  /// @brief      Returns the AiksContext that should be used for rendering, if
-  ///             this render target is backed by Impeller.
-  ///
-  /// @return     The Impeller Aiks context.
-  ///
-  virtual std::shared_ptr<impeller::AiksContext> GetAiksContext() const = 0;
-
-  //----------------------------------------------------------------------------
-  /// @brief      Returns the size of the render target.
-  ///
-  /// @return     The size of the render target.
-  ///
-  virtual SkISize GetRenderTargetSize() const = 0;
+  sk_sp<SkSurface> GetRenderSurface() const;
 
   //----------------------------------------------------------------------------
   /// @brief      The embedder backing store descriptor. This is the descriptor
@@ -77,25 +65,9 @@
   ///
   const FlutterBackingStore* GetBackingStore() const;
 
- protected:
-  //----------------------------------------------------------------------------
-  /// @brief      Creates a render target whose backing store is managed by the
-  ///             embedder. The way this render target is exposed to the engine
-  ///             is via an SkSurface and a callback that is invoked by this
-  ///             object in its destructor.
-  ///
-  /// @param[in]  backing_store   The backing store describing this render
-  ///                             target.
-  /// @param[in]  on_release      The callback to invoke (eventually forwarded
-  ///                             to the embedder) when the backing store is no
-  ///                             longer required by the engine.
-  ///
-  EmbedderRenderTarget(FlutterBackingStore backing_store,
-                       fml::closure on_release);
-
  private:
   FlutterBackingStore backing_store_;
-
+  sk_sp<SkSurface> render_surface_;
   fml::closure on_release_;
 
   FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTarget);
diff --git a/shell/platform/embedder/embedder_render_target_cache.cc b/shell/platform/embedder/embedder_render_target_cache.cc
index 3d0e6b4..1347b03 100644
--- a/shell/platform/embedder/embedder_render_target_cache.cc
+++ b/shell/platform/embedder/embedder_render_target_cache.cc
@@ -56,8 +56,9 @@
   if (target == nullptr) {
     return;
   }
+  auto surface = target->GetRenderSurface();
   auto desc = EmbedderExternalView::RenderTargetDescriptor{
-      view_identifier, target->GetRenderTargetSize()};
+      view_identifier, SkISize::Make(surface->width(), surface->height())};
   cached_render_targets_[desc].push(std::move(target));
 }
 
diff --git a/shell/platform/embedder/embedder_render_target_impeller.cc b/shell/platform/embedder/embedder_render_target_impeller.cc
deleted file mode 100644
index 44f23b6..0000000
--- a/shell/platform/embedder/embedder_render_target_impeller.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "flutter/shell/platform/embedder/embedder_render_target_impeller.h"
-
-#include "flutter/fml/logging.h"
-#include "flutter/impeller/renderer/render_target.h"
-
-namespace flutter {
-
-EmbedderRenderTargetImpeller::EmbedderRenderTargetImpeller(
-    FlutterBackingStore backing_store,
-    std::shared_ptr<impeller::AiksContext> aiks_context,
-    std::unique_ptr<impeller::RenderTarget> impeller_target,
-    fml::closure on_release)
-    : EmbedderRenderTarget(backing_store, std::move(on_release)),
-      aiks_context_(std::move(aiks_context)),
-      impeller_target_(std::move(impeller_target)) {
-  FML_DCHECK(aiks_context_);
-  FML_DCHECK(impeller_target_);
-}
-
-EmbedderRenderTargetImpeller::~EmbedderRenderTargetImpeller() = default;
-
-sk_sp<SkSurface> EmbedderRenderTargetImpeller::GetSkiaSurface() const {
-  return nullptr;
-}
-
-impeller::RenderTarget* EmbedderRenderTargetImpeller::GetImpellerRenderTarget()
-    const {
-  return impeller_target_.get();
-}
-
-std::shared_ptr<impeller::AiksContext>
-EmbedderRenderTargetImpeller::GetAiksContext() const {
-  return aiks_context_;
-}
-
-SkISize EmbedderRenderTargetImpeller::GetRenderTargetSize() const {
-  auto size = impeller_target_->GetRenderTargetSize();
-  return SkISize::Make(size.width, size.height);
-}
-
-}  // namespace flutter
diff --git a/shell/platform/embedder/embedder_render_target_impeller.h b/shell/platform/embedder/embedder_render_target_impeller.h
deleted file mode 100644
index 2425402..0000000
--- a/shell/platform/embedder/embedder_render_target_impeller.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_
-#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_
-
-#include "flutter/shell/platform/embedder/embedder_render_target.h"
-
-namespace flutter {
-
-class EmbedderRenderTargetImpeller final : public EmbedderRenderTarget {
- public:
-  EmbedderRenderTargetImpeller(
-      FlutterBackingStore backing_store,
-      std::shared_ptr<impeller::AiksContext> aiks_context,
-      std::unique_ptr<impeller::RenderTarget> impeller_target,
-      fml::closure on_release);
-
-  // |EmbedderRenderTarget|
-  ~EmbedderRenderTargetImpeller() override;
-
-  // |EmbedderRenderTarget|
-  sk_sp<SkSurface> GetSkiaSurface() const override;
-
-  // |EmbedderRenderTarget|
-  impeller::RenderTarget* GetImpellerRenderTarget() const override;
-
-  // |EmbedderRenderTarget|
-  std::shared_ptr<impeller::AiksContext> GetAiksContext() const override;
-
-  // |EmbedderRenderTarget|
-  SkISize GetRenderTargetSize() const override;
-
- private:
-  std::shared_ptr<impeller::AiksContext> aiks_context_;
-  std::unique_ptr<impeller::RenderTarget> impeller_target_;
-
-  FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTargetImpeller);
-};
-
-}  // namespace flutter
-
-#endif  // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_IMPELLER_H_
diff --git a/shell/platform/embedder/embedder_render_target_skia.cc b/shell/platform/embedder/embedder_render_target_skia.cc
deleted file mode 100644
index e8d60ca..0000000
--- a/shell/platform/embedder/embedder_render_target_skia.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "flutter/shell/platform/embedder/embedder_render_target_skia.h"
-
-#include "flutter/fml/logging.h"
-
-namespace flutter {
-
-EmbedderRenderTargetSkia::EmbedderRenderTargetSkia(
-    FlutterBackingStore backing_store,
-    sk_sp<SkSurface> render_surface,
-    fml::closure on_release)
-    : EmbedderRenderTarget(backing_store, std::move(on_release)),
-      render_surface_(std::move(render_surface)) {
-  FML_DCHECK(render_surface_);
-}
-
-EmbedderRenderTargetSkia::~EmbedderRenderTargetSkia() = default;
-
-sk_sp<SkSurface> EmbedderRenderTargetSkia::GetSkiaSurface() const {
-  return render_surface_;
-}
-
-impeller::RenderTarget* EmbedderRenderTargetSkia::GetImpellerRenderTarget()
-    const {
-  return nullptr;
-}
-
-std::shared_ptr<impeller::AiksContext>
-EmbedderRenderTargetSkia::GetAiksContext() const {
-  return nullptr;
-}
-
-SkISize EmbedderRenderTargetSkia::GetRenderTargetSize() const {
-  return SkISize::Make(render_surface_->width(), render_surface_->height());
-}
-
-}  // namespace flutter
diff --git a/shell/platform/embedder/embedder_render_target_skia.h b/shell/platform/embedder/embedder_render_target_skia.h
deleted file mode 100644
index 2ccacfe..0000000
--- a/shell/platform/embedder/embedder_render_target_skia.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_
-#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_
-
-#include "flutter/shell/platform/embedder/embedder_render_target.h"
-
-namespace flutter {
-
-class EmbedderRenderTargetSkia final : public EmbedderRenderTarget {
- public:
-  EmbedderRenderTargetSkia(FlutterBackingStore backing_store,
-                           sk_sp<SkSurface> render_surface,
-                           fml::closure on_release);
-
-  // |EmbedderRenderTarget|
-  ~EmbedderRenderTargetSkia() override;
-
-  // |EmbedderRenderTarget|
-  sk_sp<SkSurface> GetSkiaSurface() const override;
-
-  // |EmbedderRenderTarget|
-  impeller::RenderTarget* GetImpellerRenderTarget() const override;
-
-  // |EmbedderRenderTarget|
-  std::shared_ptr<impeller::AiksContext> GetAiksContext() const override;
-
-  // |EmbedderRenderTarget|
-  SkISize GetRenderTargetSize() const override;
-
- private:
-  sk_sp<SkSurface> render_surface_;
-
-  FML_DISALLOW_COPY_AND_ASSIGN(EmbedderRenderTargetSkia);
-};
-
-}  // namespace flutter
-
-#endif  // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_RENDER_TARGET_SKIA_H_
diff --git a/shell/platform/embedder/embedder_surface.cc b/shell/platform/embedder/embedder_surface.cc
index 029833f..dbe619b 100644
--- a/shell/platform/embedder/embedder_surface.cc
+++ b/shell/platform/embedder/embedder_surface.cc
@@ -10,13 +10,4 @@
 
 EmbedderSurface::~EmbedderSurface() = default;
 
-std::shared_ptr<impeller::Context> EmbedderSurface::CreateImpellerContext()
-    const {
-  return nullptr;
-}
-
-sk_sp<GrDirectContext> EmbedderSurface::CreateResourceContext() const {
-  return nullptr;
-}
-
 }  // namespace flutter
diff --git a/shell/platform/embedder/embedder_surface.h b/shell/platform/embedder/embedder_surface.h
index 32873f1..ed8dbff 100644
--- a/shell/platform/embedder/embedder_surface.h
+++ b/shell/platform/embedder/embedder_surface.h
@@ -5,7 +5,6 @@
 #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_H_
 #define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_H_
 
-#include <memory>
 #include "flutter/flow/embedded_views.h"
 #include "flutter/flow/surface.h"
 #include "flutter/fml/macros.h"
@@ -22,9 +21,7 @@
 
   virtual std::unique_ptr<Surface> CreateGPUSurface() = 0;
 
-  virtual std::shared_ptr<impeller::Context> CreateImpellerContext() const;
-
-  virtual sk_sp<GrDirectContext> CreateResourceContext() const;
+  virtual sk_sp<GrDirectContext> CreateResourceContext() const = 0;
 
  private:
   FML_DISALLOW_COPY_AND_ASSIGN(EmbedderSurface);
diff --git a/shell/platform/embedder/embedder_surface_metal_impeller.h b/shell/platform/embedder/embedder_surface_metal_impeller.h
deleted file mode 100644
index 4fb2b99..0000000
--- a/shell/platform/embedder/embedder_surface_metal_impeller.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_
-#define FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_
-
-#include <memory>
-#include "flutter/fml/macros.h"
-#include "flutter/shell/gpu/gpu_surface_metal_delegate.h"
-#include "flutter/shell/gpu/gpu_surface_metal_skia.h"
-#include "flutter/shell/platform/embedder/embedder_external_view_embedder.h"
-#include "flutter/shell/platform/embedder/embedder_surface.h"
-#include "fml/concurrent_message_loop.h"
-
-namespace impeller {
-class Context;
-}
-
-namespace flutter {
-
-class EmbedderSurfaceMetalImpeller final : public EmbedderSurface,
-                                           public GPUSurfaceMetalDelegate {
- public:
-  struct MetalDispatchTable {
-    std::function<bool(GPUMTLTextureInfo texture)> present;  // required
-    std::function<GPUMTLTextureInfo(const SkISize& frame_size)>
-        get_texture;  // required
-  };
-
-  EmbedderSurfaceMetalImpeller(
-      GPUMTLDeviceHandle device,
-      GPUMTLCommandQueueHandle command_queue,
-      MetalDispatchTable dispatch_table,
-      std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
-
-  ~EmbedderSurfaceMetalImpeller() override;
-
- private:
-  bool valid_ = false;
-  MetalDispatchTable metal_dispatch_table_;
-  std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder_;
-  std::shared_ptr<impeller::Context> context_;
-  std::shared_ptr<fml::ConcurrentMessageLoop> concurrent_loop_;
-
-  // |EmbedderSurface|
-  bool IsValid() const override;
-
-  // |EmbedderSurface|
-  std::unique_ptr<Surface> CreateGPUSurface() override;
-
-  // |GPUSurfaceMetalDelegate|
-  GPUCAMetalLayerHandle GetCAMetalLayer(
-      const SkISize& frame_size) const override;
-
-  // |GPUSurfaceMetalDelegate|
-  bool PresentDrawable(GrMTLHandle drawable) const override;
-
-  // |GPUSurfaceMetalDelegate|
-  GPUMTLTextureInfo GetMTLTexture(const SkISize& frame_size) const override;
-
-  // |GPUSurfaceMetalDelegate|
-  bool PresentTexture(GPUMTLTextureInfo texture) const override;
-
-  FML_DISALLOW_COPY_AND_ASSIGN(EmbedderSurfaceMetalImpeller);
-};
-
-}  // namespace flutter
-
-#endif  // FLUTTER_SHELL_PLATFORM_EMBEDDER_EMBEDDER_SURFACE_METAL_IMPELLER_H_
diff --git a/shell/platform/embedder/embedder_surface_metal_impeller.mm b/shell/platform/embedder/embedder_surface_metal_impeller.mm
deleted file mode 100644
index c7984f4..0000000
--- a/shell/platform/embedder/embedder_surface_metal_impeller.mm
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2013 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <memory>
-#include <utility>
-
-#include "flutter/shell/platform/embedder/embedder_surface_metal_impeller.h"
-
-#include "flutter/fml/logging.h"
-#include "flutter/fml/synchronization/sync_switch.h"
-#include "flutter/shell/gpu/gpu_surface_metal_delegate.h"
-#include "flutter/shell/gpu/gpu_surface_metal_impeller.h"
-#import "flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.h"
-#include "impeller/entity/mtl/entity_shaders.h"
-#include "impeller/entity/mtl/framebuffer_blend_shaders.h"
-#include "impeller/entity/mtl/modern_shaders.h"
-#include "impeller/renderer/backend/metal/context_mtl.h"
-#include "impeller/scene/shaders/mtl/scene_shaders.h"
-
-FLUTTER_ASSERT_NOT_ARC
-
-namespace flutter {
-
-EmbedderSurfaceMetalImpeller::EmbedderSurfaceMetalImpeller(
-    GPUMTLDeviceHandle device,
-    GPUMTLCommandQueueHandle command_queue,
-    MetalDispatchTable metal_dispatch_table,
-    std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
-    : GPUSurfaceMetalDelegate(MTLRenderTargetType::kMTLTexture),
-      metal_dispatch_table_(std::move(metal_dispatch_table)),
-      external_view_embedder_(std::move(external_view_embedder)),
-      concurrent_loop_(fml::ConcurrentMessageLoop::Create()) {
-  std::vector<std::shared_ptr<fml::Mapping>> shader_mappings = {
-      std::make_shared<fml::NonOwnedMapping>(impeller_entity_shaders_data,
-                                             impeller_entity_shaders_length),
-      std::make_shared<fml::NonOwnedMapping>(impeller_scene_shaders_data,
-                                             impeller_scene_shaders_length),
-      std::make_shared<fml::NonOwnedMapping>(impeller_modern_shaders_data,
-                                             impeller_modern_shaders_length),
-      std::make_shared<fml::NonOwnedMapping>(impeller_framebuffer_blend_shaders_data,
-                                             impeller_framebuffer_blend_shaders_length),
-  };
-  context_ = impeller::ContextMTL::Create(
-      (id<MTLDevice>)device,                     // device
-      (id<MTLCommandQueue>)command_queue,        // command_queue
-      shader_mappings,                           // shader_libraries_data
-      concurrent_loop_->GetTaskRunner(),         // worker_task_runner
-      std::make_shared<fml::SyncSwitch>(false),  // is_gpu_disabled_sync_switch
-      "Impeller Library"                         // library_label
-  );
-
-  valid_ = !!context_;
-}
-
-EmbedderSurfaceMetalImpeller::~EmbedderSurfaceMetalImpeller() = default;
-
-bool EmbedderSurfaceMetalImpeller::IsValid() const {
-  return valid_;
-}
-
-std::unique_ptr<Surface> EmbedderSurfaceMetalImpeller::CreateGPUSurface()
-    IMPELLER_CA_METAL_LAYER_AVAILABLE {
-  if (!IsValid()) {
-    return nullptr;
-  }
-
-  const bool render_to_surface = !external_view_embedder_;
-  auto surface = std::make_unique<GPUSurfaceMetalImpeller>(this, context_, render_to_surface);
-
-  if (!surface->IsValid()) {
-    return nullptr;
-  }
-
-  return surface;
-}
-
-GPUCAMetalLayerHandle EmbedderSurfaceMetalImpeller::GetCAMetalLayer(
-    const SkISize& frame_info) const {
-  FML_CHECK(false) << "Only rendering to MTLTexture is supported.";
-  return nullptr;
-}
-
-bool EmbedderSurfaceMetalImpeller::PresentDrawable(GrMTLHandle drawable) const {
-  FML_CHECK(false) << "Only rendering to MTLTexture is supported.";
-  return false;
-}
-
-GPUMTLTextureInfo EmbedderSurfaceMetalImpeller::GetMTLTexture(const SkISize& frame_info) const {
-  return metal_dispatch_table_.get_texture(frame_info);
-}
-
-bool EmbedderSurfaceMetalImpeller::PresentTexture(GPUMTLTextureInfo texture) const {
-  return metal_dispatch_table_.present(texture);
-}
-
-}  // namespace flutter
diff --git a/shell/platform/embedder/platform_view_embedder.cc b/shell/platform/embedder/platform_view_embedder.cc
index ccbe0fc..1cedc22 100644
--- a/shell/platform/embedder/platform_view_embedder.cc
+++ b/shell/platform/embedder/platform_view_embedder.cc
@@ -86,7 +86,7 @@
 PlatformViewEmbedder::PlatformViewEmbedder(
     PlatformView::Delegate& delegate,
     const flutter::TaskRunners& task_runners,
-    std::unique_ptr<EmbedderSurface> embedder_surface,
+    std::unique_ptr<EmbedderSurfaceMetal> embedder_surface,
     PlatformDispatchTable platform_dispatch_table,
     std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder)
     : PlatformView(delegate, task_runners),
@@ -157,11 +157,6 @@
   return external_view_embedder_;
 }
 
-std::shared_ptr<impeller::Context> PlatformViewEmbedder::GetImpellerContext()
-    const {
-  return embedder_surface_->CreateImpellerContext();
-}
-
 // |PlatformView|
 sk_sp<GrDirectContext> PlatformViewEmbedder::CreateResourceContext() const {
   if (embedder_surface_ == nullptr) {
diff --git a/shell/platform/embedder/platform_view_embedder.h b/shell/platform/embedder/platform_view_embedder.h
index 87378b5..20f4dc1 100644
--- a/shell/platform/embedder/platform_view_embedder.h
+++ b/shell/platform/embedder/platform_view_embedder.h
@@ -76,7 +76,7 @@
   PlatformViewEmbedder(
       PlatformView::Delegate& delegate,
       const flutter::TaskRunners& task_runners,
-      std::unique_ptr<EmbedderSurface> embedder_surface,
+      std::unique_ptr<EmbedderSurfaceMetal> embedder_surface,
       PlatformDispatchTable platform_dispatch_table,
       std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder);
 #endif
@@ -119,9 +119,6 @@
   std::shared_ptr<ExternalViewEmbedder> CreateExternalViewEmbedder() override;
 
   // |PlatformView|
-  std::shared_ptr<impeller::Context> GetImpellerContext() const override;
-
-  // |PlatformView|
   sk_sp<GrDirectContext> CreateResourceContext() const override;
 
   // |PlatformView|
diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc
index 366b72b..901bd8c 100644
--- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc
+++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.cc
@@ -132,7 +132,6 @@
 
 void FlatlandExternalViewEmbedder::SubmitFrame(
     GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
     std::unique_ptr<flutter::SurfaceFrame> frame) {
   TRACE_EVENT0("flutter", "FlatlandExternalViewEmbedder::SubmitFrame");
   std::vector<std::unique_ptr<SurfaceProducerSurface>> frame_surfaces;
diff --git a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h
index 5a3142e..00a845c 100644
--- a/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h
+++ b/shell/platform/fuchsia/flutter/flatland_external_view_embedder.h
@@ -87,7 +87,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<flutter::SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc
index 37e8d6a..21c6810 100644
--- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc
+++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.cc
@@ -231,7 +231,6 @@
 
 void GfxExternalViewEmbedder::SubmitFrame(
     GrDirectContext* context,
-    const std::shared_ptr<impeller::AiksContext>& aiks_context,
     std::unique_ptr<flutter::SurfaceFrame> frame) {
   TRACE_EVENT0("flutter", "GfxExternalViewEmbedder::SubmitFrame");
   std::vector<std::unique_ptr<SurfaceProducerSurface>> frame_surfaces;
diff --git a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h
index 6d0bc30..eb37d2e 100644
--- a/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h
+++ b/shell/platform/fuchsia/flutter/gfx_external_view_embedder.h
@@ -110,7 +110,6 @@
 
   // |ExternalViewEmbedder|
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<flutter::SurfaceFrame> frame) override;
 
   // |ExternalViewEmbedder|
diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc
index c0aa42e..4959461 100644
--- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc
+++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc
@@ -54,7 +54,6 @@
       fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) override {}
 
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<flutter::SurfaceFrame> frame) override {}
 
   void PrerollCompositeEmbeddedView(
diff --git a/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc b/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc
index 58af0cc..35f734d 100644
--- a/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc
+++ b/shell/platform/fuchsia/flutter/tests/flatland_external_view_embedder_unittests.cc
@@ -335,12 +335,11 @@
   flutter::SurfaceFrame::FramebufferInfo framebuffer_info;
   framebuffer_info.supports_readback = true;
   external_view_embedder.SubmitFrame(
-      nullptr, nullptr,
-      std::make_unique<flutter::SurfaceFrame>(
-          nullptr, std::move(framebuffer_info),
-          [](const flutter::SurfaceFrame& surface_frame,
-             flutter::DlCanvas* canvas) { return true; },
-          frame_size));
+      nullptr, std::make_unique<flutter::SurfaceFrame>(
+                   nullptr, std::move(framebuffer_info),
+                   [](const flutter::SurfaceFrame& surface_frame,
+                      flutter::DlCanvas* canvas) { return true; },
+                   frame_size));
 }
 
 void DrawFrameWithView(
@@ -366,12 +365,11 @@
   flutter::SurfaceFrame::FramebufferInfo framebuffer_info;
   framebuffer_info.supports_readback = true;
   external_view_embedder.SubmitFrame(
-      nullptr, nullptr,
-      std::make_unique<flutter::SurfaceFrame>(
-          nullptr, std::move(framebuffer_info),
-          [](const flutter::SurfaceFrame& surface_frame,
-             flutter::DlCanvas* canvas) { return true; },
-          frame_size));
+      nullptr, std::make_unique<flutter::SurfaceFrame>(
+                   nullptr, std::move(framebuffer_info),
+                   [](const flutter::SurfaceFrame& surface_frame,
+                      flutter::DlCanvas* canvas) { return true; },
+                   frame_size));
 }
 
 };  // namespace
diff --git a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc
index 78f6f95..ce1d55f 100644
--- a/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc
+++ b/shell/platform/fuchsia/flutter/tests/flatland_platform_view_unittest.cc
@@ -53,7 +53,6 @@
       fml::RefPtr<fml::RasterThreadMerger> raster_thread_merger) override {}
 
   void SubmitFrame(GrDirectContext* context,
-                   const std::shared_ptr<impeller::AiksContext>& aiks_context,
                    std::unique_ptr<flutter::SurfaceFrame> frame) override {}
 
   void PrerollCompositeEmbeddedView(
diff --git a/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc b/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc
index eba9a2d..77c04bb 100644
--- a/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc
+++ b/shell/platform/fuchsia/flutter/tests/gfx_external_view_embedder_unittests.cc
@@ -458,12 +458,11 @@
   external_view_embedder.EndFrame(false, nullptr);
   flutter::SurfaceFrame::FramebufferInfo framebuffer_info;
   external_view_embedder.SubmitFrame(
-      nullptr, nullptr,
-      std::make_unique<flutter::SurfaceFrame>(
-          nullptr, framebuffer_info,
-          [](const flutter::SurfaceFrame& surface_frame,
-             flutter::DlCanvas* canvas) { return true; },
-          frame_size));
+      nullptr, std::make_unique<flutter::SurfaceFrame>(
+                   nullptr, framebuffer_info,
+                   [](const flutter::SurfaceFrame& surface_frame,
+                      flutter::DlCanvas* canvas) { return true; },
+                   frame_size));
 }
 
 void DrawFrameWithView(
@@ -488,12 +487,11 @@
   external_view_embedder.EndFrame(false, nullptr);
   flutter::SurfaceFrame::FramebufferInfo framebuffer_info;
   external_view_embedder.SubmitFrame(
-      nullptr, nullptr,
-      std::make_unique<flutter::SurfaceFrame>(
-          nullptr, framebuffer_info,
-          [](const flutter::SurfaceFrame& surface_frame,
-             flutter::DlCanvas* canvas) { return true; },
-          frame_size));
+      nullptr, std::make_unique<flutter::SurfaceFrame>(
+                   nullptr, framebuffer_info,
+                   [](const flutter::SurfaceFrame& surface_frame,
+                      flutter::DlCanvas* canvas) { return true; },
+                   frame_size));
 }
 
 FramePresentedInfo MakeFramePresentedInfoForOnePresent(
