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

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 2543473004: cc: Move filters from RenderPassDrawQuad to RenderPass (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 21 matching lines...) Expand all
32 namespace cc { 32 namespace cc {
33 namespace { 33 namespace {
34 34
35 #if !defined(OS_ANDROID) 35 #if !defined(OS_ANDROID)
36 std::unique_ptr<RenderPass> CreateTestRootRenderPass(RenderPassId id, 36 std::unique_ptr<RenderPass> CreateTestRootRenderPass(RenderPassId id,
37 const gfx::Rect& rect) { 37 const gfx::Rect& rect) {
38 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 38 std::unique_ptr<RenderPass> pass = RenderPass::Create();
39 const gfx::Rect output_rect = rect; 39 const gfx::Rect output_rect = rect;
40 const gfx::Rect damage_rect = rect; 40 const gfx::Rect damage_rect = rect;
41 const gfx::Transform transform_to_root_target; 41 const gfx::Transform transform_to_root_target;
42 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); 42 const FilterOperations filters;
43 const FilterOperations background_filters;
44 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target, filters,
45 background_filters);
43 return pass; 46 return pass;
44 } 47 }
45 48
46 std::unique_ptr<RenderPass> CreateTestRenderPass( 49 std::unique_ptr<RenderPass> CreateTestRenderPass(
47 RenderPassId id, 50 RenderPassId id,
48 const gfx::Rect& rect, 51 const gfx::Rect& rect,
49 const gfx::Transform& transform_to_root_target) { 52 const gfx::Transform& transform_to_root_target,
53 const FilterOperations& filters,
54 const FilterOperations& background_filters) {
50 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 55 std::unique_ptr<RenderPass> pass = RenderPass::Create();
51 const gfx::Rect output_rect = rect; 56 const gfx::Rect output_rect = rect;
52 const gfx::Rect damage_rect = rect; 57 const gfx::Rect damage_rect = rect;
53 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); 58 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target, filters,
59 background_filters);
54 return pass; 60 return pass;
55 } 61 }
56 62
57 SharedQuadState* CreateTestSharedQuadState( 63 SharedQuadState* CreateTestSharedQuadState(
58 gfx::Transform quad_to_target_transform, 64 gfx::Transform quad_to_target_transform,
59 const gfx::Rect& rect, 65 const gfx::Rect& rect,
60 RenderPass* render_pass) { 66 RenderPass* render_pass) {
61 const gfx::Size layer_bounds = rect.size(); 67 const gfx::Size layer_bounds = rect.size();
62 const gfx::Rect visible_layer_rect = rect; 68 const gfx::Rect visible_layer_rect = rect;
63 const gfx::Rect clip_rect = rect; 69 const gfx::Rect clip_rect = rect;
(...skipping 26 matching lines...) Expand all
90 return shared_state; 96 return shared_state;
91 } 97 }
92 98
93 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state, 99 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state,
94 const gfx::Rect& rect, 100 const gfx::Rect& rect,
95 RenderPassId pass_id, 101 RenderPassId pass_id,
96 RenderPass* render_pass) { 102 RenderPass* render_pass) {
97 RenderPassDrawQuad* quad = 103 RenderPassDrawQuad* quad =
98 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 104 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
99 quad->SetNew(shared_state, rect, rect, pass_id, 105 quad->SetNew(shared_state, rect, rect, pass_id,
100 0, // mask_resource_id 106 0, // mask_resource_id
101 gfx::Vector2dF(), // mask_uv_scale 107 gfx::Vector2dF(), // mask_uv_scale
102 gfx::Size(), // mask_texture_size 108 gfx::Size(), // mask_texture_size
103 FilterOperations(), // foreground filters 109 gfx::Vector2dF(), // filters scale
104 gfx::Vector2dF(), // filters scale 110 gfx::PointF()); // filter origin
105 gfx::PointF(), // filter origin
106 FilterOperations()); // background filters
107 } 111 }
108 112
109 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect, 113 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect,
110 SkColor texel_color, 114 SkColor texel_color,
111 SkColor texel_stripe_color, 115 SkColor texel_stripe_color,
112 SkColor background_color, 116 SkColor background_color,
113 bool premultiplied_alpha, 117 bool premultiplied_alpha,
114 const SharedQuadState* shared_state, 118 const SharedQuadState* shared_state,
115 ResourceProvider* resource_provider, 119 ResourceProvider* resource_provider,
116 RenderPass* render_pass) { 120 RenderPass* render_pass) {
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 base::FilePath(FILE_PATH_LITERAL("green.png")), 697 base::FilePath(FILE_PATH_LITERAL("green.png")),
694 ExactPixelComparator(true))); 698 ExactPixelComparator(true)));
695 } 699 }
696 700
697 TYPED_TEST(RendererPixelTest, SimpleGreenRect_NonRootRenderPass) { 701 TYPED_TEST(RendererPixelTest, SimpleGreenRect_NonRootRenderPass) {
698 gfx::Rect rect(this->device_viewport_size_); 702 gfx::Rect rect(this->device_viewport_size_);
699 gfx::Rect small_rect(100, 100); 703 gfx::Rect small_rect(100, 100);
700 704
701 RenderPassId child_id(2, 1); 705 RenderPassId child_id(2, 1);
702 std::unique_ptr<RenderPass> child_pass = 706 std::unique_ptr<RenderPass> child_pass =
703 CreateTestRenderPass(child_id, small_rect, gfx::Transform()); 707 CreateTestRenderPass(child_id, small_rect, gfx::Transform(),
708 FilterOperations(), FilterOperations());
704 709
705 SharedQuadState* child_shared_state = 710 SharedQuadState* child_shared_state =
706 CreateTestSharedQuadState(gfx::Transform(), small_rect, child_pass.get()); 711 CreateTestSharedQuadState(gfx::Transform(), small_rect, child_pass.get());
707 712
708 SolidColorDrawQuad* color_quad = 713 SolidColorDrawQuad* color_quad =
709 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 714 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
710 color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false); 715 color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false);
711 716
712 RenderPassId root_id(1, 1); 717 RenderPassId root_id(1, 1);
713 std::unique_ptr<RenderPass> root_pass = 718 std::unique_ptr<RenderPass> root_pass = CreateTestRenderPass(
714 CreateTestRenderPass(root_id, rect, gfx::Transform()); 719 root_id, rect, gfx::Transform(), FilterOperations(), FilterOperations());
715 720
716 SharedQuadState* root_shared_state = 721 SharedQuadState* root_shared_state =
717 CreateTestSharedQuadState(gfx::Transform(), rect, root_pass.get()); 722 CreateTestSharedQuadState(gfx::Transform(), rect, root_pass.get());
718 723
719 CreateTestRenderPassDrawQuad( 724 CreateTestRenderPassDrawQuad(
720 root_shared_state, small_rect, child_id, root_pass.get()); 725 root_shared_state, small_rect, child_id, root_pass.get());
721 726
722 RenderPass* child_pass_ptr = child_pass.get(); 727 RenderPass* child_pass_ptr = child_pass.get();
723 728
724 RenderPassList pass_list; 729 RenderPassList pass_list;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 this->AppendBackgroundAndRunTest( 997 this->AppendBackgroundAndRunTest(
993 FuzzyPixelComparator(false, 2.f, 0.f, 256.f, 256, 0.f), 998 FuzzyPixelComparator(false, 2.f, 0.f, 256.f, 256, 0.f),
994 FILE_PATH_LITERAL("intersecting_blue_green_squares.png")); 999 FILE_PATH_LITERAL("intersecting_blue_green_squares.png"));
995 } 1000 }
996 1001
997 TYPED_TEST(IntersectingQuadPixelTest, RenderPassQuads) { 1002 TYPED_TEST(IntersectingQuadPixelTest, RenderPassQuads) {
998 this->SetupQuadStateAndRenderPass(); 1003 this->SetupQuadStateAndRenderPass();
999 RenderPassId child_pass_id1(2, 2); 1004 RenderPassId child_pass_id1(2, 2);
1000 RenderPassId child_pass_id2(2, 3); 1005 RenderPassId child_pass_id2(2, 3);
1001 std::unique_ptr<RenderPass> child_pass1 = 1006 std::unique_ptr<RenderPass> child_pass1 =
1002 CreateTestRenderPass(child_pass_id1, this->quad_rect_, gfx::Transform()); 1007 CreateTestRenderPass(child_pass_id1, this->quad_rect_, gfx::Transform(),
1008 FilterOperations(), FilterOperations());
1003 SharedQuadState* child1_quad_state = CreateTestSharedQuadState( 1009 SharedQuadState* child1_quad_state = CreateTestSharedQuadState(
1004 gfx::Transform(), this->quad_rect_, child_pass1.get()); 1010 gfx::Transform(), this->quad_rect_, child_pass1.get());
1005 std::unique_ptr<RenderPass> child_pass2 = 1011 std::unique_ptr<RenderPass> child_pass2 =
1006 CreateTestRenderPass(child_pass_id2, this->quad_rect_, gfx::Transform()); 1012 CreateTestRenderPass(child_pass_id2, this->quad_rect_, gfx::Transform(),
1013 FilterOperations(), FilterOperations());
1007 SharedQuadState* child2_quad_state = CreateTestSharedQuadState( 1014 SharedQuadState* child2_quad_state = CreateTestSharedQuadState(
1008 gfx::Transform(), this->quad_rect_, child_pass2.get()); 1015 gfx::Transform(), this->quad_rect_, child_pass2.get());
1009 1016
1010 CreateTestTwoColoredTextureDrawQuad( 1017 CreateTestTwoColoredTextureDrawQuad(
1011 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 0, 0)), 1018 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 0, 0)),
1012 GetColor<TypeParam>(SkColorSetARGB(255, 0, 0, 255)), SK_ColorTRANSPARENT, 1019 GetColor<TypeParam>(SkColorSetARGB(255, 0, 0, 255)), SK_ColorTRANSPARENT,
1013 true, child1_quad_state, this->resource_provider_.get(), 1020 true, child1_quad_state, this->resource_provider_.get(),
1014 child_pass1.get()); 1021 child_pass1.get());
1015 CreateTestTwoColoredTextureDrawQuad( 1022 CreateTestTwoColoredTextureDrawQuad(
1016 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 255, 0)), 1023 this->quad_rect_, GetColor<TypeParam>(SkColorSetARGB(255, 0, 255, 0)),
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
1473 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { 1480 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
1474 gfx::Rect viewport_rect(this->device_viewport_size_); 1481 gfx::Rect viewport_rect(this->device_viewport_size_);
1475 1482
1476 RenderPassId root_pass_id(1, 1); 1483 RenderPassId root_pass_id(1, 1);
1477 std::unique_ptr<RenderPass> root_pass = 1484 std::unique_ptr<RenderPass> root_pass =
1478 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1485 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1479 1486
1480 RenderPassId child_pass_id(2, 2); 1487 RenderPassId child_pass_id(2, 2);
1481 gfx::Rect pass_rect(this->device_viewport_size_); 1488 gfx::Rect pass_rect(this->device_viewport_size_);
1482 gfx::Transform transform_to_root; 1489 gfx::Transform transform_to_root;
1483 std::unique_ptr<RenderPass> child_pass = 1490 SkScalar matrix[20];
1484 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1491 float amount = 0.5f;
1492 matrix[0] = 0.213f + 0.787f * amount;
1493 matrix[1] = 0.715f - 0.715f * amount;
1494 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1495 matrix[3] = matrix[4] = 0;
1496 matrix[5] = 0.213f - 0.213f * amount;
1497 matrix[6] = 0.715f + 0.285f * amount;
1498 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1499 matrix[8] = matrix[9] = 0;
1500 matrix[10] = 0.213f - 0.213f * amount;
1501 matrix[11] = 0.715f - 0.715f * amount;
1502 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1503 matrix[13] = matrix[14] = 0;
1504 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1505 matrix[18] = 1;
1506 FilterOperations filters;
1507 filters.Append(
1508 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1509 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1510
1511 std::unique_ptr<RenderPass> child_pass = CreateTestRenderPass(
1512 child_pass_id, pass_rect, transform_to_root, filters, FilterOperations());
1485 1513
1486 gfx::Transform quad_to_target_transform; 1514 gfx::Transform quad_to_target_transform;
1487 SharedQuadState* shared_state = CreateTestSharedQuadState( 1515 SharedQuadState* shared_state = CreateTestSharedQuadState(
1488 quad_to_target_transform, viewport_rect, child_pass.get()); 1516 quad_to_target_transform, viewport_rect, child_pass.get());
1489 shared_state->opacity = 0.5f; 1517 shared_state->opacity = 0.5f;
1490 1518
1491 gfx::Rect blue_rect(0, 1519 gfx::Rect blue_rect(0,
1492 0, 1520 0,
1493 this->device_viewport_size_.width(), 1521 this->device_viewport_size_.width(),
1494 this->device_viewport_size_.height() / 2); 1522 this->device_viewport_size_.height() / 2);
(...skipping 12 matching lines...) Expand all
1507 quad_to_target_transform, viewport_rect, child_pass.get()); 1535 quad_to_target_transform, viewport_rect, child_pass.get());
1508 1536
1509 SolidColorDrawQuad* white = 1537 SolidColorDrawQuad* white =
1510 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1538 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1511 white->SetNew( 1539 white->SetNew(
1512 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1540 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1513 1541
1514 SharedQuadState* pass_shared_state = 1542 SharedQuadState* pass_shared_state =
1515 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1543 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1516 1544
1517 SkScalar matrix[20];
1518 float amount = 0.5f;
1519 matrix[0] = 0.213f + 0.787f * amount;
1520 matrix[1] = 0.715f - 0.715f * amount;
1521 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1522 matrix[3] = matrix[4] = 0;
1523 matrix[5] = 0.213f - 0.213f * amount;
1524 matrix[6] = 0.715f + 0.285f * amount;
1525 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1526 matrix[8] = matrix[9] = 0;
1527 matrix[10] = 0.213f - 0.213f * amount;
1528 matrix[11] = 0.715f - 0.715f * amount;
1529 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1530 matrix[13] = matrix[14] = 0;
1531 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1532 matrix[18] = 1;
1533 FilterOperations filters;
1534 filters.Append(
1535 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1536 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1537
1538 RenderPassDrawQuad* render_pass_quad = 1545 RenderPassDrawQuad* render_pass_quad =
1539 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1546 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1540 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, 1547 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1541 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), 1548 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1542 filters, gfx::Vector2dF(), gfx::PointF(), 1549 gfx::Vector2dF(), gfx::PointF());
1543 FilterOperations());
1544 1550
1545 RenderPassList pass_list; 1551 RenderPassList pass_list;
1546 pass_list.push_back(std::move(child_pass)); 1552 pass_list.push_back(std::move(child_pass));
1547 pass_list.push_back(std::move(root_pass)); 1553 pass_list.push_back(std::move(root_pass));
1548 1554
1549 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 1555 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
1550 // renderer so use a fuzzy comparator. 1556 // renderer so use a fuzzy comparator.
1551 EXPECT_TRUE(this->RunPixelTest( 1557 EXPECT_TRUE(this->RunPixelTest(
1552 &pass_list, 1558 &pass_list,
1553 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 1559 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
1554 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 1560 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
1555 } 1561 }
1556 1562
1557 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) { 1563 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) {
1558 gfx::Rect viewport_rect(this->device_viewport_size_); 1564 gfx::Rect viewport_rect(this->device_viewport_size_);
1559 1565
1560 RenderPassId root_pass_id(1, 1); 1566 RenderPassId root_pass_id(1, 1);
1561 std::unique_ptr<RenderPass> root_pass = 1567 std::unique_ptr<RenderPass> root_pass =
1562 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1568 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1563 1569
1564 RenderPassId child_pass_id(2, 2); 1570 RenderPassId child_pass_id(2, 2);
1565 gfx::Rect pass_rect(this->device_viewport_size_); 1571 gfx::Rect pass_rect(this->device_viewport_size_);
1566 gfx::Transform transform_to_root; 1572 gfx::Transform transform_to_root;
1567 std::unique_ptr<RenderPass> child_pass = 1573 FilterOperations filters;
1568 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1574 filters.Append(FilterOperation::CreateSaturateFilter(0.5f));
1575
1576 std::unique_ptr<RenderPass> child_pass = CreateTestRenderPass(
1577 child_pass_id, pass_rect, transform_to_root, filters, FilterOperations());
1569 1578
1570 gfx::Transform quad_to_target_transform; 1579 gfx::Transform quad_to_target_transform;
1571 SharedQuadState* shared_state = CreateTestSharedQuadState( 1580 SharedQuadState* shared_state = CreateTestSharedQuadState(
1572 quad_to_target_transform, viewport_rect, child_pass.get()); 1581 quad_to_target_transform, viewport_rect, child_pass.get());
1573 shared_state->opacity = 0.5f; 1582 shared_state->opacity = 0.5f;
1574 1583
1575 gfx::Rect blue_rect(0, 1584 gfx::Rect blue_rect(0,
1576 0, 1585 0,
1577 this->device_viewport_size_.width(), 1586 this->device_viewport_size_.width(),
1578 this->device_viewport_size_.height() / 2); 1587 this->device_viewport_size_.height() / 2);
(...skipping 12 matching lines...) Expand all
1591 quad_to_target_transform, viewport_rect, child_pass.get()); 1600 quad_to_target_transform, viewport_rect, child_pass.get());
1592 1601
1593 SolidColorDrawQuad* white = 1602 SolidColorDrawQuad* white =
1594 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1603 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1595 white->SetNew( 1604 white->SetNew(
1596 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1605 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1597 1606
1598 SharedQuadState* pass_shared_state = 1607 SharedQuadState* pass_shared_state =
1599 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1608 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1600 1609
1601 FilterOperations filters;
1602 filters.Append(FilterOperation::CreateSaturateFilter(0.5f));
1603
1604 RenderPassDrawQuad* render_pass_quad = 1610 RenderPassDrawQuad* render_pass_quad =
1605 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1611 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1606 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, 1612 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1607 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), 1613 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1608 filters, gfx::Vector2dF(), gfx::PointF(), 1614 gfx::Vector2dF(), gfx::PointF());
1609 FilterOperations());
1610 1615
1611 RenderPassList pass_list; 1616 RenderPassList pass_list;
1612 pass_list.push_back(std::move(child_pass)); 1617 pass_list.push_back(std::move(child_pass));
1613 pass_list.push_back(std::move(root_pass)); 1618 pass_list.push_back(std::move(root_pass));
1614 1619
1615 // This test blends slightly differently with the software renderer vs. the gl 1620 // This test blends slightly differently with the software renderer vs. the gl
1616 // renderer so use a fuzzy comparator. 1621 // renderer so use a fuzzy comparator.
1617 EXPECT_TRUE(this->RunPixelTest( 1622 EXPECT_TRUE(this->RunPixelTest(
1618 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 1623 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
1619 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 1624 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
1620 } 1625 }
1621 1626
1622 TYPED_TEST(RendererPixelTest, FastPassFilterChain) { 1627 TYPED_TEST(RendererPixelTest, FastPassFilterChain) {
1623 gfx::Rect viewport_rect(this->device_viewport_size_); 1628 gfx::Rect viewport_rect(this->device_viewport_size_);
1624 1629
1625 RenderPassId root_pass_id(1, 1); 1630 RenderPassId root_pass_id(1, 1);
1626 std::unique_ptr<RenderPass> root_pass = 1631 std::unique_ptr<RenderPass> root_pass =
1627 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1632 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1628 1633
1629 RenderPassId child_pass_id(2, 2); 1634 RenderPassId child_pass_id(2, 2);
1630 gfx::Rect pass_rect(this->device_viewport_size_); 1635 gfx::Rect pass_rect(this->device_viewport_size_);
1631 gfx::Transform transform_to_root; 1636 gfx::Transform transform_to_root;
1632 std::unique_ptr<RenderPass> child_pass = 1637 FilterOperations filters;
1633 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1638 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f));
1639 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
1640
1641 std::unique_ptr<RenderPass> child_pass = CreateTestRenderPass(
1642 child_pass_id, pass_rect, transform_to_root, filters, FilterOperations());
1634 1643
1635 gfx::Transform quad_to_target_transform; 1644 gfx::Transform quad_to_target_transform;
1636 SharedQuadState* shared_state = CreateTestSharedQuadState( 1645 SharedQuadState* shared_state = CreateTestSharedQuadState(
1637 quad_to_target_transform, viewport_rect, child_pass.get()); 1646 quad_to_target_transform, viewport_rect, child_pass.get());
1638 shared_state->opacity = 0.5f; 1647 shared_state->opacity = 0.5f;
1639 1648
1640 gfx::Rect blue_rect(0, 1649 gfx::Rect blue_rect(0,
1641 0, 1650 0,
1642 this->device_viewport_size_.width(), 1651 this->device_viewport_size_.width(),
1643 this->device_viewport_size_.height() / 2); 1652 this->device_viewport_size_.height() / 2);
(...skipping 12 matching lines...) Expand all
1656 quad_to_target_transform, viewport_rect, child_pass.get()); 1665 quad_to_target_transform, viewport_rect, child_pass.get());
1657 1666
1658 SolidColorDrawQuad* white = 1667 SolidColorDrawQuad* white =
1659 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1668 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1660 white->SetNew( 1669 white->SetNew(
1661 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1670 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1662 1671
1663 SharedQuadState* pass_shared_state = 1672 SharedQuadState* pass_shared_state =
1664 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1673 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1665 1674
1666 FilterOperations filters;
1667 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f));
1668 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
1669
1670 RenderPassDrawQuad* render_pass_quad = 1675 RenderPassDrawQuad* render_pass_quad =
1671 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1676 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1672 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, 1677 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1673 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), 1678 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1674 filters, gfx::Vector2dF(), gfx::PointF(), 1679 gfx::Vector2dF(), gfx::PointF());
1675 FilterOperations());
1676 1680
1677 RenderPassList pass_list; 1681 RenderPassList pass_list;
1678 pass_list.push_back(std::move(child_pass)); 1682 pass_list.push_back(std::move(child_pass));
1679 pass_list.push_back(std::move(root_pass)); 1683 pass_list.push_back(std::move(root_pass));
1680 1684
1681 // This test blends slightly differently with the software renderer vs. the gl 1685 // This test blends slightly differently with the software renderer vs. the gl
1682 // renderer so use a fuzzy comparator. 1686 // renderer so use a fuzzy comparator.
1683 EXPECT_TRUE(this->RunPixelTest( 1687 EXPECT_TRUE(this->RunPixelTest(
1684 &pass_list, 1688 &pass_list,
1685 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")), 1689 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")),
1686 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 1690 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
1687 } 1691 }
1688 1692
1689 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { 1693 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) {
1690 gfx::Rect viewport_rect(this->device_viewport_size_); 1694 gfx::Rect viewport_rect(this->device_viewport_size_);
1691 1695
1692 RenderPassId root_pass_id(1, 1); 1696 RenderPassId root_pass_id(1, 1);
1693 std::unique_ptr<RenderPass> root_pass = 1697 std::unique_ptr<RenderPass> root_pass =
1694 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1698 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1695 1699
1696 RenderPassId child_pass_id(2, 2); 1700 RenderPassId child_pass_id(2, 2);
1697 gfx::Rect pass_rect(this->device_viewport_size_); 1701 gfx::Rect pass_rect(this->device_viewport_size_);
1698 gfx::Transform transform_to_root; 1702 gfx::Transform transform_to_root;
1699 std::unique_ptr<RenderPass> child_pass = 1703 SkScalar matrix[20];
1700 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1704 float amount = 0.5f;
1705 matrix[0] = 0.213f + 0.787f * amount;
1706 matrix[1] = 0.715f - 0.715f * amount;
1707 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1708 matrix[3] = 0;
1709 matrix[4] = 20.f;
1710 matrix[5] = 0.213f - 0.213f * amount;
1711 matrix[6] = 0.715f + 0.285f * amount;
1712 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1713 matrix[8] = 0;
1714 matrix[9] = 200.f;
1715 matrix[10] = 0.213f - 0.213f * amount;
1716 matrix[11] = 0.715f - 0.715f * amount;
1717 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1718 matrix[13] = 0;
1719 matrix[14] = 1.5f;
1720 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1721 matrix[18] = 1;
1722 FilterOperations filters;
1723 filters.Append(
1724 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1725 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1726
1727 std::unique_ptr<RenderPass> child_pass = CreateTestRenderPass(
1728 child_pass_id, pass_rect, transform_to_root, filters, FilterOperations());
1701 1729
1702 gfx::Transform quad_to_target_transform; 1730 gfx::Transform quad_to_target_transform;
1703 SharedQuadState* shared_state = CreateTestSharedQuadState( 1731 SharedQuadState* shared_state = CreateTestSharedQuadState(
1704 quad_to_target_transform, viewport_rect, child_pass.get()); 1732 quad_to_target_transform, viewport_rect, child_pass.get());
1705 shared_state->opacity = 0.5f; 1733 shared_state->opacity = 0.5f;
1706 1734
1707 gfx::Rect blue_rect(0, 1735 gfx::Rect blue_rect(0,
1708 0, 1736 0,
1709 this->device_viewport_size_.width(), 1737 this->device_viewport_size_.width(),
1710 this->device_viewport_size_.height() / 2); 1738 this->device_viewport_size_.height() / 2);
(...skipping 12 matching lines...) Expand all
1723 quad_to_target_transform, viewport_rect, child_pass.get()); 1751 quad_to_target_transform, viewport_rect, child_pass.get());
1724 1752
1725 SolidColorDrawQuad* white = 1753 SolidColorDrawQuad* white =
1726 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1754 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1727 white->SetNew( 1755 white->SetNew(
1728 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1756 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1729 1757
1730 SharedQuadState* pass_shared_state = 1758 SharedQuadState* pass_shared_state =
1731 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1759 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1732 1760
1733 SkScalar matrix[20];
1734 float amount = 0.5f;
1735 matrix[0] = 0.213f + 0.787f * amount;
1736 matrix[1] = 0.715f - 0.715f * amount;
1737 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1738 matrix[3] = 0;
1739 matrix[4] = 20.f;
1740 matrix[5] = 0.213f - 0.213f * amount;
1741 matrix[6] = 0.715f + 0.285f * amount;
1742 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1743 matrix[8] = 0;
1744 matrix[9] = 200.f;
1745 matrix[10] = 0.213f - 0.213f * amount;
1746 matrix[11] = 0.715f - 0.715f * amount;
1747 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1748 matrix[13] = 0;
1749 matrix[14] = 1.5f;
1750 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1751 matrix[18] = 1;
1752 FilterOperations filters;
1753 filters.Append(
1754 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1755 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1756
1757 RenderPassDrawQuad* render_pass_quad = 1761 RenderPassDrawQuad* render_pass_quad =
1758 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1762 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1759 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, 1763 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1760 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), 1764 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1761 filters, gfx::Vector2dF(), gfx::PointF(), 1765 gfx::Vector2dF(), gfx::PointF());
1762 FilterOperations());
1763 1766
1764 RenderPassList pass_list; 1767 RenderPassList pass_list;
1765 1768
1766 pass_list.push_back(std::move(child_pass)); 1769 pass_list.push_back(std::move(child_pass));
1767 pass_list.push_back(std::move(root_pass)); 1770 pass_list.push_back(std::move(root_pass));
1768 1771
1769 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 1772 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
1770 // renderer so use a fuzzy comparator. 1773 // renderer so use a fuzzy comparator.
1771 EXPECT_TRUE(this->RunPixelTest( 1774 EXPECT_TRUE(this->RunPixelTest(
1772 &pass_list, 1775 &pass_list,
1773 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), 1776 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")),
1774 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 1777 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
1775 } 1778 }
1776 1779
1777 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTexture) { 1780 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTexture) {
1778 gfx::Rect viewport_rect(this->device_viewport_size_); 1781 gfx::Rect viewport_rect(this->device_viewport_size_);
1779 1782
1780 RenderPassId root_pass_id(1, 1); 1783 RenderPassId root_pass_id(1, 1);
1781 std::unique_ptr<RenderPass> root_pass = 1784 std::unique_ptr<RenderPass> root_pass =
1782 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1785 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1783 1786
1784 RenderPassId child_pass_id(2, 2); 1787 RenderPassId child_pass_id(2, 2);
1785 gfx::Rect pass_rect(this->device_viewport_size_); 1788 gfx::Rect pass_rect(this->device_viewport_size_);
1786 gfx::Transform transform_to_root; 1789 gfx::Transform transform_to_root;
1787 std::unique_ptr<RenderPass> child_pass = 1790 std::unique_ptr<RenderPass> child_pass =
1788 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1791 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
1792 FilterOperations(), FilterOperations());
1789 1793
1790 gfx::Transform quad_to_target_transform; 1794 gfx::Transform quad_to_target_transform;
1791 SharedQuadState* shared_state = CreateTestSharedQuadState( 1795 SharedQuadState* shared_state = CreateTestSharedQuadState(
1792 quad_to_target_transform, viewport_rect, child_pass.get()); 1796 quad_to_target_transform, viewport_rect, child_pass.get());
1793 1797
1794 gfx::Rect blue_rect(0, 1798 gfx::Rect blue_rect(0,
1795 0, 1799 0,
1796 this->device_viewport_size_.width(), 1800 this->device_viewport_size_.width(),
1797 this->device_viewport_size_.height() / 2); 1801 this->device_viewport_size_.height() / 2);
1798 SolidColorDrawQuad* blue = 1802 SolidColorDrawQuad* blue =
(...skipping 28 matching lines...) Expand all
1827 gfx::Rect viewport_rect(this->device_viewport_size_); 1831 gfx::Rect viewport_rect(this->device_viewport_size_);
1828 1832
1829 RenderPassId root_pass_id(1, 1); 1833 RenderPassId root_pass_id(1, 1);
1830 std::unique_ptr<RenderPass> root_pass = 1834 std::unique_ptr<RenderPass> root_pass =
1831 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1835 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1832 1836
1833 RenderPassId child_pass_id(2, 2); 1837 RenderPassId child_pass_id(2, 2);
1834 gfx::Rect pass_rect(this->device_viewport_size_); 1838 gfx::Rect pass_rect(this->device_viewport_size_);
1835 gfx::Transform transform_to_root; 1839 gfx::Transform transform_to_root;
1836 std::unique_ptr<RenderPass> child_pass = 1840 std::unique_ptr<RenderPass> child_pass =
1837 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1841 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
1842 FilterOperations(), FilterOperations());
1838 1843
1839 gfx::Transform quad_to_target_transform; 1844 gfx::Transform quad_to_target_transform;
1840 SharedQuadState* shared_state = CreateTestSharedQuadState( 1845 SharedQuadState* shared_state = CreateTestSharedQuadState(
1841 quad_to_target_transform, viewport_rect, child_pass.get()); 1846 quad_to_target_transform, viewport_rect, child_pass.get());
1842 1847
1843 gfx::Rect blue_rect(0, 1848 gfx::Rect blue_rect(0,
1844 0, 1849 0,
1845 this->device_viewport_size_.width(), 1850 this->device_viewport_size_.width(),
1846 this->device_viewport_size_.height() / 2); 1851 this->device_viewport_size_.height() / 2);
1847 SolidColorDrawQuad* blue = 1852 SolidColorDrawQuad* blue =
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1892 1897
1893 RenderPassId root_pass_id(1, 1); 1898 RenderPassId root_pass_id(1, 1);
1894 std::unique_ptr<RenderPass> root_pass = 1899 std::unique_ptr<RenderPass> root_pass =
1895 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1900 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1896 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState( 1901 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
1897 gfx::Transform(), viewport_rect, root_pass.get()); 1902 gfx::Transform(), viewport_rect, root_pass.get());
1898 1903
1899 RenderPassId child_pass_id(2, 2); 1904 RenderPassId child_pass_id(2, 2);
1900 gfx::Transform transform_to_root; 1905 gfx::Transform transform_to_root;
1901 std::unique_ptr<RenderPass> child_pass = 1906 std::unique_ptr<RenderPass> child_pass =
1902 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root); 1907 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root,
1908 FilterOperations(), FilterOperations());
1903 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState( 1909 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
1904 gfx::Transform(), viewport_rect, child_pass.get()); 1910 gfx::Transform(), viewport_rect, child_pass.get());
1905 1911
1906 // The child render pass is just a green box. 1912 // The child render pass is just a green box.
1907 static const SkColor kCSSGreen = 0xff008000; 1913 static const SkColor kCSSGreen = 0xff008000;
1908 SolidColorDrawQuad* green = 1914 SolidColorDrawQuad* green =
1909 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1915 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1910 green->SetNew( 1916 green->SetNew(
1911 child_pass_shared_state, viewport_rect, viewport_rect, kCSSGreen, false); 1917 child_pass_shared_state, viewport_rect, viewport_rect, kCSSGreen, false);
1912 1918
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1949 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); 1955 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom());
1950 1956
1951 // Set up a mask on the RenderPassDrawQuad. 1957 // Set up a mask on the RenderPassDrawQuad.
1952 RenderPassDrawQuad* mask_quad = 1958 RenderPassDrawQuad* mask_quad =
1953 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1959 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1954 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, 1960 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id,
1955 mask_resource_id, 1961 mask_resource_id,
1956 gfx::Vector2dF(2.f / mask_rect.width(), 1962 gfx::Vector2dF(2.f / mask_rect.width(),
1957 2.f / mask_rect.height()), // mask_uv_scale 1963 2.f / mask_rect.height()), // mask_uv_scale
1958 gfx::Size(mask_rect.size()), // mask_texture_size 1964 gfx::Size(mask_rect.size()), // mask_texture_size
1959 FilterOperations(), // foreground filters
1960 gfx::Vector2dF(), // filters scale 1965 gfx::Vector2dF(), // filters scale
1961 gfx::PointF(), // filter origin 1966 gfx::PointF()); // filter origin
1962 FilterOperations()); // background filters
1963 1967
1964 // White background behind the masked render pass. 1968 // White background behind the masked render pass.
1965 SolidColorDrawQuad* white = 1969 SolidColorDrawQuad* white =
1966 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1970 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1967 white->SetNew(root_pass_shared_state, 1971 white->SetNew(root_pass_shared_state,
1968 viewport_rect, 1972 viewport_rect,
1969 viewport_rect, 1973 viewport_rect,
1970 SK_ColorWHITE, 1974 SK_ColorWHITE,
1971 false); 1975 false);
1972 1976
(...skipping 14 matching lines...) Expand all
1987 1991
1988 RenderPassId root_pass_id(1, 1); 1992 RenderPassId root_pass_id(1, 1);
1989 std::unique_ptr<RenderPass> root_pass = 1993 std::unique_ptr<RenderPass> root_pass =
1990 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1994 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1991 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState( 1995 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
1992 gfx::Transform(), viewport_rect, root_pass.get()); 1996 gfx::Transform(), viewport_rect, root_pass.get());
1993 1997
1994 RenderPassId child_pass_id(2, 2); 1998 RenderPassId child_pass_id(2, 2);
1995 gfx::Transform transform_to_root; 1999 gfx::Transform transform_to_root;
1996 std::unique_ptr<RenderPass> child_pass = 2000 std::unique_ptr<RenderPass> child_pass =
1997 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root); 2001 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root,
2002 FilterOperations(), FilterOperations());
1998 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState( 2003 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
1999 gfx::Transform(), viewport_rect, child_pass.get()); 2004 gfx::Transform(), viewport_rect, child_pass.get());
2000 2005
2001 // The child render pass is just a green box. 2006 // The child render pass is just a green box.
2002 static const SkColor kCSSGreen = 0xff008000; 2007 static const SkColor kCSSGreen = 0xff008000;
2003 SolidColorDrawQuad* green = 2008 SolidColorDrawQuad* green =
2004 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2009 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2005 green->SetNew(child_pass_shared_state, viewport_rect, viewport_rect, 2010 green->SetNew(child_pass_shared_state, viewport_rect, viewport_rect,
2006 kCSSGreen, false); 2011 kCSSGreen, false);
2007 2012
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2044 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); 2049 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom());
2045 2050
2046 // Set up a mask on the RenderPassDrawQuad. 2051 // Set up a mask on the RenderPassDrawQuad.
2047 RenderPassDrawQuad* mask_quad = 2052 RenderPassDrawQuad* mask_quad =
2048 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 2053 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
2049 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, 2054 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id,
2050 mask_resource_id, 2055 mask_resource_id,
2051 gfx::Vector2dF(2.f / mask_rect.width(), 2056 gfx::Vector2dF(2.f / mask_rect.width(),
2052 2.f / mask_rect.height()), // mask_uv_scale 2057 2.f / mask_rect.height()), // mask_uv_scale
2053 gfx::Size(mask_rect.size()), // mask_texture_size 2058 gfx::Size(mask_rect.size()), // mask_texture_size
2054 FilterOperations(), // foreground filters
2055 gfx::Vector2dF(), // filters scale 2059 gfx::Vector2dF(), // filters scale
2056 gfx::PointF(), // filter origin 2060 gfx::PointF()); // filter origin
2057 FilterOperations()); // background filters
2058 2061
2059 // White background behind the masked render pass. 2062 // White background behind the masked render pass.
2060 SolidColorDrawQuad* white = 2063 SolidColorDrawQuad* white =
2061 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2064 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2062 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect, 2065 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect,
2063 SK_ColorWHITE, false); 2066 SK_ColorWHITE, false);
2064 2067
2065 RenderPassList pass_list; 2068 RenderPassList pass_list;
2066 pass_list.push_back(std::move(child_pass)); 2069 pass_list.push_back(std::move(child_pass));
2067 pass_list.push_back(std::move(root_pass)); 2070 pass_list.push_back(std::move(root_pass));
(...skipping 13 matching lines...) Expand all
2081 RenderPassId root_id(1, 1); 2084 RenderPassId root_id(1, 1);
2082 std::unique_ptr<RenderPass> root_pass = 2085 std::unique_ptr<RenderPass> root_pass =
2083 CreateTestRootRenderPass(root_id, device_viewport_rect); 2086 CreateTestRootRenderPass(root_id, device_viewport_rect);
2084 root_pass->has_transparent_background = false; 2087 root_pass->has_transparent_background = false;
2085 2088
2086 gfx::Transform identity_quad_to_target_transform; 2089 gfx::Transform identity_quad_to_target_transform;
2087 2090
2088 RenderPassId filter_pass_id(2, 1); 2091 RenderPassId filter_pass_id(2, 1);
2089 gfx::Transform transform_to_root; 2092 gfx::Transform transform_to_root;
2090 std::unique_ptr<RenderPass> filter_pass = CreateTestRenderPass( 2093 std::unique_ptr<RenderPass> filter_pass = CreateTestRenderPass(
2091 filter_pass_id, filter_pass_layer_rect_, transform_to_root); 2094 filter_pass_id, filter_pass_layer_rect_, transform_to_root,
2095 FilterOperations(), this->background_filters_);
2092 2096
2093 // A non-visible quad in the filtering render pass. 2097 // A non-visible quad in the filtering render pass.
2094 { 2098 {
2095 SharedQuadState* shared_state = 2099 SharedQuadState* shared_state =
2096 CreateTestSharedQuadState(identity_quad_to_target_transform, 2100 CreateTestSharedQuadState(identity_quad_to_target_transform,
2097 filter_pass_layer_rect_, filter_pass.get()); 2101 filter_pass_layer_rect_, filter_pass.get());
2098 SolidColorDrawQuad* color_quad = 2102 SolidColorDrawQuad* color_quad =
2099 filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2103 filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2100 color_quad->SetNew(shared_state, filter_pass_layer_rect_, 2104 color_quad->SetNew(shared_state, filter_pass_layer_rect_,
2101 filter_pass_layer_rect_, SK_ColorTRANSPARENT, false); 2105 filter_pass_layer_rect_, SK_ColorTRANSPARENT, false);
2102 } 2106 }
2103 2107
2104 { 2108 {
2105 SharedQuadState* shared_state = 2109 SharedQuadState* shared_state =
2106 CreateTestSharedQuadState(filter_pass_to_target_transform_, 2110 CreateTestSharedQuadState(filter_pass_to_target_transform_,
2107 filter_pass_layer_rect_, filter_pass.get()); 2111 filter_pass_layer_rect_, filter_pass.get());
2108 RenderPassDrawQuad* filter_pass_quad = 2112 RenderPassDrawQuad* filter_pass_quad =
2109 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 2113 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
2110 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_, 2114 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_,
2111 filter_pass_layer_rect_, filter_pass_id, 2115 filter_pass_layer_rect_, filter_pass_id,
2112 0, // mask_resource_id 2116 0, // mask_resource_id
2113 gfx::Vector2dF(), // mask_uv_scale 2117 gfx::Vector2dF(), // mask_uv_scale
2114 gfx::Size(), // mask_texture_size 2118 gfx::Size(), // mask_texture_size
2115 FilterOperations(), // filters
2116 gfx::Vector2dF(1.0f, 1.0f), // filters_scale 2119 gfx::Vector2dF(1.0f, 1.0f), // filters_scale
2117 gfx::PointF(), // filters_origin 2120 gfx::PointF()); // filters_origin
2118 this->background_filters_);
2119 } 2121 }
2120 2122
2121 const int kColumnWidth = device_viewport_rect.width() / 3; 2123 const int kColumnWidth = device_viewport_rect.width() / 3;
2122 2124
2123 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); 2125 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20);
2124 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { 2126 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) {
2125 SharedQuadState* shared_state = CreateTestSharedQuadState( 2127 SharedQuadState* shared_state = CreateTestSharedQuadState(
2126 identity_quad_to_target_transform, left_rect, root_pass.get()); 2128 identity_quad_to_target_transform, left_rect, root_pass.get());
2127 SolidColorDrawQuad* color_quad = 2129 SolidColorDrawQuad* color_quad =
2128 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2130 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2287 2289
2288 RenderPassId root_pass_id(1, 1); 2290 RenderPassId root_pass_id(1, 1);
2289 std::unique_ptr<RenderPass> root_pass = 2291 std::unique_ptr<RenderPass> root_pass =
2290 CreateTestRootRenderPass(root_pass_id, viewport_rect); 2292 CreateTestRootRenderPass(root_pass_id, viewport_rect);
2291 root_pass->has_transparent_background = false; 2293 root_pass->has_transparent_background = false;
2292 2294
2293 RenderPassId child_pass_id(2, 2); 2295 RenderPassId child_pass_id(2, 2);
2294 gfx::Rect pass_rect(this->device_viewport_size_); 2296 gfx::Rect pass_rect(this->device_viewport_size_);
2295 gfx::Transform transform_to_root; 2297 gfx::Transform transform_to_root;
2296 std::unique_ptr<RenderPass> child_pass = 2298 std::unique_ptr<RenderPass> child_pass =
2297 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 2299 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
2300 FilterOperations(), FilterOperations());
2298 2301
2299 gfx::Transform quad_to_target_transform; 2302 gfx::Transform quad_to_target_transform;
2300 SharedQuadState* shared_state = CreateTestSharedQuadState( 2303 SharedQuadState* shared_state = CreateTestSharedQuadState(
2301 quad_to_target_transform, viewport_rect, child_pass.get()); 2304 quad_to_target_transform, viewport_rect, child_pass.get());
2302 2305
2303 gfx::Rect blue_rect(0, 2306 gfx::Rect blue_rect(0,
2304 0, 2307 0,
2305 this->device_viewport_size_.width(), 2308 this->device_viewport_size_.width(),
2306 this->device_viewport_size_.height()); 2309 this->device_viewport_size_.height());
2307 SolidColorDrawQuad* blue = 2310 SolidColorDrawQuad* blue =
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2363 FuzzyPixelOffByOneComparator(true))); 2366 FuzzyPixelOffByOneComparator(true)));
2364 } 2367 }
2365 2368
2366 // This test tests that anti-aliasing works for axis aligned quads. 2369 // This test tests that anti-aliasing works for axis aligned quads.
2367 // Anti-aliasing is only supported in the gl renderer. 2370 // Anti-aliasing is only supported in the gl renderer.
2368 TEST_F(GLRendererPixelTest, AxisAligned) { 2371 TEST_F(GLRendererPixelTest, AxisAligned) {
2369 gfx::Rect rect(this->device_viewport_size_); 2372 gfx::Rect rect(this->device_viewport_size_);
2370 2373
2371 RenderPassId id(1, 1); 2374 RenderPassId id(1, 1);
2372 gfx::Transform transform_to_root; 2375 gfx::Transform transform_to_root;
2373 std::unique_ptr<RenderPass> pass = 2376 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2374 CreateTestRenderPass(id, rect, transform_to_root); 2377 id, rect, transform_to_root, FilterOperations(), FilterOperations());
2375 2378
2376 gfx::Transform red_quad_to_target_transform; 2379 gfx::Transform red_quad_to_target_transform;
2377 red_quad_to_target_transform.Translate(50, 50); 2380 red_quad_to_target_transform.Translate(50, 50);
2378 red_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f), 2381 red_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
2379 0.5f + 1.0f / (rect.height() * 2.0f)); 2382 0.5f + 1.0f / (rect.height() * 2.0f));
2380 SharedQuadState* red_shared_state = 2383 SharedQuadState* red_shared_state =
2381 CreateTestSharedQuadState(red_quad_to_target_transform, rect, pass.get()); 2384 CreateTestSharedQuadState(red_quad_to_target_transform, rect, pass.get());
2382 2385
2383 SolidColorDrawQuad* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2386 SolidColorDrawQuad* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2384 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false); 2387 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false);
(...skipping 25 matching lines...) Expand all
2410 ExactPixelComparator(true))); 2413 ExactPixelComparator(true)));
2411 } 2414 }
2412 2415
2413 // This test tests that forcing anti-aliasing off works as expected. 2416 // This test tests that forcing anti-aliasing off works as expected.
2414 // Anti-aliasing is only supported in the gl renderer. 2417 // Anti-aliasing is only supported in the gl renderer.
2415 TEST_F(GLRendererPixelTest, ForceAntiAliasingOff) { 2418 TEST_F(GLRendererPixelTest, ForceAntiAliasingOff) {
2416 gfx::Rect rect(this->device_viewport_size_); 2419 gfx::Rect rect(this->device_viewport_size_);
2417 2420
2418 RenderPassId id(1, 1); 2421 RenderPassId id(1, 1);
2419 gfx::Transform transform_to_root; 2422 gfx::Transform transform_to_root;
2420 std::unique_ptr<RenderPass> pass = 2423 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2421 CreateTestRenderPass(id, rect, transform_to_root); 2424 id, rect, transform_to_root, FilterOperations(), FilterOperations());
2422 2425
2423 gfx::Transform hole_quad_to_target_transform; 2426 gfx::Transform hole_quad_to_target_transform;
2424 hole_quad_to_target_transform.Translate(50, 50); 2427 hole_quad_to_target_transform.Translate(50, 50);
2425 hole_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f), 2428 hole_quad_to_target_transform.Scale(0.5f + 1.0f / (rect.width() * 2.0f),
2426 0.5f + 1.0f / (rect.height() * 2.0f)); 2429 0.5f + 1.0f / (rect.height() * 2.0f));
2427 SharedQuadState* hole_shared_state = CreateTestSharedQuadState( 2430 SharedQuadState* hole_shared_state = CreateTestSharedQuadState(
2428 hole_quad_to_target_transform, rect, pass.get()); 2431 hole_quad_to_target_transform, rect, pass.get());
2429 2432
2430 SolidColorDrawQuad* hole = 2433 SolidColorDrawQuad* hole =
2431 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 2434 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2488 } 2491 }
2489 2492
2490 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) { 2493 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) {
2491 gfx::Rect viewport(this->device_viewport_size_); 2494 gfx::Rect viewport(this->device_viewport_size_);
2492 // TODO(enne): the renderer should figure this out on its own. 2495 // TODO(enne): the renderer should figure this out on its own.
2493 ResourceFormat texture_format = RGBA_8888; 2496 ResourceFormat texture_format = RGBA_8888;
2494 bool nearest_neighbor = false; 2497 bool nearest_neighbor = false;
2495 2498
2496 RenderPassId id(1, 1); 2499 RenderPassId id(1, 1);
2497 gfx::Transform transform_to_root; 2500 gfx::Transform transform_to_root;
2498 std::unique_ptr<RenderPass> pass = 2501 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2499 CreateTestRenderPass(id, viewport, transform_to_root); 2502 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2500 2503
2501 // One clipped blue quad in the lower right corner. Outside the clip 2504 // One clipped blue quad in the lower right corner. Outside the clip
2502 // is red, which should not appear. 2505 // is red, which should not appear.
2503 gfx::Rect blue_rect(gfx::Size(100, 100)); 2506 gfx::Rect blue_rect(gfx::Size(100, 100));
2504 gfx::Rect blue_clip_rect(gfx::Point(50, 50), gfx::Size(50, 50)); 2507 gfx::Rect blue_clip_rect(gfx::Point(50, 50), gfx::Size(50, 50));
2505 2508
2506 std::unique_ptr<FakeRecordingSource> blue_recording = 2509 std::unique_ptr<FakeRecordingSource> blue_recording =
2507 FakeRecordingSource::CreateFilledRecordingSource(blue_rect.size()); 2510 FakeRecordingSource::CreateFilledRecordingSource(blue_rect.size());
2508 SkPaint red_paint; 2511 SkPaint red_paint;
2509 red_paint.setColor(SK_ColorRED); 2512 red_paint.setColor(SK_ColorRED);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2564 } 2567 }
2565 2568
2566 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. 2569 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity.
2567 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) { 2570 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) {
2568 gfx::Rect viewport(this->device_viewport_size_); 2571 gfx::Rect viewport(this->device_viewport_size_);
2569 ResourceFormat texture_format = RGBA_8888; 2572 ResourceFormat texture_format = RGBA_8888;
2570 bool nearest_neighbor = false; 2573 bool nearest_neighbor = false;
2571 2574
2572 RenderPassId id(1, 1); 2575 RenderPassId id(1, 1);
2573 gfx::Transform transform_to_root; 2576 gfx::Transform transform_to_root;
2574 std::unique_ptr<RenderPass> pass = 2577 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2575 CreateTestRenderPass(id, viewport, transform_to_root); 2578 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2576 2579
2577 // One viewport-filling 0.5-opacity green quad. 2580 // One viewport-filling 0.5-opacity green quad.
2578 std::unique_ptr<FakeRecordingSource> green_recording = 2581 std::unique_ptr<FakeRecordingSource> green_recording =
2579 FakeRecordingSource::CreateFilledRecordingSource(viewport.size()); 2582 FakeRecordingSource::CreateFilledRecordingSource(viewport.size());
2580 SkPaint green_paint; 2583 SkPaint green_paint;
2581 green_paint.setColor(SK_ColorGREEN); 2584 green_paint.setColor(SK_ColorGREEN);
2582 green_recording->add_draw_rect_with_paint(viewport, green_paint); 2585 green_recording->add_draw_rect_with_paint(viewport, green_paint);
2583 green_recording->Rerecord(); 2586 green_recording->Rerecord();
2584 scoped_refptr<FakeRasterSource> green_raster_source = 2587 scoped_refptr<FakeRasterSource> green_raster_source =
2585 FakeRasterSource::CreateFromRecordingSource(green_recording.get(), false); 2588 FakeRasterSource::CreateFromRecordingSource(green_recording.get(), false);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
2646 // cheap in hardware. 2649 // cheap in hardware.
2647 if (!IsSoftwareRenderer<TypeParam>()) 2650 if (!IsSoftwareRenderer<TypeParam>())
2648 return; 2651 return;
2649 2652
2650 gfx::Rect viewport(this->device_viewport_size_); 2653 gfx::Rect viewport(this->device_viewport_size_);
2651 ResourceFormat texture_format = RGBA_8888; 2654 ResourceFormat texture_format = RGBA_8888;
2652 bool nearest_neighbor = false; 2655 bool nearest_neighbor = false;
2653 2656
2654 RenderPassId id(1, 1); 2657 RenderPassId id(1, 1);
2655 gfx::Transform transform_to_root; 2658 gfx::Transform transform_to_root;
2656 std::unique_ptr<RenderPass> pass = 2659 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2657 CreateTestRenderPass(id, viewport, transform_to_root); 2660 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2658 2661
2659 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(2, 2); 2662 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(2, 2);
2660 ASSERT_NE(surface, nullptr); 2663 ASSERT_NE(surface, nullptr);
2661 SkCanvas* canvas = surface->getCanvas(); 2664 SkCanvas* canvas = surface->getCanvas();
2662 canvas->drawPoint(0, 0, SK_ColorGREEN); 2665 canvas->drawPoint(0, 0, SK_ColorGREEN);
2663 canvas->drawPoint(0, 1, SK_ColorBLUE); 2666 canvas->drawPoint(0, 1, SK_ColorBLUE);
2664 canvas->drawPoint(1, 0, SK_ColorBLUE); 2667 canvas->drawPoint(1, 0, SK_ColorBLUE);
2665 canvas->drawPoint(1, 1, SK_ColorGREEN); 2668 canvas->drawPoint(1, 1, SK_ColorGREEN);
2666 2669
2667 std::unique_ptr<FakeRecordingSource> recording = 2670 std::unique_ptr<FakeRecordingSource> recording =
(...skipping 27 matching lines...) Expand all
2695 } 2698 }
2696 2699
2697 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. 2700 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad.
2698 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) { 2701 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) {
2699 gfx::Rect viewport(this->device_viewport_size_); 2702 gfx::Rect viewport(this->device_viewport_size_);
2700 ResourceFormat texture_format = RGBA_8888; 2703 ResourceFormat texture_format = RGBA_8888;
2701 bool nearest_neighbor = true; 2704 bool nearest_neighbor = true;
2702 2705
2703 RenderPassId id(1, 1); 2706 RenderPassId id(1, 1);
2704 gfx::Transform transform_to_root; 2707 gfx::Transform transform_to_root;
2705 std::unique_ptr<RenderPass> pass = 2708 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2706 CreateTestRenderPass(id, viewport, transform_to_root); 2709 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2707 2710
2708 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(2, 2); 2711 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(2, 2);
2709 ASSERT_NE(surface, nullptr); 2712 ASSERT_NE(surface, nullptr);
2710 SkCanvas* canvas = surface->getCanvas(); 2713 SkCanvas* canvas = surface->getCanvas();
2711 canvas->drawPoint(0, 0, SK_ColorGREEN); 2714 canvas->drawPoint(0, 0, SK_ColorGREEN);
2712 canvas->drawPoint(0, 1, SK_ColorBLUE); 2715 canvas->drawPoint(0, 1, SK_ColorBLUE);
2713 canvas->drawPoint(1, 0, SK_ColorBLUE); 2716 canvas->drawPoint(1, 0, SK_ColorBLUE);
2714 canvas->drawPoint(1, 1, SK_ColorGREEN); 2717 canvas->drawPoint(1, 1, SK_ColorGREEN);
2715 2718
2716 std::unique_ptr<FakeRecordingSource> recording = 2719 std::unique_ptr<FakeRecordingSource> recording =
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2764 gfx::ColorSpace()); 2767 gfx::ColorSpace());
2765 2768
2766 { 2769 {
2767 SkAutoLockPixels lock(bitmap); 2770 SkAutoLockPixels lock(bitmap);
2768 this->resource_provider_->CopyToResource( 2771 this->resource_provider_->CopyToResource(
2769 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); 2772 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size);
2770 } 2773 }
2771 2774
2772 RenderPassId id(1, 1); 2775 RenderPassId id(1, 1);
2773 gfx::Transform transform_to_root; 2776 gfx::Transform transform_to_root;
2774 std::unique_ptr<RenderPass> pass = 2777 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2775 CreateTestRenderPass(id, viewport, transform_to_root); 2778 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2776 2779
2777 gfx::Transform quad_to_target_transform; 2780 gfx::Transform quad_to_target_transform;
2778 SharedQuadState* shared_state = 2781 SharedQuadState* shared_state =
2779 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get()); 2782 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get());
2780 2783
2781 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); 2784 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>();
2782 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, 2785 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource,
2783 gfx::RectF(gfx::Rect(tile_size)), tile_size, swizzle_contents, 2786 gfx::RectF(gfx::Rect(tile_size)), tile_size, swizzle_contents,
2784 nearest_neighbor); 2787 nearest_neighbor);
2785 2788
(...skipping 29 matching lines...) Expand all
2815 gfx::ColorSpace()); 2818 gfx::ColorSpace());
2816 2819
2817 { 2820 {
2818 SkAutoLockPixels lock(bitmap); 2821 SkAutoLockPixels lock(bitmap);
2819 this->resource_provider_->CopyToResource( 2822 this->resource_provider_->CopyToResource(
2820 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); 2823 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size);
2821 } 2824 }
2822 2825
2823 RenderPassId id(1, 1); 2826 RenderPassId id(1, 1);
2824 gfx::Transform transform_to_root; 2827 gfx::Transform transform_to_root;
2825 std::unique_ptr<RenderPass> pass = 2828 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2826 CreateTestRenderPass(id, viewport, transform_to_root); 2829 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2827 2830
2828 gfx::Transform quad_to_target_transform; 2831 gfx::Transform quad_to_target_transform;
2829 SharedQuadState* shared_state = 2832 SharedQuadState* shared_state =
2830 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get()); 2833 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get());
2831 2834
2832 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2835 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2833 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2836 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2834 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, 2837 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false,
2835 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, 2838 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK,
2836 vertex_opacity, false, nearest_neighbor, false); 2839 vertex_opacity, false, nearest_neighbor, false);
(...skipping 30 matching lines...) Expand all
2867 gfx::ColorSpace()); 2870 gfx::ColorSpace());
2868 2871
2869 { 2872 {
2870 SkAutoLockPixels lock(bitmap); 2873 SkAutoLockPixels lock(bitmap);
2871 this->resource_provider_->CopyToResource( 2874 this->resource_provider_->CopyToResource(
2872 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); 2875 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size);
2873 } 2876 }
2874 2877
2875 RenderPassId id(1, 1); 2878 RenderPassId id(1, 1);
2876 gfx::Transform transform_to_root; 2879 gfx::Transform transform_to_root;
2877 std::unique_ptr<RenderPass> pass = 2880 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2878 CreateTestRenderPass(id, viewport, transform_to_root); 2881 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2879 2882
2880 gfx::Transform quad_to_target_transform; 2883 gfx::Transform quad_to_target_transform;
2881 SharedQuadState* shared_state = 2884 SharedQuadState* shared_state =
2882 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get()); 2885 CreateTestSharedQuadState(quad_to_target_transform, viewport, pass.get());
2883 2886
2884 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2887 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2885 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); 2888 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2886 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, 2889 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false,
2887 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, 2890 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK,
2888 vertex_opacity, false, nearest_neighbor, false); 2891 vertex_opacity, false, nearest_neighbor, false);
(...skipping 10 matching lines...) Expand all
2899 } 2902 }
2900 2903
2901 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { 2904 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) {
2902 gfx::Rect viewport(this->device_viewport_size_); 2905 gfx::Rect viewport(this->device_viewport_size_);
2903 // TODO(enne): the renderer should figure this out on its own. 2906 // TODO(enne): the renderer should figure this out on its own.
2904 ResourceFormat texture_format = RGBA_8888; 2907 ResourceFormat texture_format = RGBA_8888;
2905 bool nearest_neighbor = false; 2908 bool nearest_neighbor = false;
2906 2909
2907 RenderPassId id(1, 1); 2910 RenderPassId id(1, 1);
2908 gfx::Transform transform_to_root; 2911 gfx::Transform transform_to_root;
2909 std::unique_ptr<RenderPass> pass = 2912 std::unique_ptr<RenderPass> pass = CreateTestRenderPass(
2910 CreateTestRenderPass(id, viewport, transform_to_root); 2913 id, viewport, transform_to_root, FilterOperations(), FilterOperations());
2911 2914
2912 // As scaling up the blue checkerboards will cause sampling on the GPU, 2915 // As scaling up the blue checkerboards will cause sampling on the GPU,
2913 // a few extra "cleanup rects" need to be added to clobber the blending 2916 // a few extra "cleanup rects" need to be added to clobber the blending
2914 // to make the output image more clean. This will also test subrects 2917 // to make the output image more clean. This will also test subrects
2915 // of the layer. 2918 // of the layer.
2916 gfx::Transform green_quad_to_target_transform; 2919 gfx::Transform green_quad_to_target_transform;
2917 gfx::Rect green_rect1(gfx::Point(80, 0), gfx::Size(20, 100)); 2920 gfx::Rect green_rect1(gfx::Point(80, 0), gfx::Size(20, 100));
2918 gfx::Rect green_rect2(gfx::Point(0, 80), gfx::Size(100, 20)); 2921 gfx::Rect green_rect2(gfx::Point(0, 80), gfx::Size(100, 20));
2919 2922
2920 std::unique_ptr<FakeRecordingSource> green_recording = 2923 std::unique_ptr<FakeRecordingSource> green_recording =
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
3048 gfx::Rect viewport_rect(this->device_viewport_size_); 3051 gfx::Rect viewport_rect(this->device_viewport_size_);
3049 3052
3050 RenderPassId root_pass_id(1, 1); 3053 RenderPassId root_pass_id(1, 1);
3051 std::unique_ptr<RenderPass> root_pass = 3054 std::unique_ptr<RenderPass> root_pass =
3052 CreateTestRootRenderPass(root_pass_id, viewport_rect); 3055 CreateTestRootRenderPass(root_pass_id, viewport_rect);
3053 3056
3054 RenderPassId child_pass_id(2, 2); 3057 RenderPassId child_pass_id(2, 2);
3055 gfx::Rect pass_rect(this->device_viewport_size_); 3058 gfx::Rect pass_rect(this->device_viewport_size_);
3056 gfx::Transform transform_to_root; 3059 gfx::Transform transform_to_root;
3057 std::unique_ptr<RenderPass> child_pass = 3060 std::unique_ptr<RenderPass> child_pass =
3058 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 3061 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
3062 FilterOperations(), FilterOperations());
3059 3063
3060 gfx::Transform quad_to_target_transform; 3064 gfx::Transform quad_to_target_transform;
3061 SharedQuadState* shared_state = CreateTestSharedQuadState( 3065 SharedQuadState* shared_state = CreateTestSharedQuadState(
3062 quad_to_target_transform, viewport_rect, child_pass.get()); 3066 quad_to_target_transform, viewport_rect, child_pass.get());
3063 3067
3064 gfx::Rect blue_rect(0, 3068 gfx::Rect blue_rect(0,
3065 0, 3069 0,
3066 this->device_viewport_size_.width(), 3070 this->device_viewport_size_.width(),
3067 this->device_viewport_size_.height() / 2); 3071 this->device_viewport_size_.height() / 2);
3068 SolidColorDrawQuad* blue = 3072 SolidColorDrawQuad* blue =
(...skipping 27 matching lines...) Expand all
3096 gfx::Rect viewport_rect(this->device_viewport_size_); 3100 gfx::Rect viewport_rect(this->device_viewport_size_);
3097 3101
3098 RenderPassId root_pass_id(1, 1); 3102 RenderPassId root_pass_id(1, 1);
3099 std::unique_ptr<RenderPass> root_pass = 3103 std::unique_ptr<RenderPass> root_pass =
3100 CreateTestRootRenderPass(root_pass_id, viewport_rect); 3104 CreateTestRootRenderPass(root_pass_id, viewport_rect);
3101 3105
3102 RenderPassId child_pass_id(2, 2); 3106 RenderPassId child_pass_id(2, 2);
3103 gfx::Rect pass_rect(this->device_viewport_size_); 3107 gfx::Rect pass_rect(this->device_viewport_size_);
3104 gfx::Transform transform_to_root; 3108 gfx::Transform transform_to_root;
3105 std::unique_ptr<RenderPass> child_pass = 3109 std::unique_ptr<RenderPass> child_pass =
3106 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 3110 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
3111 FilterOperations(), FilterOperations());
3107 3112
3108 gfx::Transform quad_to_target_transform; 3113 gfx::Transform quad_to_target_transform;
3109 SharedQuadState* shared_state = CreateTestSharedQuadState( 3114 SharedQuadState* shared_state = CreateTestSharedQuadState(
3110 quad_to_target_transform, viewport_rect, child_pass.get()); 3115 quad_to_target_transform, viewport_rect, child_pass.get());
3111 3116
3112 gfx::Rect blue_rect(0, 3117 gfx::Rect blue_rect(0,
3113 0, 3118 0,
3114 this->device_viewport_size_.width(), 3119 this->device_viewport_size_.width(),
3115 this->device_viewport_size_.height() / 2); 3120 this->device_viewport_size_.height() / 2);
3116 SolidColorDrawQuad* blue = 3121 SolidColorDrawQuad* blue =
(...skipping 27 matching lines...) Expand all
3144 gfx::Rect viewport_rect(this->device_viewport_size_); 3149 gfx::Rect viewport_rect(this->device_viewport_size_);
3145 3150
3146 RenderPassId root_pass_id(1, 1); 3151 RenderPassId root_pass_id(1, 1);
3147 std::unique_ptr<RenderPass> root_pass = 3152 std::unique_ptr<RenderPass> root_pass =
3148 CreateTestRootRenderPass(root_pass_id, viewport_rect); 3153 CreateTestRootRenderPass(root_pass_id, viewport_rect);
3149 3154
3150 RenderPassId child_pass_id(2, 2); 3155 RenderPassId child_pass_id(2, 2);
3151 gfx::Rect pass_rect(this->device_viewport_size_); 3156 gfx::Rect pass_rect(this->device_viewport_size_);
3152 gfx::Transform transform_to_root; 3157 gfx::Transform transform_to_root;
3153 std::unique_ptr<RenderPass> child_pass = 3158 std::unique_ptr<RenderPass> child_pass =
3154 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 3159 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root,
3160 FilterOperations(), FilterOperations());
3155 3161
3156 gfx::Transform quad_to_target_transform; 3162 gfx::Transform quad_to_target_transform;
3157 SharedQuadState* shared_state = CreateTestSharedQuadState( 3163 SharedQuadState* shared_state = CreateTestSharedQuadState(
3158 quad_to_target_transform, viewport_rect, child_pass.get()); 3164 quad_to_target_transform, viewport_rect, child_pass.get());
3159 3165
3160 // Draw a green quad full-size with a blue quad in the lower-right corner. 3166 // Draw a green quad full-size with a blue quad in the lower-right corner.
3161 gfx::Rect blue_rect(this->device_viewport_size_.width() * 3 / 4, 3167 gfx::Rect blue_rect(this->device_viewport_size_.width() * 3 / 4,
3162 this->device_viewport_size_.height() * 3 / 4, 3168 this->device_viewport_size_.height() * 3 / 4,
3163 this->device_viewport_size_.width() * 3 / 4, 3169 this->device_viewport_size_.width() * 3 / 4,
3164 this->device_viewport_size_.height() * 3 / 4); 3170 this->device_viewport_size_.height() * 3 / 4);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
3272 3278
3273 EXPECT_TRUE(this->RunPixelTest( 3279 EXPECT_TRUE(this->RunPixelTest(
3274 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")), 3280 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")),
3275 FuzzyPixelOffByOneComparator(true))); 3281 FuzzyPixelOffByOneComparator(true)));
3276 } 3282 }
3277 3283
3278 #endif // !defined(OS_ANDROID) 3284 #endif // !defined(OS_ANDROID)
3279 3285
3280 } // namespace 3286 } // namespace
3281 } // namespace cc 3287 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698