0

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}
This commit is contained in:
Michael Tang
2025-02-14 13:49:48 -08:00
committed by Chromium LUCI CQ
parent 4a5bc3f309
commit f23c7bf500

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