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);