| 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
| 6 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
| 7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
| 8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
| 9 #include "cc/quads/picture_draw_quad.h" | 9 #include "cc/quads/picture_draw_quad.h" |
| 10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 bool premultiplied_alpha, | 116 bool premultiplied_alpha, |
| 117 const SharedQuadState* shared_state, | 117 const SharedQuadState* shared_state, |
| 118 ResourceProvider* resource_provider, | 118 ResourceProvider* resource_provider, |
| 119 RenderPass* render_pass) { | 119 RenderPass* render_pass) { |
| 120 SkPMColor pixel_color = premultiplied_alpha ? | 120 SkPMColor pixel_color = premultiplied_alpha ? |
| 121 SkPreMultiplyColor(texel_color) : | 121 SkPreMultiplyColor(texel_color) : |
| 122 SkPackARGB32NoCheck(SkColorGetA(texel_color), | 122 SkPackARGB32NoCheck(SkColorGetA(texel_color), |
| 123 SkColorGetR(texel_color), | 123 SkColorGetR(texel_color), |
| 124 SkColorGetG(texel_color), | 124 SkColorGetG(texel_color), |
| 125 SkColorGetB(texel_color)); | 125 SkColorGetB(texel_color)); |
| 126 size_t num_pixels = static_cast<size_t>(rect.width()) * rect.height(); | 126 std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color); |
| 127 std::vector<uint32_t> pixels(num_pixels, pixel_color); | |
| 128 | 127 |
| 129 ResourceProvider::ResourceId resource = resource_provider->CreateResource( | 128 ResourceProvider::ResourceId resource = |
| 130 rect.size(), GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 129 resource_provider->CreateResource(rect.size(), |
| 131 RGBA_8888); | 130 GL_CLAMP_TO_EDGE, |
| 132 resource_provider->CopyToResource( | 131 ResourceProvider::TextureHintImmutable, |
| 133 resource, reinterpret_cast<uint8_t*>(&pixels.front()), rect.size()); | 132 RGBA_8888); |
| 133 resource_provider->SetPixels( |
| 134 resource, |
| 135 reinterpret_cast<uint8_t*>(&pixels.front()), |
| 136 rect, |
| 137 rect, |
| 138 gfx::Vector2d()); |
| 134 | 139 |
| 135 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 140 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 136 | 141 |
| 137 TextureDrawQuad* quad = | 142 TextureDrawQuad* quad = |
| 138 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 143 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 139 quad->SetNew(shared_state, | 144 quad->SetNew(shared_state, |
| 140 rect, | 145 rect, |
| 141 gfx::Rect(), | 146 gfx::Rect(), |
| 142 rect, | 147 rect, |
| 143 resource, | 148 resource, |
| 144 premultiplied_alpha, | 149 premultiplied_alpha, |
| 145 gfx::PointF(0.0f, 0.0f), // uv_top_left | 150 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 146 gfx::PointF(1.0f, 1.0f), // uv_bottom_right | 151 gfx::PointF(1.0f, 1.0f), // uv_bottom_right |
| 147 background_color, | 152 background_color, |
| 148 vertex_opacity, | 153 vertex_opacity, |
| 149 false, // flipped | 154 false, // flipped |
| 150 false); // nearest_neighbor | 155 false); // nearest_neighbor |
| 151 } | 156 } |
| 152 | 157 |
| 153 typedef ::testing::Types<GLRenderer, | 158 typedef ::testing::Types<GLRenderer, |
| 154 SoftwareRenderer, | 159 SoftwareRenderer, |
| 155 GLRendererWithExpandedViewport, | 160 GLRendererWithExpandedViewport, |
| 156 SoftwareRendererWithExpandedViewport> RendererTypes; | 161 SoftwareRendererWithExpandedViewport> RendererTypes; |
| 157 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 162 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
| 158 | 163 |
| 159 template <typename RendererType> | 164 template <typename RendererType> |
| 160 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {}; | |
| 161 | |
| 162 typedef ::testing::Types<SoftwareRenderer, SoftwareRendererWithExpandedViewport> | |
| 163 SoftwareRendererTypes; | |
| 164 TYPED_TEST_CASE(SoftwareRendererPixelTest, SoftwareRendererTypes); | |
| 165 | |
| 166 template <typename RendererType> | |
| 167 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { | 165 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { |
| 168 public: | 166 public: |
| 169 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) | 167 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) |
| 170 : fuzzy_(discard_alpha), exact_(discard_alpha) {} | 168 : fuzzy_(discard_alpha), exact_(discard_alpha) {} |
| 171 | 169 |
| 172 bool Compare(const SkBitmap& actual_bmp, | 170 bool Compare(const SkBitmap& actual_bmp, |
| 173 const SkBitmap& expected_bmp) const override; | 171 const SkBitmap& expected_bmp) const override; |
| 174 | 172 |
| 175 private: | 173 private: |
| 176 FuzzyPixelOffByOneComparator fuzzy_; | 174 FuzzyPixelOffByOneComparator fuzzy_; |
| (...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 while (!rect.IsEmpty()) { | 865 while (!rect.IsEmpty()) { |
| 868 rect.Inset(6, 6, 4, 4); | 866 rect.Inset(6, 6, 4, 4); |
| 869 canvas.drawRect( | 867 canvas.drawRect( |
| 870 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), | 868 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), |
| 871 paint); | 869 paint); |
| 872 rect.Inset(6, 6, 4, 4); | 870 rect.Inset(6, 6, 4, 4); |
| 873 } | 871 } |
| 874 | 872 |
| 875 ResourceProvider::ResourceId mask_resource_id = | 873 ResourceProvider::ResourceId mask_resource_id = |
| 876 this->resource_provider_->CreateResource( | 874 this->resource_provider_->CreateResource( |
| 877 mask_rect.size(), GL_CLAMP_TO_EDGE, | 875 mask_rect.size(), |
| 878 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); | 876 GL_CLAMP_TO_EDGE, |
| 877 ResourceProvider::TextureHintImmutable, |
| 878 RGBA_8888); |
| 879 { | 879 { |
| 880 SkAutoLockPixels lock(bitmap); | 880 SkAutoLockPixels lock(bitmap); |
| 881 this->resource_provider_->CopyToResource( | 881 this->resource_provider_->SetPixels( |
| 882 mask_resource_id, reinterpret_cast<uint8_t*>(bitmap.getPixels()), | 882 mask_resource_id, |
| 883 mask_rect.size()); | 883 reinterpret_cast<uint8_t*>(bitmap.getPixels()), |
| 884 mask_rect, |
| 885 mask_rect, |
| 886 gfx::Vector2d()); |
| 884 } | 887 } |
| 885 | 888 |
| 886 // This RenderPassDrawQuad does not include the full |viewport_rect| which is | 889 // This RenderPassDrawQuad does not include the full |viewport_rect| which is |
| 887 // the size of the child render pass. | 890 // the size of the child render pass. |
| 888 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); | 891 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); |
| 889 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); | 892 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); |
| 890 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); | 893 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); |
| 891 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); | 894 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); |
| 892 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); | 895 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); |
| 893 | 896 |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1369 | 1372 |
| 1370 RenderPassList pass_list; | 1373 RenderPassList pass_list; |
| 1371 pass_list.push_back(pass.Pass()); | 1374 pass_list.push_back(pass.Pass()); |
| 1372 | 1375 |
| 1373 EXPECT_TRUE(this->RunPixelTest( | 1376 EXPECT_TRUE(this->RunPixelTest( |
| 1374 &pass_list, | 1377 &pass_list, |
| 1375 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), | 1378 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), |
| 1376 FuzzyPixelOffByOneComparator(true))); | 1379 FuzzyPixelOffByOneComparator(true))); |
| 1377 } | 1380 } |
| 1378 | 1381 |
| 1379 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) { | 1382 TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) { |
| 1380 gfx::Size pile_tile_size(1000, 1000); | 1383 gfx::Size pile_tile_size(1000, 1000); |
| 1381 gfx::Rect viewport(this->device_viewport_size_); | 1384 gfx::Rect viewport(this->device_viewport_size_); |
| 1382 // TODO(enne): the renderer should figure this out on its own. | 1385 // TODO(enne): the renderer should figure this out on its own. |
| 1383 ResourceFormat texture_format = RGBA_8888; | 1386 ResourceFormat texture_format = RGBA_8888; |
| 1384 bool nearest_neighbor = false; | 1387 bool nearest_neighbor = false; |
| 1385 | 1388 |
| 1386 RenderPassId id(1, 1); | 1389 RenderPassId id(1, 1); |
| 1387 gfx::Transform transform_to_root; | 1390 gfx::Transform transform_to_root; |
| 1388 scoped_ptr<RenderPass> pass = | 1391 scoped_ptr<RenderPass> pass = |
| 1389 CreateTestRenderPass(id, viewport, transform_to_root); | 1392 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1449 RenderPassList pass_list; | 1452 RenderPassList pass_list; |
| 1450 pass_list.push_back(pass.Pass()); | 1453 pass_list.push_back(pass.Pass()); |
| 1451 | 1454 |
| 1452 EXPECT_TRUE(this->RunPixelTest( | 1455 EXPECT_TRUE(this->RunPixelTest( |
| 1453 &pass_list, | 1456 &pass_list, |
| 1454 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), | 1457 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), |
| 1455 ExactPixelComparator(true))); | 1458 ExactPixelComparator(true))); |
| 1456 } | 1459 } |
| 1457 | 1460 |
| 1458 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. | 1461 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. |
| 1459 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) { | 1462 TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) { |
| 1460 gfx::Size pile_tile_size(1000, 1000); | 1463 gfx::Size pile_tile_size(1000, 1000); |
| 1461 gfx::Rect viewport(this->device_viewport_size_); | 1464 gfx::Rect viewport(this->device_viewport_size_); |
| 1462 ResourceFormat texture_format = RGBA_8888; | 1465 ResourceFormat texture_format = RGBA_8888; |
| 1463 bool nearest_neighbor = false; | 1466 bool nearest_neighbor = false; |
| 1464 | 1467 |
| 1465 RenderPassId id(1, 1); | 1468 RenderPassId id(1, 1); |
| 1466 gfx::Transform transform_to_root; | 1469 gfx::Transform transform_to_root; |
| 1467 scoped_ptr<RenderPass> pass = | 1470 scoped_ptr<RenderPass> pass = |
| 1468 CreateTestRenderPass(id, viewport, transform_to_root); | 1471 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1469 | 1472 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1526 return true; | 1529 return true; |
| 1527 } | 1530 } |
| 1528 | 1531 |
| 1529 template<> | 1532 template<> |
| 1530 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { | 1533 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { |
| 1531 return true; | 1534 return true; |
| 1532 } | 1535 } |
| 1533 | 1536 |
| 1534 // If we disable image filtering, then a 2x2 bitmap should appear as four | 1537 // If we disable image filtering, then a 2x2 bitmap should appear as four |
| 1535 // huge sharp squares. | 1538 // huge sharp squares. |
| 1536 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) { | 1539 TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) { |
| 1537 // We only care about this in software mode since bilinear filtering is | 1540 // We only care about this in software mode since bilinear filtering is |
| 1538 // cheap in hardware. | 1541 // cheap in hardware. |
| 1539 if (!IsSoftwareRenderer<TypeParam>()) | 1542 if (!IsSoftwareRenderer<TypeParam>()) |
| 1540 return; | 1543 return; |
| 1541 | 1544 |
| 1542 gfx::Size pile_tile_size(1000, 1000); | 1545 gfx::Size pile_tile_size(1000, 1000); |
| 1543 gfx::Rect viewport(this->device_viewport_size_); | 1546 gfx::Rect viewport(this->device_viewport_size_); |
| 1544 ResourceFormat texture_format = RGBA_8888; | 1547 ResourceFormat texture_format = RGBA_8888; |
| 1545 bool nearest_neighbor = false; | 1548 bool nearest_neighbor = false; |
| 1546 | 1549 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 | 1586 |
| 1584 this->disable_picture_quad_image_filtering_ = true; | 1587 this->disable_picture_quad_image_filtering_ = true; |
| 1585 | 1588 |
| 1586 EXPECT_TRUE(this->RunPixelTest( | 1589 EXPECT_TRUE(this->RunPixelTest( |
| 1587 &pass_list, | 1590 &pass_list, |
| 1588 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1591 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 1589 ExactPixelComparator(true))); | 1592 ExactPixelComparator(true))); |
| 1590 } | 1593 } |
| 1591 | 1594 |
| 1592 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. | 1595 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. |
| 1593 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) { | 1596 TYPED_TEST(RendererPixelTest, PictureDrawQuadNearestNeighbor) { |
| 1594 gfx::Size pile_tile_size(1000, 1000); | 1597 gfx::Size pile_tile_size(1000, 1000); |
| 1595 gfx::Rect viewport(this->device_viewport_size_); | 1598 gfx::Rect viewport(this->device_viewport_size_); |
| 1596 ResourceFormat texture_format = RGBA_8888; | 1599 ResourceFormat texture_format = RGBA_8888; |
| 1597 bool nearest_neighbor = true; | 1600 bool nearest_neighbor = true; |
| 1598 | 1601 |
| 1599 RenderPassId id(1, 1); | 1602 RenderPassId id(1, 1); |
| 1600 gfx::Transform transform_to_root; | 1603 gfx::Transform transform_to_root; |
| 1601 scoped_ptr<RenderPass> pass = | 1604 scoped_ptr<RenderPass> pass = |
| 1602 CreateTestRenderPass(id, viewport, transform_to_root); | 1605 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1603 | 1606 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1652 SkCanvas canvas(bitmap); | 1655 SkCanvas canvas(bitmap); |
| 1653 canvas.drawPoint(0, 0, SK_ColorGREEN); | 1656 canvas.drawPoint(0, 0, SK_ColorGREEN); |
| 1654 canvas.drawPoint(0, 1, SK_ColorBLUE); | 1657 canvas.drawPoint(0, 1, SK_ColorBLUE); |
| 1655 canvas.drawPoint(1, 0, SK_ColorBLUE); | 1658 canvas.drawPoint(1, 0, SK_ColorBLUE); |
| 1656 canvas.drawPoint(1, 1, SK_ColorGREEN); | 1659 canvas.drawPoint(1, 1, SK_ColorGREEN); |
| 1657 } | 1660 } |
| 1658 | 1661 |
| 1659 gfx::Size tile_size(2, 2); | 1662 gfx::Size tile_size(2, 2); |
| 1660 ResourceProvider::ResourceId resource = | 1663 ResourceProvider::ResourceId resource = |
| 1661 this->resource_provider_->CreateResource( | 1664 this->resource_provider_->CreateResource( |
| 1662 tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 1665 tile_size, |
| 1666 GL_CLAMP_TO_EDGE, |
| 1667 ResourceProvider::TextureHintImmutable, |
| 1663 RGBA_8888); | 1668 RGBA_8888); |
| 1664 | 1669 |
| 1665 { | 1670 { |
| 1666 SkAutoLockPixels lock(bitmap); | 1671 SkAutoLockPixels lock(bitmap); |
| 1667 this->resource_provider_->CopyToResource( | 1672 this->resource_provider_->SetPixels( |
| 1668 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); | 1673 resource, |
| 1674 static_cast<uint8_t*>(bitmap.getPixels()), |
| 1675 gfx::Rect(tile_size), |
| 1676 gfx::Rect(tile_size), |
| 1677 gfx::Vector2d()); |
| 1669 } | 1678 } |
| 1670 | 1679 |
| 1671 RenderPassId id(1, 1); | 1680 RenderPassId id(1, 1); |
| 1672 gfx::Transform transform_to_root; | 1681 gfx::Transform transform_to_root; |
| 1673 scoped_ptr<RenderPass> pass = | 1682 scoped_ptr<RenderPass> pass = |
| 1674 CreateTestRenderPass(id, viewport, transform_to_root); | 1683 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1675 | 1684 |
| 1676 gfx::Transform content_to_target_transform; | 1685 gfx::Transform content_to_target_transform; |
| 1677 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1686 SharedQuadState* shared_state = CreateTestSharedQuadState( |
| 1678 content_to_target_transform, viewport, pass.get()); | 1687 content_to_target_transform, viewport, pass.get()); |
| 1679 | 1688 |
| 1680 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); | 1689 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
| 1681 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, | 1690 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, |
| 1682 gfx::Rect(tile_size), tile_size, swizzle_contents, | 1691 gfx::Rect(tile_size), tile_size, swizzle_contents, |
| 1683 nearest_neighbor); | 1692 nearest_neighbor); |
| 1684 | 1693 |
| 1685 RenderPassList pass_list; | 1694 RenderPassList pass_list; |
| 1686 pass_list.push_back(pass.Pass()); | 1695 pass_list.push_back(pass.Pass()); |
| 1687 | 1696 |
| 1688 EXPECT_TRUE(this->RunPixelTest( | 1697 EXPECT_TRUE(this->RunPixelTest( |
| 1689 &pass_list, | 1698 &pass_list, |
| 1690 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1699 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 1691 ExactPixelComparator(true))); | 1700 ExactPixelComparator(true))); |
| 1692 } | 1701 } |
| 1693 | 1702 |
| 1694 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { | 1703 TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) { |
| 1695 gfx::Size pile_tile_size(1000, 1000); | 1704 gfx::Size pile_tile_size(1000, 1000); |
| 1696 gfx::Rect viewport(this->device_viewport_size_); | 1705 gfx::Rect viewport(this->device_viewport_size_); |
| 1697 // TODO(enne): the renderer should figure this out on its own. | 1706 // TODO(enne): the renderer should figure this out on its own. |
| 1698 ResourceFormat texture_format = RGBA_8888; | 1707 ResourceFormat texture_format = RGBA_8888; |
| 1699 bool nearest_neighbor = false; | 1708 bool nearest_neighbor = false; |
| 1700 | 1709 |
| 1701 RenderPassId id(1, 1); | 1710 RenderPassId id(1, 1); |
| 1702 gfx::Transform transform_to_root; | 1711 gfx::Transform transform_to_root; |
| 1703 scoped_ptr<RenderPass> pass = | 1712 scoped_ptr<RenderPass> pass = |
| 1704 CreateTestRenderPass(id, viewport, transform_to_root); | 1713 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1985 this->device_viewport_size_.width() / 2, | 1994 this->device_viewport_size_.width() / 2, |
| 1986 this->device_viewport_size_.height() / 2); | 1995 this->device_viewport_size_.height() / 2); |
| 1987 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( | 1996 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( |
| 1988 &pass_list, | 1997 &pass_list, |
| 1989 pass_list.front(), | 1998 pass_list.front(), |
| 1990 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), | 1999 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), |
| 1991 ExactPixelComparator(true), | 2000 ExactPixelComparator(true), |
| 1992 &capture_rect)); | 2001 &capture_rect)); |
| 1993 } | 2002 } |
| 1994 | 2003 |
| 2004 TEST_F(GLRendererPixelTest, PictureDrawQuadTexture4444) { |
| 2005 gfx::Size pile_tile_size(1000, 1000); |
| 2006 gfx::Rect viewport(this->device_viewport_size_); |
| 2007 ResourceFormat texture_format = RGBA_4444; |
| 2008 bool nearest_neighbor = false; |
| 2009 |
| 2010 RenderPassId id(1, 1); |
| 2011 gfx::Transform transform_to_root; |
| 2012 scoped_ptr<RenderPass> pass = |
| 2013 CreateTestRenderPass(id, viewport, transform_to_root); |
| 2014 |
| 2015 // One viewport-filling blue quad |
| 2016 scoped_ptr<FakePicturePile> blue_recording = |
| 2017 FakePicturePile::CreateFilledPile(pile_tile_size, viewport.size()); |
| 2018 SkPaint blue_paint; |
| 2019 blue_paint.setColor(SK_ColorBLUE); |
| 2020 blue_recording->add_draw_rect_with_paint(viewport, blue_paint); |
| 2021 blue_recording->RerecordPile(); |
| 2022 scoped_refptr<FakePicturePileImpl> blue_pile = |
| 2023 FakePicturePileImpl::CreateFromPile(blue_recording.get(), nullptr); |
| 2024 |
| 2025 gfx::Transform blue_content_to_target_transform; |
| 2026 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( |
| 2027 blue_content_to_target_transform, viewport, pass.get()); |
| 2028 |
| 2029 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); |
| 2030 blue_quad->SetNew(blue_shared_state, viewport, gfx::Rect(), viewport, |
| 2031 gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(), |
| 2032 nearest_neighbor, texture_format, viewport, 1.f, |
| 2033 blue_pile.get()); |
| 2034 |
| 2035 RenderPassList pass_list; |
| 2036 pass_list.push_back(pass.Pass()); |
| 2037 |
| 2038 EXPECT_TRUE(this->RunPixelTest(&pass_list, |
| 2039 base::FilePath(FILE_PATH_LITERAL("blue.png")), |
| 2040 ExactPixelComparator(true))); |
| 2041 } |
| 2042 |
| 1995 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { | 2043 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { |
| 1996 gfx::Rect rect(this->device_viewport_size_); | 2044 gfx::Rect rect(this->device_viewport_size_); |
| 1997 | 2045 |
| 1998 RenderPassId id(1, 1); | 2046 RenderPassId id(1, 1); |
| 1999 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 2047 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 2000 | 2048 |
| 2001 SharedQuadState* shared_state = | 2049 SharedQuadState* shared_state = |
| 2002 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 2050 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 2003 | 2051 |
| 2004 gfx::Size texture_size(4, 4); | 2052 gfx::Rect texture_rect(4, 4); |
| 2005 SkPMColor colors[4] = { | 2053 SkPMColor colors[4] = { |
| 2006 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), | 2054 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), |
| 2007 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), | 2055 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), |
| 2008 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), | 2056 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), |
| 2009 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), | 2057 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), |
| 2010 }; | 2058 }; |
| 2011 uint32_t pixels[16] = { | 2059 uint32_t pixels[16] = { |
| 2012 colors[0], colors[0], colors[1], colors[1], | 2060 colors[0], colors[0], colors[1], colors[1], |
| 2013 colors[0], colors[0], colors[1], colors[1], | 2061 colors[0], colors[0], colors[1], colors[1], |
| 2014 colors[2], colors[2], colors[3], colors[3], | 2062 colors[2], colors[2], colors[3], colors[3], |
| 2015 colors[2], colors[2], colors[3], colors[3], | 2063 colors[2], colors[2], colors[3], colors[3], |
| 2016 }; | 2064 }; |
| 2017 ResourceProvider::ResourceId resource = | 2065 ResourceProvider::ResourceId resource = |
| 2018 this->resource_provider_->CreateResource( | 2066 this->resource_provider_->CreateResource( |
| 2019 texture_size, GL_REPEAT, ResourceProvider::TEXTURE_HINT_IMMUTABLE, | 2067 texture_rect.size(), |
| 2068 GL_REPEAT, |
| 2069 ResourceProvider::TextureHintImmutable, |
| 2020 RGBA_8888); | 2070 RGBA_8888); |
| 2021 this->resource_provider_->CopyToResource( | 2071 this->resource_provider_->SetPixels( |
| 2022 resource, reinterpret_cast<uint8_t*>(pixels), texture_size); | 2072 resource, |
| 2073 reinterpret_cast<uint8_t*>(pixels), |
| 2074 texture_rect, |
| 2075 texture_rect, |
| 2076 gfx::Vector2d()); |
| 2023 | 2077 |
| 2024 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 2078 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2025 TextureDrawQuad* texture_quad = | 2079 TextureDrawQuad* texture_quad = |
| 2026 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2080 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2027 texture_quad->SetNew( | 2081 texture_quad->SetNew( |
| 2028 shared_state, gfx::Rect(this->device_viewport_size_), gfx::Rect(), | 2082 shared_state, |
| 2029 gfx::Rect(this->device_viewport_size_), resource, | 2083 gfx::Rect(this->device_viewport_size_), |
| 2084 gfx::Rect(), |
| 2085 gfx::Rect(this->device_viewport_size_), |
| 2086 resource, |
| 2030 true, // premultiplied_alpha | 2087 true, // premultiplied_alpha |
| 2031 gfx::PointF(0.0f, 0.0f), // uv_top_left | 2088 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 2032 gfx::PointF( // uv_bottom_right | 2089 gfx::PointF( // uv_bottom_right |
| 2033 this->device_viewport_size_.width() / texture_size.width(), | 2090 this->device_viewport_size_.width() / texture_rect.width(), |
| 2034 this->device_viewport_size_.height() / texture_size.height()), | 2091 this->device_viewport_size_.height() / texture_rect.height()), |
| 2035 SK_ColorWHITE, vertex_opacity, | 2092 SK_ColorWHITE, |
| 2093 vertex_opacity, |
| 2036 false, // flipped | 2094 false, // flipped |
| 2037 false); // nearest_neighbor | 2095 false); // nearest_neighbor |
| 2038 | 2096 |
| 2039 RenderPassList pass_list; | 2097 RenderPassList pass_list; |
| 2040 pass_list.push_back(pass.Pass()); | 2098 pass_list.push_back(pass.Pass()); |
| 2041 | 2099 |
| 2042 EXPECT_TRUE(this->RunPixelTest( | 2100 EXPECT_TRUE(this->RunPixelTest( |
| 2043 &pass_list, | 2101 &pass_list, |
| 2044 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), | 2102 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), |
| 2045 FuzzyPixelOffByOneComparator(true))); | 2103 FuzzyPixelOffByOneComparator(true))); |
| 2046 } | 2104 } |
| 2047 | 2105 |
| 2048 #endif // !defined(OS_ANDROID) | 2106 #endif // !defined(OS_ANDROID) |
| 2049 | 2107 |
| 2050 } // namespace | 2108 } // namespace |
| 2051 } // namespace cc | 2109 } // namespace cc |
| OLD | NEW |