Commit 129b81b0 authored by Daniele Castagna's avatar Daniele Castagna Committed by Commit Bot

viz: Reject HW overlays with nearest filter

Canvas can have an "image-rendering: pixelated" css property.
In those cases, nearest neighbor filter will be used instead of
bilinear.

Since we don't do nearest neighbor filter when scanning out buffers
via HW overlays, this CL simply rejects the HW overlay path in those
cases and always falls back to GPU compositing.


Test: SingleOverlayOnTopTest.RejectNearestNeighbor
Change-Id: I907998f5a23ed2888ff0b3c53b9d7a938164acdc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2510649Reviewed-by: default avatarKhushal <khushalsagar@chromium.org>
Commit-Queue: Daniele Castagna <dcastagna@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823414}
parent e17b327e
...@@ -372,6 +372,8 @@ bool OverlayCandidate::FromTextureQuad( ...@@ -372,6 +372,8 @@ bool OverlayCandidate::FromTextureQuad(
SurfaceDamageRectList* surface_damage_rect_list, SurfaceDamageRectList* surface_damage_rect_list,
const TextureDrawQuad* quad, const TextureDrawQuad* quad,
OverlayCandidate* candidate) { OverlayCandidate* candidate) {
if (quad->nearest_neighbor)
return false;
if (quad->background_color != SK_ColorTRANSPARENT && if (quad->background_color != SK_ColorTRANSPARENT &&
(quad->background_color != SK_ColorBLACK || (quad->background_color != SK_ColorBLACK ||
quad->ShouldDrawWithBlending())) quad->ShouldDrawWithBlending()))
......
...@@ -1114,6 +1114,29 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) { ...@@ -1114,6 +1114,29 @@ TEST_F(SingleOverlayOnTopTest, RejectOpacity) {
EXPECT_EQ(0U, candidate_list.size()); EXPECT_EQ(0U, candidate_list.size());
} }
TEST_F(SingleOverlayOnTopTest, RejectNearestNeighbor) {
auto pass = CreateRenderPass();
CreateFullscreenCandidateQuad(
resource_provider_.get(), child_resource_provider_.get(),
child_provider_.get(), pass->shared_quad_state_list.back(), pass.get());
static_cast<TextureDrawQuad*>(pass->quad_list.back())->nearest_neighbor =
true;
OverlayCandidateList candidate_list;
OverlayProcessorInterface::FilterOperationsMap render_pass_filters;
OverlayProcessorInterface::FilterOperationsMap render_pass_backdrop_filters;
AggregatedRenderPassList pass_list;
pass_list.push_back(std::move(pass));
SurfaceDamageRectList surface_damage_rect_list;
overlay_processor_->ProcessForOverlays(
resource_provider_.get(), &pass_list, GetIdentityColorMatrix(),
render_pass_filters, render_pass_backdrop_filters,
&surface_damage_rect_list, nullptr, &candidate_list, &damage_rect_,
&content_bounds_);
EXPECT_EQ(0U, candidate_list.size());
}
TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) {
auto pass = CreateRenderPass(); auto pass = CreateRenderPass();
CreateFullscreenCandidateQuad( CreateFullscreenCandidateQuad(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment