Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2782)

Unified Diff: cc/output/renderer_pixeltest.cc

Issue 1643653002: cc: make partially-resident textures use 1 - y, not h - y. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More plausible mask fix; new test Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/test/data/mask_middle.png » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/renderer_pixeltest.cc
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index 1146779097a397971b2349819417f6d7d01d6bb4..083bac1722f5bce8fd5c479aacff1b63daa595ef 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -1733,6 +1733,95 @@ TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad) {
ExactPixelComparator(true)));
}
+// This tests the case where we have a RenderPass with a mask, but the quad
+// for the masked surface does not include the full surface texture.
+TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad2) {
+ gfx::Rect viewport_rect(this->device_viewport_size_);
+
+ RenderPassId root_pass_id(1, 1);
+ scoped_ptr<RenderPass> root_pass =
+ CreateTestRootRenderPass(root_pass_id, viewport_rect);
+ SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
+ gfx::Transform(), viewport_rect, root_pass.get());
+
+ RenderPassId child_pass_id(2, 2);
+ gfx::Transform transform_to_root;
+ scoped_ptr<RenderPass> child_pass =
+ CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
+ SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
+ gfx::Transform(), viewport_rect, child_pass.get());
+
+ // The child render pass is just a green box.
+ static const SkColor kCSSGreen = 0xff008000;
+ SolidColorDrawQuad* green =
+ child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ green->SetNew(child_pass_shared_state, viewport_rect, viewport_rect,
+ kCSSGreen, false);
+
+ // Make a mask.
+ gfx::Rect mask_rect = viewport_rect;
+ SkBitmap bitmap;
+ bitmap.allocPixels(
+ SkImageInfo::MakeN32Premul(mask_rect.width(), mask_rect.height()));
+ SkCanvas canvas(bitmap);
+ SkPaint paint;
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setStrokeWidth(SkIntToScalar(4));
+ paint.setColor(SK_ColorWHITE);
+ canvas.clear(SK_ColorTRANSPARENT);
+ gfx::Rect rect = mask_rect;
+ while (!rect.IsEmpty()) {
+ rect.Inset(6, 6, 4, 4);
+ canvas.drawRect(
+ SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()),
+ paint);
+ rect.Inset(6, 6, 4, 4);
+ }
+
+ ResourceId mask_resource_id = this->resource_provider_->CreateResource(
+ mask_rect.size(), ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888);
+ {
+ SkAutoLockPixels lock(bitmap);
+ this->resource_provider_->CopyToResource(
+ mask_resource_id, reinterpret_cast<uint8_t*>(bitmap.getPixels()),
+ mask_rect.size());
+ }
+
+ // This RenderPassDrawQuad does not include the full |viewport_rect| which is
+ // the size of the child render pass.
+ gfx::Rect sub_rect = gfx::Rect(50, 20, 200, 60);
+ EXPECT_NE(sub_rect.x(), child_pass->output_rect.x());
+ EXPECT_NE(sub_rect.y(), child_pass->output_rect.y());
+ EXPECT_NE(sub_rect.right(), child_pass->output_rect.right());
+ EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom());
+
+ // Set up a mask on the RenderPassDrawQuad.
+ RenderPassDrawQuad* mask_quad =
+ root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
+ mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id,
+ mask_resource_id,
+ gfx::Vector2dF(2.f / mask_rect.width(),
+ 2.f / mask_rect.height()), // mask_uv_scale
+ gfx::Size(mask_rect.size()), // mask_texture_size
+ FilterOperations(), // foreground filters
+ gfx::Vector2dF(), // filters scale
+ FilterOperations()); // background filters
+
+ // White background behind the masked render pass.
+ SolidColorDrawQuad* white =
+ root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect,
+ SK_ColorWHITE, false);
+
+ RenderPassList pass_list;
+ pass_list.push_back(std::move(child_pass));
+ pass_list.push_back(std::move(root_pass));
+
+ EXPECT_TRUE(this->RunPixelTest(
+ &pass_list, base::FilePath(FILE_PATH_LITERAL("mask_middle.png")),
+ ExactPixelComparator(true)));
+}
+
template <typename RendererType>
class RendererPixelTestWithBackgroundFilter
: public RendererPixelTest<RendererType> {
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/test/data/mask_middle.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698