OLD | NEW |
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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 return shared_state; | 90 return shared_state; |
91 } | 91 } |
92 | 92 |
93 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state, | 93 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state, |
94 const gfx::Rect& rect, | 94 const gfx::Rect& rect, |
95 int pass_id, | 95 int pass_id, |
96 RenderPass* render_pass) { | 96 RenderPass* render_pass) { |
97 RenderPassDrawQuad* quad = | 97 RenderPassDrawQuad* quad = |
98 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 98 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
99 quad->SetNew(shared_state, rect, rect, pass_id, | 99 quad->SetNew(shared_state, rect, rect, pass_id, |
100 0, // mask_resource_id | 100 0, // mask_resource_id |
101 gfx::Vector2dF(), // mask_uv_scale | 101 gfx::Vector2dF(), // mask_uv_scale |
102 gfx::Size(), // mask_texture_size | 102 gfx::Size(), // mask_texture_size |
103 FilterOperations(), // foreground filters | 103 gfx::Vector2dF(), // filters scale |
104 gfx::Vector2dF(), // filters scale | 104 gfx::PointF()); // filter origin |
105 gfx::PointF(), // filter origin | |
106 FilterOperations()); // background filters | |
107 } | 105 } |
108 | 106 |
109 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect, | 107 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect, |
110 SkColor texel_color, | 108 SkColor texel_color, |
111 SkColor texel_stripe_color, | 109 SkColor texel_stripe_color, |
112 SkColor background_color, | 110 SkColor background_color, |
113 bool premultiplied_alpha, | 111 bool premultiplied_alpha, |
114 const SharedQuadState* shared_state, | 112 const SharedQuadState* shared_state, |
115 ResourceProvider* resource_provider, | 113 ResourceProvider* resource_provider, |
116 RenderPass* render_pass) { | 114 RenderPass* render_pass) { |
(...skipping 1356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { | 1471 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { |
1474 gfx::Rect viewport_rect(this->device_viewport_size_); | 1472 gfx::Rect viewport_rect(this->device_viewport_size_); |
1475 | 1473 |
1476 int root_pass_id = 1; | 1474 int root_pass_id = 1; |
1477 std::unique_ptr<RenderPass> root_pass = | 1475 std::unique_ptr<RenderPass> root_pass = |
1478 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 1476 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
1479 | 1477 |
1480 int child_pass_id = 2; | 1478 int child_pass_id = 2; |
1481 gfx::Rect pass_rect(this->device_viewport_size_); | 1479 gfx::Rect pass_rect(this->device_viewport_size_); |
1482 gfx::Transform transform_to_root; | 1480 gfx::Transform transform_to_root; |
| 1481 SkScalar matrix[20]; |
| 1482 float amount = 0.5f; |
| 1483 matrix[0] = 0.213f + 0.787f * amount; |
| 1484 matrix[1] = 0.715f - 0.715f * amount; |
| 1485 matrix[2] = 1.f - (matrix[0] + matrix[1]); |
| 1486 matrix[3] = matrix[4] = 0; |
| 1487 matrix[5] = 0.213f - 0.213f * amount; |
| 1488 matrix[6] = 0.715f + 0.285f * amount; |
| 1489 matrix[7] = 1.f - (matrix[5] + matrix[6]); |
| 1490 matrix[8] = matrix[9] = 0; |
| 1491 matrix[10] = 0.213f - 0.213f * amount; |
| 1492 matrix[11] = 0.715f - 0.715f * amount; |
| 1493 matrix[12] = 1.f - (matrix[10] + matrix[11]); |
| 1494 matrix[13] = matrix[14] = 0; |
| 1495 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; |
| 1496 matrix[18] = 1; |
| 1497 FilterOperations filters; |
| 1498 filters.Append( |
| 1499 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( |
| 1500 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); |
| 1501 |
1483 std::unique_ptr<RenderPass> child_pass = | 1502 std::unique_ptr<RenderPass> child_pass = |
1484 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 1503 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 1504 child_pass->filters = filters; |
1485 | 1505 |
1486 gfx::Transform quad_to_target_transform; | 1506 gfx::Transform quad_to_target_transform; |
1487 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1507 SharedQuadState* shared_state = CreateTestSharedQuadState( |
1488 quad_to_target_transform, viewport_rect, child_pass.get()); | 1508 quad_to_target_transform, viewport_rect, child_pass.get()); |
1489 shared_state->opacity = 0.5f; | 1509 shared_state->opacity = 0.5f; |
1490 | 1510 |
1491 gfx::Rect blue_rect(0, | 1511 gfx::Rect blue_rect(0, |
1492 0, | 1512 0, |
1493 this->device_viewport_size_.width(), | 1513 this->device_viewport_size_.width(), |
1494 this->device_viewport_size_.height() / 2); | 1514 this->device_viewport_size_.height() / 2); |
(...skipping 12 matching lines...) Expand all Loading... |
1507 quad_to_target_transform, viewport_rect, child_pass.get()); | 1527 quad_to_target_transform, viewport_rect, child_pass.get()); |
1508 | 1528 |
1509 SolidColorDrawQuad* white = | 1529 SolidColorDrawQuad* white = |
1510 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 1530 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
1511 white->SetNew( | 1531 white->SetNew( |
1512 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); | 1532 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); |
1513 | 1533 |
1514 SharedQuadState* pass_shared_state = | 1534 SharedQuadState* pass_shared_state = |
1515 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); | 1535 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); |
1516 | 1536 |
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 = | 1537 RenderPassDrawQuad* render_pass_quad = |
1539 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 1538 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1540 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, | 1539 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, |
1541 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), | 1540 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), |
1542 filters, gfx::Vector2dF(), gfx::PointF(), | 1541 gfx::Vector2dF(), gfx::PointF()); |
1543 FilterOperations()); | |
1544 | 1542 |
1545 RenderPassList pass_list; | 1543 RenderPassList pass_list; |
1546 pass_list.push_back(std::move(child_pass)); | 1544 pass_list.push_back(std::move(child_pass)); |
1547 pass_list.push_back(std::move(root_pass)); | 1545 pass_list.push_back(std::move(root_pass)); |
1548 | 1546 |
1549 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl | 1547 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
1550 // renderer so use a fuzzy comparator. | 1548 // renderer so use a fuzzy comparator. |
1551 EXPECT_TRUE(this->RunPixelTest( | 1549 EXPECT_TRUE(this->RunPixelTest( |
1552 &pass_list, | 1550 &pass_list, |
1553 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), | 1551 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), |
1554 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); | 1552 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); |
1555 } | 1553 } |
1556 | 1554 |
1557 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) { | 1555 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) { |
1558 gfx::Rect viewport_rect(this->device_viewport_size_); | 1556 gfx::Rect viewport_rect(this->device_viewport_size_); |
1559 | 1557 |
1560 int root_pass_id = 1; | 1558 int root_pass_id = 1; |
1561 std::unique_ptr<RenderPass> root_pass = | 1559 std::unique_ptr<RenderPass> root_pass = |
1562 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 1560 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
1563 | 1561 |
1564 int child_pass_id = 2; | 1562 int child_pass_id = 2; |
1565 gfx::Rect pass_rect(this->device_viewport_size_); | 1563 gfx::Rect pass_rect(this->device_viewport_size_); |
1566 gfx::Transform transform_to_root; | 1564 gfx::Transform transform_to_root; |
| 1565 FilterOperations filters; |
| 1566 filters.Append(FilterOperation::CreateSaturateFilter(0.5f)); |
| 1567 |
1567 std::unique_ptr<RenderPass> child_pass = | 1568 std::unique_ptr<RenderPass> child_pass = |
1568 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 1569 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 1570 child_pass->filters = filters; |
1569 | 1571 |
1570 gfx::Transform quad_to_target_transform; | 1572 gfx::Transform quad_to_target_transform; |
1571 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1573 SharedQuadState* shared_state = CreateTestSharedQuadState( |
1572 quad_to_target_transform, viewport_rect, child_pass.get()); | 1574 quad_to_target_transform, viewport_rect, child_pass.get()); |
1573 shared_state->opacity = 0.5f; | 1575 shared_state->opacity = 0.5f; |
1574 | 1576 |
1575 gfx::Rect blue_rect(0, | 1577 gfx::Rect blue_rect(0, |
1576 0, | 1578 0, |
1577 this->device_viewport_size_.width(), | 1579 this->device_viewport_size_.width(), |
1578 this->device_viewport_size_.height() / 2); | 1580 this->device_viewport_size_.height() / 2); |
(...skipping 12 matching lines...) Expand all Loading... |
1591 quad_to_target_transform, viewport_rect, child_pass.get()); | 1593 quad_to_target_transform, viewport_rect, child_pass.get()); |
1592 | 1594 |
1593 SolidColorDrawQuad* white = | 1595 SolidColorDrawQuad* white = |
1594 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 1596 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
1595 white->SetNew( | 1597 white->SetNew( |
1596 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); | 1598 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); |
1597 | 1599 |
1598 SharedQuadState* pass_shared_state = | 1600 SharedQuadState* pass_shared_state = |
1599 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); | 1601 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); |
1600 | 1602 |
1601 FilterOperations filters; | |
1602 filters.Append(FilterOperation::CreateSaturateFilter(0.5f)); | |
1603 | |
1604 RenderPassDrawQuad* render_pass_quad = | 1603 RenderPassDrawQuad* render_pass_quad = |
1605 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 1604 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1606 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, | 1605 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, |
1607 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), | 1606 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), |
1608 filters, gfx::Vector2dF(), gfx::PointF(), | 1607 gfx::Vector2dF(), gfx::PointF()); |
1609 FilterOperations()); | |
1610 | 1608 |
1611 RenderPassList pass_list; | 1609 RenderPassList pass_list; |
1612 pass_list.push_back(std::move(child_pass)); | 1610 pass_list.push_back(std::move(child_pass)); |
1613 pass_list.push_back(std::move(root_pass)); | 1611 pass_list.push_back(std::move(root_pass)); |
1614 | 1612 |
1615 // This test blends slightly differently with the software renderer vs. the gl | 1613 // This test blends slightly differently with the software renderer vs. the gl |
1616 // renderer so use a fuzzy comparator. | 1614 // renderer so use a fuzzy comparator. |
1617 EXPECT_TRUE(this->RunPixelTest( | 1615 EXPECT_TRUE(this->RunPixelTest( |
1618 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), | 1616 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), |
1619 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); | 1617 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); |
1620 } | 1618 } |
1621 | 1619 |
1622 TYPED_TEST(RendererPixelTest, FastPassFilterChain) { | 1620 TYPED_TEST(RendererPixelTest, FastPassFilterChain) { |
1623 gfx::Rect viewport_rect(this->device_viewport_size_); | 1621 gfx::Rect viewport_rect(this->device_viewport_size_); |
1624 | 1622 |
1625 int root_pass_id = 1; | 1623 int root_pass_id = 1; |
1626 std::unique_ptr<RenderPass> root_pass = | 1624 std::unique_ptr<RenderPass> root_pass = |
1627 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 1625 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
1628 | 1626 |
1629 int child_pass_id = 2; | 1627 int child_pass_id = 2; |
1630 gfx::Rect pass_rect(this->device_viewport_size_); | 1628 gfx::Rect pass_rect(this->device_viewport_size_); |
1631 gfx::Transform transform_to_root; | 1629 gfx::Transform transform_to_root; |
| 1630 FilterOperations filters; |
| 1631 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f)); |
| 1632 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f)); |
| 1633 |
1632 std::unique_ptr<RenderPass> child_pass = | 1634 std::unique_ptr<RenderPass> child_pass = |
1633 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 1635 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 1636 child_pass->filters = filters; |
1634 | 1637 |
1635 gfx::Transform quad_to_target_transform; | 1638 gfx::Transform quad_to_target_transform; |
1636 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1639 SharedQuadState* shared_state = CreateTestSharedQuadState( |
1637 quad_to_target_transform, viewport_rect, child_pass.get()); | 1640 quad_to_target_transform, viewport_rect, child_pass.get()); |
1638 shared_state->opacity = 0.5f; | 1641 shared_state->opacity = 0.5f; |
1639 | 1642 |
1640 gfx::Rect blue_rect(0, | 1643 gfx::Rect blue_rect(0, |
1641 0, | 1644 0, |
1642 this->device_viewport_size_.width(), | 1645 this->device_viewport_size_.width(), |
1643 this->device_viewport_size_.height() / 2); | 1646 this->device_viewport_size_.height() / 2); |
(...skipping 12 matching lines...) Expand all Loading... |
1656 quad_to_target_transform, viewport_rect, child_pass.get()); | 1659 quad_to_target_transform, viewport_rect, child_pass.get()); |
1657 | 1660 |
1658 SolidColorDrawQuad* white = | 1661 SolidColorDrawQuad* white = |
1659 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 1662 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
1660 white->SetNew( | 1663 white->SetNew( |
1661 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); | 1664 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); |
1662 | 1665 |
1663 SharedQuadState* pass_shared_state = | 1666 SharedQuadState* pass_shared_state = |
1664 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); | 1667 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); |
1665 | 1668 |
1666 FilterOperations filters; | |
1667 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f)); | |
1668 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f)); | |
1669 | |
1670 RenderPassDrawQuad* render_pass_quad = | 1669 RenderPassDrawQuad* render_pass_quad = |
1671 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 1670 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1672 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, | 1671 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, |
1673 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), | 1672 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), |
1674 filters, gfx::Vector2dF(), gfx::PointF(), | 1673 gfx::Vector2dF(), gfx::PointF()); |
1675 FilterOperations()); | |
1676 | 1674 |
1677 RenderPassList pass_list; | 1675 RenderPassList pass_list; |
1678 pass_list.push_back(std::move(child_pass)); | 1676 pass_list.push_back(std::move(child_pass)); |
1679 pass_list.push_back(std::move(root_pass)); | 1677 pass_list.push_back(std::move(root_pass)); |
1680 | 1678 |
1681 // This test blends slightly differently with the software renderer vs. the gl | 1679 // This test blends slightly differently with the software renderer vs. the gl |
1682 // renderer so use a fuzzy comparator. | 1680 // renderer so use a fuzzy comparator. |
1683 EXPECT_TRUE(this->RunPixelTest( | 1681 EXPECT_TRUE(this->RunPixelTest( |
1684 &pass_list, | 1682 &pass_list, |
1685 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")), | 1683 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")), |
1686 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); | 1684 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); |
1687 } | 1685 } |
1688 | 1686 |
1689 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { | 1687 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { |
1690 gfx::Rect viewport_rect(this->device_viewport_size_); | 1688 gfx::Rect viewport_rect(this->device_viewport_size_); |
1691 | 1689 |
1692 int root_pass_id = 1; | 1690 int root_pass_id = 1; |
1693 std::unique_ptr<RenderPass> root_pass = | 1691 std::unique_ptr<RenderPass> root_pass = |
1694 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 1692 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
1695 | 1693 |
1696 int child_pass_id = 2; | 1694 int child_pass_id = 2; |
1697 gfx::Rect pass_rect(this->device_viewport_size_); | 1695 gfx::Rect pass_rect(this->device_viewport_size_); |
1698 gfx::Transform transform_to_root; | 1696 gfx::Transform transform_to_root; |
| 1697 SkScalar matrix[20]; |
| 1698 float amount = 0.5f; |
| 1699 matrix[0] = 0.213f + 0.787f * amount; |
| 1700 matrix[1] = 0.715f - 0.715f * amount; |
| 1701 matrix[2] = 1.f - (matrix[0] + matrix[1]); |
| 1702 matrix[3] = 0; |
| 1703 matrix[4] = 20.f; |
| 1704 matrix[5] = 0.213f - 0.213f * amount; |
| 1705 matrix[6] = 0.715f + 0.285f * amount; |
| 1706 matrix[7] = 1.f - (matrix[5] + matrix[6]); |
| 1707 matrix[8] = 0; |
| 1708 matrix[9] = 200.f; |
| 1709 matrix[10] = 0.213f - 0.213f * amount; |
| 1710 matrix[11] = 0.715f - 0.715f * amount; |
| 1711 matrix[12] = 1.f - (matrix[10] + matrix[11]); |
| 1712 matrix[13] = 0; |
| 1713 matrix[14] = 1.5f; |
| 1714 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; |
| 1715 matrix[18] = 1; |
| 1716 FilterOperations filters; |
| 1717 filters.Append( |
| 1718 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( |
| 1719 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); |
| 1720 |
1699 std::unique_ptr<RenderPass> child_pass = | 1721 std::unique_ptr<RenderPass> child_pass = |
1700 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 1722 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 1723 child_pass->filters = filters; |
1701 | 1724 |
1702 gfx::Transform quad_to_target_transform; | 1725 gfx::Transform quad_to_target_transform; |
1703 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1726 SharedQuadState* shared_state = CreateTestSharedQuadState( |
1704 quad_to_target_transform, viewport_rect, child_pass.get()); | 1727 quad_to_target_transform, viewport_rect, child_pass.get()); |
1705 shared_state->opacity = 0.5f; | 1728 shared_state->opacity = 0.5f; |
1706 | 1729 |
1707 gfx::Rect blue_rect(0, | 1730 gfx::Rect blue_rect(0, |
1708 0, | 1731 0, |
1709 this->device_viewport_size_.width(), | 1732 this->device_viewport_size_.width(), |
1710 this->device_viewport_size_.height() / 2); | 1733 this->device_viewport_size_.height() / 2); |
(...skipping 12 matching lines...) Expand all Loading... |
1723 quad_to_target_transform, viewport_rect, child_pass.get()); | 1746 quad_to_target_transform, viewport_rect, child_pass.get()); |
1724 | 1747 |
1725 SolidColorDrawQuad* white = | 1748 SolidColorDrawQuad* white = |
1726 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 1749 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
1727 white->SetNew( | 1750 white->SetNew( |
1728 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); | 1751 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); |
1729 | 1752 |
1730 SharedQuadState* pass_shared_state = | 1753 SharedQuadState* pass_shared_state = |
1731 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); | 1754 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); |
1732 | 1755 |
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 = | 1756 RenderPassDrawQuad* render_pass_quad = |
1758 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 1757 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1759 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, | 1758 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect, |
1760 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), | 1759 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(), |
1761 filters, gfx::Vector2dF(), gfx::PointF(), | 1760 gfx::Vector2dF(), gfx::PointF()); |
1762 FilterOperations()); | |
1763 | 1761 |
1764 RenderPassList pass_list; | 1762 RenderPassList pass_list; |
1765 | 1763 |
1766 pass_list.push_back(std::move(child_pass)); | 1764 pass_list.push_back(std::move(child_pass)); |
1767 pass_list.push_back(std::move(root_pass)); | 1765 pass_list.push_back(std::move(root_pass)); |
1768 | 1766 |
1769 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl | 1767 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
1770 // renderer so use a fuzzy comparator. | 1768 // renderer so use a fuzzy comparator. |
1771 EXPECT_TRUE(this->RunPixelTest( | 1769 EXPECT_TRUE(this->RunPixelTest( |
1772 &pass_list, | 1770 &pass_list, |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1949 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); | 1947 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); |
1950 | 1948 |
1951 // Set up a mask on the RenderPassDrawQuad. | 1949 // Set up a mask on the RenderPassDrawQuad. |
1952 RenderPassDrawQuad* mask_quad = | 1950 RenderPassDrawQuad* mask_quad = |
1953 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 1951 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1954 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, | 1952 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, |
1955 mask_resource_id, | 1953 mask_resource_id, |
1956 gfx::Vector2dF(2.f / mask_rect.width(), | 1954 gfx::Vector2dF(2.f / mask_rect.width(), |
1957 2.f / mask_rect.height()), // mask_uv_scale | 1955 2.f / mask_rect.height()), // mask_uv_scale |
1958 gfx::Size(mask_rect.size()), // mask_texture_size | 1956 gfx::Size(mask_rect.size()), // mask_texture_size |
1959 FilterOperations(), // foreground filters | |
1960 gfx::Vector2dF(), // filters scale | 1957 gfx::Vector2dF(), // filters scale |
1961 gfx::PointF(), // filter origin | 1958 gfx::PointF()); // filter origin |
1962 FilterOperations()); // background filters | |
1963 | 1959 |
1964 // White background behind the masked render pass. | 1960 // White background behind the masked render pass. |
1965 SolidColorDrawQuad* white = | 1961 SolidColorDrawQuad* white = |
1966 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 1962 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
1967 white->SetNew(root_pass_shared_state, | 1963 white->SetNew(root_pass_shared_state, |
1968 viewport_rect, | 1964 viewport_rect, |
1969 viewport_rect, | 1965 viewport_rect, |
1970 SK_ColorWHITE, | 1966 SK_ColorWHITE, |
1971 false); | 1967 false); |
1972 | 1968 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2044 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); | 2040 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); |
2045 | 2041 |
2046 // Set up a mask on the RenderPassDrawQuad. | 2042 // Set up a mask on the RenderPassDrawQuad. |
2047 RenderPassDrawQuad* mask_quad = | 2043 RenderPassDrawQuad* mask_quad = |
2048 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 2044 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
2049 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, | 2045 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, |
2050 mask_resource_id, | 2046 mask_resource_id, |
2051 gfx::Vector2dF(2.f / mask_rect.width(), | 2047 gfx::Vector2dF(2.f / mask_rect.width(), |
2052 2.f / mask_rect.height()), // mask_uv_scale | 2048 2.f / mask_rect.height()), // mask_uv_scale |
2053 gfx::Size(mask_rect.size()), // mask_texture_size | 2049 gfx::Size(mask_rect.size()), // mask_texture_size |
2054 FilterOperations(), // foreground filters | |
2055 gfx::Vector2dF(), // filters scale | 2050 gfx::Vector2dF(), // filters scale |
2056 gfx::PointF(), // filter origin | 2051 gfx::PointF()); // filter origin |
2057 FilterOperations()); // background filters | |
2058 | 2052 |
2059 // White background behind the masked render pass. | 2053 // White background behind the masked render pass. |
2060 SolidColorDrawQuad* white = | 2054 SolidColorDrawQuad* white = |
2061 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 2055 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
2062 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect, | 2056 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect, |
2063 SK_ColorWHITE, false); | 2057 SK_ColorWHITE, false); |
2064 | 2058 |
2065 RenderPassList pass_list; | 2059 RenderPassList pass_list; |
2066 pass_list.push_back(std::move(child_pass)); | 2060 pass_list.push_back(std::move(child_pass)); |
2067 pass_list.push_back(std::move(root_pass)); | 2061 pass_list.push_back(std::move(root_pass)); |
(...skipping 14 matching lines...) Expand all Loading... |
2082 std::unique_ptr<RenderPass> root_pass = | 2076 std::unique_ptr<RenderPass> root_pass = |
2083 CreateTestRootRenderPass(root_id, device_viewport_rect); | 2077 CreateTestRootRenderPass(root_id, device_viewport_rect); |
2084 root_pass->has_transparent_background = false; | 2078 root_pass->has_transparent_background = false; |
2085 | 2079 |
2086 gfx::Transform identity_quad_to_target_transform; | 2080 gfx::Transform identity_quad_to_target_transform; |
2087 | 2081 |
2088 int filter_pass_id = 2; | 2082 int filter_pass_id = 2; |
2089 gfx::Transform transform_to_root; | 2083 gfx::Transform transform_to_root; |
2090 std::unique_ptr<RenderPass> filter_pass = CreateTestRenderPass( | 2084 std::unique_ptr<RenderPass> filter_pass = CreateTestRenderPass( |
2091 filter_pass_id, filter_pass_layer_rect_, transform_to_root); | 2085 filter_pass_id, filter_pass_layer_rect_, transform_to_root); |
| 2086 filter_pass->background_filters = this->background_filters_; |
2092 | 2087 |
2093 // A non-visible quad in the filtering render pass. | 2088 // A non-visible quad in the filtering render pass. |
2094 { | 2089 { |
2095 SharedQuadState* shared_state = | 2090 SharedQuadState* shared_state = |
2096 CreateTestSharedQuadState(identity_quad_to_target_transform, | 2091 CreateTestSharedQuadState(identity_quad_to_target_transform, |
2097 filter_pass_layer_rect_, filter_pass.get()); | 2092 filter_pass_layer_rect_, filter_pass.get()); |
2098 SolidColorDrawQuad* color_quad = | 2093 SolidColorDrawQuad* color_quad = |
2099 filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 2094 filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
2100 color_quad->SetNew(shared_state, filter_pass_layer_rect_, | 2095 color_quad->SetNew(shared_state, filter_pass_layer_rect_, |
2101 filter_pass_layer_rect_, SK_ColorTRANSPARENT, false); | 2096 filter_pass_layer_rect_, SK_ColorTRANSPARENT, false); |
2102 } | 2097 } |
2103 | 2098 |
2104 { | 2099 { |
2105 SharedQuadState* shared_state = | 2100 SharedQuadState* shared_state = |
2106 CreateTestSharedQuadState(filter_pass_to_target_transform_, | 2101 CreateTestSharedQuadState(filter_pass_to_target_transform_, |
2107 filter_pass_layer_rect_, filter_pass.get()); | 2102 filter_pass_layer_rect_, filter_pass.get()); |
2108 RenderPassDrawQuad* filter_pass_quad = | 2103 RenderPassDrawQuad* filter_pass_quad = |
2109 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 2104 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
2110 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_, | 2105 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_, |
2111 filter_pass_layer_rect_, filter_pass_id, | 2106 filter_pass_layer_rect_, filter_pass_id, |
2112 0, // mask_resource_id | 2107 0, // mask_resource_id |
2113 gfx::Vector2dF(), // mask_uv_scale | 2108 gfx::Vector2dF(), // mask_uv_scale |
2114 gfx::Size(), // mask_texture_size | 2109 gfx::Size(), // mask_texture_size |
2115 FilterOperations(), // filters | |
2116 gfx::Vector2dF(1.0f, 1.0f), // filters_scale | 2110 gfx::Vector2dF(1.0f, 1.0f), // filters_scale |
2117 gfx::PointF(), // filters_origin | 2111 gfx::PointF()); // filters_origin |
2118 this->background_filters_); | |
2119 } | 2112 } |
2120 | 2113 |
2121 const int kColumnWidth = device_viewport_rect.width() / 3; | 2114 const int kColumnWidth = device_viewport_rect.width() / 3; |
2122 | 2115 |
2123 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); | 2116 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); |
2124 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { | 2117 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { |
2125 SharedQuadState* shared_state = CreateTestSharedQuadState( | 2118 SharedQuadState* shared_state = CreateTestSharedQuadState( |
2126 identity_quad_to_target_transform, left_rect, root_pass.get()); | 2119 identity_quad_to_target_transform, left_rect, root_pass.get()); |
2127 SolidColorDrawQuad* color_quad = | 2120 SolidColorDrawQuad* color_quad = |
2128 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 2121 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3271 | 3264 |
3272 EXPECT_TRUE(this->RunPixelTest( | 3265 EXPECT_TRUE(this->RunPixelTest( |
3273 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")), | 3266 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")), |
3274 FuzzyPixelOffByOneComparator(true))); | 3267 FuzzyPixelOffByOneComparator(true))); |
3275 } | 3268 } |
3276 | 3269 |
3277 #endif // !defined(OS_ANDROID) | 3270 #endif // !defined(OS_ANDROID) |
3278 | 3271 |
3279 } // namespace | 3272 } // namespace |
3280 } // namespace cc | 3273 } // namespace cc |
OLD | NEW |