From f23c7bf5004f90af2b373be0d76f3e984ffed6a5 Mon Sep 17 00:00:00 2001
From: Michael Tang <tangm@microsoft.com>
Date: Fri, 14 Feb 2025 13:49:48 -0800
Subject: [PATCH] viz: win: Reject RPDQ overlays with backdrop filters

In delegated compositing on Windows, we currently check for backdrop
filter occlusion using the whole render pass quad list. We can instead
just check if a RPDQ has backdrop filters when promoting it to
overlay.

Change-Id: I9e8313efa1a3c6b5dbc0d4c41fdb946ccf6bc6a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6261411
Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org>
Commit-Queue: Michael Tang <tangm@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#1420727}
---
 .../viz/service/display/overlay_processor_win.cc     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/components/viz/service/display/overlay_processor_win.cc b/components/viz/service/display/overlay_processor_win.cc
index 1c9d4ea2a30ce..400c6e73450b4 100644
--- a/components/viz/service/display/overlay_processor_win.cc
+++ b/components/viz/service/display/overlay_processor_win.cc
@@ -518,12 +518,6 @@ OverlayProcessorWin::TryDelegatedCompositing(
 
   // Try to promote all the quads in the root pass to overlay.
   for (const auto* quad : root_render_pass->quad_list.BackToFront()) {
-    if (OverlayCandidateFactory::IsOccludedByFilteredQuad(
-            *quad, root_render_pass->quad_list.begin(),
-            root_render_pass->quad_list.end(), render_pass_backdrop_filters)) {
-      return base::unexpected(DelegationStatus::kCompositedBackdropFilter);
-    }
-
     std::optional<OverlayCandidate> dc_layer;
     if (is_full_delegated_compositing) {
       // Try to promote videos like DCLayerOverlay does first, then fall back to
@@ -561,6 +555,12 @@ OverlayProcessorWin::TryDelegatedCompositing(
     // |UpdatePromotedRenderPassProperties| to support partially delegated
     // compositing.
     if (dc_layer->rpdq) {
+      if (render_pass_backdrop_filters.contains(
+              dc_layer->rpdq->render_pass_id)) {
+        // We don't delegate composting of backdrop filters to the OS.
+        return base::unexpected(DelegationStatus::kCompositedBackdropFilter);
+      }
+
       auto render_pass_it =
           std::ranges::find(render_passes, dc_layer->rpdq->render_pass_id,
                             &AggregatedRenderPass::id);