[Impeller] remove capability to read from onscreen. (#47808)

As discovered by @knopp in https://github.com/flutter/flutter/issues/131567#issuecomment-1678210475, this is actually reducing performance substantially when there are multiple blurs. In the case of https://github.com/flutter/flutter/issues/132735 , removing this capbility improves GPU performance from 400ms per frame to ~100 ms per frame.

Fixes https://github.com/flutter/flutter/issues/131567#issuecomment-1678210475

-----

  | Macrobench | Example App
-- | -- | --
TOT | 250 | 450
W/Out OnScreen | 203-187 | 125-109
W/Out Onscreen and Resolve | 203 | 125
diff --git a/impeller/entity/entity_pass.cc b/impeller/entity/entity_pass.cc
index c6c39a6..dcfd141 100644
--- a/impeller/entity/entity_pass.cc
+++ b/impeller/entity/entity_pass.cc
@@ -333,16 +333,11 @@
       .coverage = Rect::MakeSize(root_render_target.GetRenderTargetSize()),
       .clip_depth = 0}};
 
-  bool supports_onscreen_backdrop_reads =
-      renderer.GetDeviceCapabilities().SupportsReadFromOnscreenTexture() &&
-      // If the backend doesn't have `SupportsReadFromResolve`, we need to flip
-      // between two textures when restoring a previous MSAA pass.
-      renderer.GetDeviceCapabilities().SupportsReadFromResolve();
   bool reads_from_onscreen_backdrop = GetTotalPassReads(renderer) > 0;
   // In this branch path, we need to render everything to an offscreen texture
   // and then blit the results onto the onscreen texture. If using this branch,
   // there's no need to set up a stencil attachment on the root render target.
-  if (!supports_onscreen_backdrop_reads && reads_from_onscreen_backdrop) {
+  if (reads_from_onscreen_backdrop) {
     auto offscreen_target =
         CreateRenderTarget(renderer, root_render_target.GetRenderTargetSize(),
                            GetClearColor(render_target.GetRenderTargetSize()));
diff --git a/impeller/renderer/backend/gles/capabilities_gles.cc b/impeller/renderer/backend/gles/capabilities_gles.cc
index 9b2251c..c659dad 100644
--- a/impeller/renderer/backend/gles/capabilities_gles.cc
+++ b/impeller/renderer/backend/gles/capabilities_gles.cc
@@ -169,10 +169,6 @@
   return false;
 }
 
-bool CapabilitiesGLES::SupportsReadFromOnscreenTexture() const {
-  return false;
-}
-
 bool CapabilitiesGLES::SupportsReadFromResolve() const {
   return false;
 }
diff --git a/impeller/renderer/backend/gles/capabilities_gles.h b/impeller/renderer/backend/gles/capabilities_gles.h
index 47dcaa3..921d3a4 100644
--- a/impeller/renderer/backend/gles/capabilities_gles.h
+++ b/impeller/renderer/backend/gles/capabilities_gles.h
@@ -98,9 +98,6 @@
   bool SupportsComputeSubgroups() const override;
 
   // |Capabilities|
-  bool SupportsReadFromOnscreenTexture() const override;
-
-  // |Capabilities|
   bool SupportsReadFromResolve() const override;
 
   // |Capabilities|
diff --git a/impeller/renderer/backend/gles/test/capabilities_unittests.cc b/impeller/renderer/backend/gles/test/capabilities_unittests.cc
index 5a82cf5..530c5c5 100644
--- a/impeller/renderer/backend/gles/test/capabilities_unittests.cc
+++ b/impeller/renderer/backend/gles/test/capabilities_unittests.cc
@@ -22,7 +22,6 @@
   EXPECT_FALSE(capabilities->SupportsFramebufferFetch());
   EXPECT_FALSE(capabilities->SupportsCompute());
   EXPECT_FALSE(capabilities->SupportsComputeSubgroups());
-  EXPECT_FALSE(capabilities->SupportsReadFromOnscreenTexture());
   EXPECT_FALSE(capabilities->SupportsReadFromResolve());
   EXPECT_FALSE(capabilities->SupportsDecalSamplerAddressMode());
   EXPECT_FALSE(capabilities->SupportsDeviceTransientTextures());
diff --git a/impeller/renderer/backend/metal/context_mtl.mm b/impeller/renderer/backend/metal/context_mtl.mm
index 06fd347..9373d3e 100644
--- a/impeller/renderer/backend/metal/context_mtl.mm
+++ b/impeller/renderer/backend/metal/context_mtl.mm
@@ -66,7 +66,6 @@
       .SetSupportsCompute(true)
       .SetSupportsComputeSubgroups(DeviceSupportsComputeSubgroups(device))
       .SetSupportsReadFromResolve(true)
-      .SetSupportsReadFromOnscreenTexture(true)
       .SetSupportsDeviceTransientTextures(true)
       .Build();
 }
diff --git a/impeller/renderer/backend/vulkan/capabilities_vk.cc b/impeller/renderer/backend/vulkan/capabilities_vk.cc
index ada7712..8af5a31 100644
--- a/impeller/renderer/backend/vulkan/capabilities_vk.cc
+++ b/impeller/renderer/backend/vulkan/capabilities_vk.cc
@@ -451,11 +451,6 @@
   return false;
 }
 
-// |Capabilities|
-bool CapabilitiesVK::SupportsReadFromOnscreenTexture() const {
-  return false;
-}
-
 bool CapabilitiesVK::SupportsDecalSamplerAddressMode() const {
   return true;
 }
diff --git a/impeller/renderer/backend/vulkan/capabilities_vk.h b/impeller/renderer/backend/vulkan/capabilities_vk.h
index a768610..f7ffd22 100644
--- a/impeller/renderer/backend/vulkan/capabilities_vk.h
+++ b/impeller/renderer/backend/vulkan/capabilities_vk.h
@@ -86,9 +86,6 @@
   bool SupportsReadFromResolve() const override;
 
   // |Capabilities|
-  bool SupportsReadFromOnscreenTexture() const override;
-
-  // |Capabilities|
   bool SupportsDecalSamplerAddressMode() const override;
 
   // |Capabilities|
diff --git a/impeller/renderer/capabilities.cc b/impeller/renderer/capabilities.cc
index 80ea8e0..4dcda95 100644
--- a/impeller/renderer/capabilities.cc
+++ b/impeller/renderer/capabilities.cc
@@ -50,11 +50,6 @@
   }
 
   // |Capabilities|
-  bool SupportsReadFromOnscreenTexture() const override {
-    return supports_read_from_onscreen_texture_;
-  }
-
-  // |Capabilities|
   bool SupportsReadFromResolve() const override {
     return supports_read_from_resolve_;
   }
@@ -91,7 +86,6 @@
                        bool supports_framebuffer_fetch,
                        bool supports_compute,
                        bool supports_compute_subgroups,
-                       bool supports_read_from_onscreen_texture,
                        bool supports_read_from_resolve,
                        bool supports_decal_sampler_address_mode,
                        bool supports_device_transient_textures,
@@ -105,8 +99,6 @@
         supports_framebuffer_fetch_(supports_framebuffer_fetch),
         supports_compute_(supports_compute),
         supports_compute_subgroups_(supports_compute_subgroups),
-        supports_read_from_onscreen_texture_(
-            supports_read_from_onscreen_texture),
         supports_read_from_resolve_(supports_read_from_resolve),
         supports_decal_sampler_address_mode_(
             supports_decal_sampler_address_mode),
@@ -124,7 +116,6 @@
   bool supports_framebuffer_fetch_ = false;
   bool supports_compute_ = false;
   bool supports_compute_subgroups_ = false;
-  bool supports_read_from_onscreen_texture_ = false;
   bool supports_read_from_resolve_ = false;
   bool supports_decal_sampler_address_mode_ = false;
   bool supports_device_transient_textures_ = false;
@@ -180,18 +171,6 @@
   return *this;
 }
 
-CapabilitiesBuilder& CapabilitiesBuilder::SetSupportsReadFromOnscreenTexture(
-    bool read_from_onscreen_texture) {
-  supports_read_from_onscreen_texture_ = read_from_onscreen_texture;
-  return *this;
-}
-
-CapabilitiesBuilder& CapabilitiesBuilder::SetSupportsReadFromResolve(
-    bool read_from_resolve) {
-  supports_read_from_resolve_ = read_from_resolve;
-  return *this;
-}
-
 CapabilitiesBuilder& CapabilitiesBuilder::SetDefaultColorFormat(
     PixelFormat value) {
   default_color_format_ = value;
@@ -210,6 +189,12 @@
   return *this;
 }
 
+CapabilitiesBuilder& CapabilitiesBuilder::SetSupportsReadFromResolve(
+    bool read_from_resolve) {
+  supports_read_from_resolve_ = read_from_resolve;
+  return *this;
+}
+
 CapabilitiesBuilder& CapabilitiesBuilder::SetSupportsDecalSamplerAddressMode(
     bool value) {
   supports_decal_sampler_address_mode_ = value;
@@ -231,7 +216,6 @@
       supports_framebuffer_fetch_,                                        //
       supports_compute_,                                                  //
       supports_compute_subgroups_,                                        //
-      supports_read_from_onscreen_texture_,                               //
       supports_read_from_resolve_,                                        //
       supports_decal_sampler_address_mode_,                               //
       supports_device_transient_textures_,                                //
diff --git a/impeller/renderer/capabilities.h b/impeller/renderer/capabilities.h
index 99d5986..48f12a7 100644
--- a/impeller/renderer/capabilities.h
+++ b/impeller/renderer/capabilities.h
@@ -64,10 +64,6 @@
   ///         command subgroups.
   virtual bool SupportsComputeSubgroups() const = 0;
 
-  /// @brief  Whether the context backend supports binding the on-screen surface
-  ///         texture for shader reading.
-  virtual bool SupportsReadFromOnscreenTexture() const = 0;
-
   /// @brief  Whether the context backend supports binding the current
   ///         `RenderPass` attachments. This is supported if the backend can
   ///         guarantee that attachment textures will not be mutated until the
@@ -136,8 +132,6 @@
 
   CapabilitiesBuilder& SetSupportsComputeSubgroups(bool value);
 
-  CapabilitiesBuilder& SetSupportsReadFromOnscreenTexture(bool value);
-
   CapabilitiesBuilder& SetSupportsReadFromResolve(bool value);
 
   CapabilitiesBuilder& SetDefaultColorFormat(PixelFormat value);
@@ -160,7 +154,6 @@
   bool supports_framebuffer_fetch_ = false;
   bool supports_compute_ = false;
   bool supports_compute_subgroups_ = false;
-  bool supports_read_from_onscreen_texture_ = false;
   bool supports_read_from_resolve_ = false;
   bool supports_decal_sampler_address_mode_ = false;
   bool supports_device_transient_textures_ = false;
diff --git a/impeller/renderer/capabilities_unittests.cc b/impeller/renderer/capabilities_unittests.cc
index beab9a9..06c9bc3 100644
--- a/impeller/renderer/capabilities_unittests.cc
+++ b/impeller/renderer/capabilities_unittests.cc
@@ -25,7 +25,6 @@
 CAPABILITY_TEST(SupportsFramebufferFetch, false);
 CAPABILITY_TEST(SupportsCompute, false);
 CAPABILITY_TEST(SupportsComputeSubgroups, false);
-CAPABILITY_TEST(SupportsReadFromOnscreenTexture, false);
 CAPABILITY_TEST(SupportsReadFromResolve, false);
 CAPABILITY_TEST(SupportsDecalSamplerAddressMode, false);
 CAPABILITY_TEST(SupportsDeviceTransientTextures, false);