| Index: cc/output/renderer_pixeltest.cc
|
| diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
|
| index 9e9175e3fd37ce832e4cd8021ede0047dfb73876..d7d12116d2228c4b44461a3f1e52392ad06b58d1 100644
|
| --- a/cc/output/renderer_pixeltest.cc
|
| +++ b/cc/output/renderer_pixeltest.cc
|
| @@ -123,14 +123,19 @@ void CreateTestTextureDrawQuad(const gfx::Rect& rect,
|
| SkColorGetR(texel_color),
|
| SkColorGetG(texel_color),
|
| SkColorGetB(texel_color));
|
| - size_t num_pixels = static_cast<size_t>(rect.width()) * rect.height();
|
| - std::vector<uint32_t> pixels(num_pixels, pixel_color);
|
| + std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color);
|
|
|
| - ResourceProvider::ResourceId resource = resource_provider->CreateResource(
|
| - rect.size(), GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| - RGBA_8888);
|
| - resource_provider->CopyToResource(
|
| - resource, reinterpret_cast<uint8_t*>(&pixels.front()), rect.size());
|
| + ResourceProvider::ResourceId resource =
|
| + resource_provider->CreateResource(rect.size(),
|
| + GL_CLAMP_TO_EDGE,
|
| + ResourceProvider::TextureHintImmutable,
|
| + RGBA_8888);
|
| + resource_provider->SetPixels(
|
| + resource,
|
| + reinterpret_cast<uint8_t*>(&pixels.front()),
|
| + rect,
|
| + rect,
|
| + gfx::Vector2d());
|
|
|
| float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
|
|
| @@ -157,13 +162,6 @@ typedef ::testing::Types<GLRenderer,
|
| TYPED_TEST_CASE(RendererPixelTest, RendererTypes);
|
|
|
| template <typename RendererType>
|
| -class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {};
|
| -
|
| -typedef ::testing::Types<SoftwareRenderer, SoftwareRendererWithExpandedViewport>
|
| - SoftwareRendererTypes;
|
| -TYPED_TEST_CASE(SoftwareRendererPixelTest, SoftwareRendererTypes);
|
| -
|
| -template <typename RendererType>
|
| class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator {
|
| public:
|
| explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha)
|
| @@ -874,13 +872,18 @@ TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad) {
|
|
|
| ResourceProvider::ResourceId mask_resource_id =
|
| this->resource_provider_->CreateResource(
|
| - mask_rect.size(), GL_CLAMP_TO_EDGE,
|
| - ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888);
|
| + mask_rect.size(),
|
| + GL_CLAMP_TO_EDGE,
|
| + ResourceProvider::TextureHintImmutable,
|
| + RGBA_8888);
|
| {
|
| SkAutoLockPixels lock(bitmap);
|
| - this->resource_provider_->CopyToResource(
|
| - mask_resource_id, reinterpret_cast<uint8_t*>(bitmap.getPixels()),
|
| - mask_rect.size());
|
| + this->resource_provider_->SetPixels(
|
| + mask_resource_id,
|
| + reinterpret_cast<uint8_t*>(bitmap.getPixels()),
|
| + mask_rect,
|
| + mask_rect,
|
| + gfx::Vector2d());
|
| }
|
|
|
| // This RenderPassDrawQuad does not include the full |viewport_rect| which is
|
| @@ -1376,7 +1379,7 @@ TEST_F(GLRendererPixelTest, AntiAliasingPerspective) {
|
| FuzzyPixelOffByOneComparator(true)));
|
| }
|
|
|
| -TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) {
|
| +TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) {
|
| gfx::Size pile_tile_size(1000, 1000);
|
| gfx::Rect viewport(this->device_viewport_size_);
|
| // TODO(enne): the renderer should figure this out on its own.
|
| @@ -1456,7 +1459,7 @@ TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) {
|
| }
|
|
|
| // Not WithSkiaGPUBackend since that path currently requires tiles for opacity.
|
| -TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) {
|
| +TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) {
|
| gfx::Size pile_tile_size(1000, 1000);
|
| gfx::Rect viewport(this->device_viewport_size_);
|
| ResourceFormat texture_format = RGBA_8888;
|
| @@ -1533,7 +1536,7 @@ bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() {
|
|
|
| // If we disable image filtering, then a 2x2 bitmap should appear as four
|
| // huge sharp squares.
|
| -TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) {
|
| +TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) {
|
| // We only care about this in software mode since bilinear filtering is
|
| // cheap in hardware.
|
| if (!IsSoftwareRenderer<TypeParam>())
|
| @@ -1590,7 +1593,7 @@ TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) {
|
| }
|
|
|
| // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad.
|
| -TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) {
|
| +TYPED_TEST(RendererPixelTest, PictureDrawQuadNearestNeighbor) {
|
| gfx::Size pile_tile_size(1000, 1000);
|
| gfx::Rect viewport(this->device_viewport_size_);
|
| ResourceFormat texture_format = RGBA_8888;
|
| @@ -1659,13 +1662,19 @@ TYPED_TEST(RendererPixelTest, TileDrawQuadNearestNeighbor) {
|
| gfx::Size tile_size(2, 2);
|
| ResourceProvider::ResourceId resource =
|
| this->resource_provider_->CreateResource(
|
| - tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| + tile_size,
|
| + GL_CLAMP_TO_EDGE,
|
| + ResourceProvider::TextureHintImmutable,
|
| RGBA_8888);
|
|
|
| {
|
| SkAutoLockPixels lock(bitmap);
|
| - this->resource_provider_->CopyToResource(
|
| - resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size);
|
| + this->resource_provider_->SetPixels(
|
| + resource,
|
| + static_cast<uint8_t*>(bitmap.getPixels()),
|
| + gfx::Rect(tile_size),
|
| + gfx::Rect(tile_size),
|
| + gfx::Vector2d());
|
| }
|
|
|
| RenderPassId id(1, 1);
|
| @@ -1691,7 +1700,7 @@ TYPED_TEST(RendererPixelTest, TileDrawQuadNearestNeighbor) {
|
| ExactPixelComparator(true)));
|
| }
|
|
|
| -TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) {
|
| +TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) {
|
| gfx::Size pile_tile_size(1000, 1000);
|
| gfx::Rect viewport(this->device_viewport_size_);
|
| // TODO(enne): the renderer should figure this out on its own.
|
| @@ -1992,6 +2001,45 @@ TEST_F(GLRendererPixelTest, CheckReadbackSubset) {
|
| &capture_rect));
|
| }
|
|
|
| +TEST_F(GLRendererPixelTest, PictureDrawQuadTexture4444) {
|
| + gfx::Size pile_tile_size(1000, 1000);
|
| + gfx::Rect viewport(this->device_viewport_size_);
|
| + ResourceFormat texture_format = RGBA_4444;
|
| + bool nearest_neighbor = false;
|
| +
|
| + RenderPassId id(1, 1);
|
| + gfx::Transform transform_to_root;
|
| + scoped_ptr<RenderPass> pass =
|
| + CreateTestRenderPass(id, viewport, transform_to_root);
|
| +
|
| + // One viewport-filling blue quad
|
| + scoped_ptr<FakePicturePile> blue_recording =
|
| + FakePicturePile::CreateFilledPile(pile_tile_size, viewport.size());
|
| + SkPaint blue_paint;
|
| + blue_paint.setColor(SK_ColorBLUE);
|
| + blue_recording->add_draw_rect_with_paint(viewport, blue_paint);
|
| + blue_recording->RerecordPile();
|
| + scoped_refptr<FakePicturePileImpl> blue_pile =
|
| + FakePicturePileImpl::CreateFromPile(blue_recording.get(), nullptr);
|
| +
|
| + gfx::Transform blue_content_to_target_transform;
|
| + SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
|
| + blue_content_to_target_transform, viewport, pass.get());
|
| +
|
| + PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
|
| + blue_quad->SetNew(blue_shared_state, viewport, gfx::Rect(), viewport,
|
| + gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(),
|
| + nearest_neighbor, texture_format, viewport, 1.f,
|
| + blue_pile.get());
|
| +
|
| + RenderPassList pass_list;
|
| + pass_list.push_back(pass.Pass());
|
| +
|
| + EXPECT_TRUE(this->RunPixelTest(&pass_list,
|
| + base::FilePath(FILE_PATH_LITERAL("blue.png")),
|
| + ExactPixelComparator(true)));
|
| +}
|
| +
|
| TYPED_TEST(RendererPixelTest, WrapModeRepeat) {
|
| gfx::Rect rect(this->device_viewport_size_);
|
|
|
| @@ -2001,7 +2049,7 @@ TYPED_TEST(RendererPixelTest, WrapModeRepeat) {
|
| SharedQuadState* shared_state =
|
| CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
|
|
|
| - gfx::Size texture_size(4, 4);
|
| + gfx::Rect texture_rect(4, 4);
|
| SkPMColor colors[4] = {
|
| SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)),
|
| SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)),
|
| @@ -2016,23 +2064,33 @@ TYPED_TEST(RendererPixelTest, WrapModeRepeat) {
|
| };
|
| ResourceProvider::ResourceId resource =
|
| this->resource_provider_->CreateResource(
|
| - texture_size, GL_REPEAT, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| + texture_rect.size(),
|
| + GL_REPEAT,
|
| + ResourceProvider::TextureHintImmutable,
|
| RGBA_8888);
|
| - this->resource_provider_->CopyToResource(
|
| - resource, reinterpret_cast<uint8_t*>(pixels), texture_size);
|
| + this->resource_provider_->SetPixels(
|
| + resource,
|
| + reinterpret_cast<uint8_t*>(pixels),
|
| + texture_rect,
|
| + texture_rect,
|
| + gfx::Vector2d());
|
|
|
| float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
| TextureDrawQuad* texture_quad =
|
| pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
|
| texture_quad->SetNew(
|
| - shared_state, gfx::Rect(this->device_viewport_size_), gfx::Rect(),
|
| - gfx::Rect(this->device_viewport_size_), resource,
|
| + shared_state,
|
| + gfx::Rect(this->device_viewport_size_),
|
| + gfx::Rect(),
|
| + gfx::Rect(this->device_viewport_size_),
|
| + resource,
|
| true, // premultiplied_alpha
|
| gfx::PointF(0.0f, 0.0f), // uv_top_left
|
| gfx::PointF( // uv_bottom_right
|
| - this->device_viewport_size_.width() / texture_size.width(),
|
| - this->device_viewport_size_.height() / texture_size.height()),
|
| - SK_ColorWHITE, vertex_opacity,
|
| + this->device_viewport_size_.width() / texture_rect.width(),
|
| + this->device_viewport_size_.height() / texture_rect.height()),
|
| + SK_ColorWHITE,
|
| + vertex_opacity,
|
| false, // flipped
|
| false); // nearest_neighbor
|
|
|
|
|