| Index: cc/output/gl_renderer_unittest.cc
|
| diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
|
| index 42e4b5ea264553b2a15860c14114c98025139d5e..8de90c469acb10b78f78909d0b1a8ace4e45d843 100644
|
| --- a/cc/output/gl_renderer_unittest.cc
|
| +++ b/cc/output/gl_renderer_unittest.cc
|
| @@ -55,6 +55,44 @@ class GLRendererTest : public testing::Test {
|
| EXPECT_TRUE((program_binding)->initialized()); \
|
| } while (false)
|
|
|
| +static inline SkXfermode::Mode BlendModeToSkXfermode(BlendMode blend_mode) {
|
| + switch (blend_mode) {
|
| + case BlendModeNormal:
|
| + return SkXfermode::kSrcOver_Mode;
|
| + case BlendModeOverlay:
|
| + return SkXfermode::kOverlay_Mode;
|
| + case BlendModeDarken:
|
| + return SkXfermode::kDarken_Mode;
|
| + case BlendModeLighten:
|
| + return SkXfermode::kLighten_Mode;
|
| + case BlendModeColorDodge:
|
| + return SkXfermode::kColorDodge_Mode;
|
| + case BlendModeColorBurn:
|
| + return SkXfermode::kColorBurn_Mode;
|
| + case BlendModeHardLight:
|
| + return SkXfermode::kHardLight_Mode;
|
| + case BlendModeSoftLight:
|
| + return SkXfermode::kSoftLight_Mode;
|
| + case BlendModeDifference:
|
| + return SkXfermode::kDifference_Mode;
|
| + case BlendModeExclusion:
|
| + return SkXfermode::kExclusion_Mode;
|
| + case BlendModeMultiply:
|
| + return SkXfermode::kMultiply_Mode;
|
| + case BlendModeHue:
|
| + return SkXfermode::kHue_Mode;
|
| + case BlendModeSaturation:
|
| + return SkXfermode::kSaturation_Mode;
|
| + case BlendModeColor:
|
| + return SkXfermode::kColor_Mode;
|
| + case BlendModeLuminosity:
|
| + return SkXfermode::kLuminosity_Mode;
|
| + case NumBlendModes:
|
| + NOTREACHED();
|
| + }
|
| + return SkXfermode::kSrcOver_Mode;
|
| +}
|
| +
|
| // Explicitly named to be a friend in GLRenderer for shader access.
|
| class GLRendererShaderPixelTest : public GLRendererPixelTest {
|
| public:
|
| @@ -70,18 +108,25 @@ class GLRendererShaderPixelTest : public GLRendererPixelTest {
|
| }
|
|
|
| void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) {
|
| - EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision));
|
| - EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision));
|
| - EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgram(precision));
|
| - EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA(precision));
|
| - EXPECT_PROGRAM_VALID(
|
| - renderer()->GetRenderPassColorMatrixProgram(precision));
|
| - EXPECT_PROGRAM_VALID(
|
| - renderer()->GetRenderPassMaskColorMatrixProgramAA(precision));
|
| - EXPECT_PROGRAM_VALID(
|
| - renderer()->GetRenderPassColorMatrixProgramAA(precision));
|
| - EXPECT_PROGRAM_VALID(
|
| - renderer()->GetRenderPassMaskColorMatrixProgram(precision));
|
| + for (int i = 0; i < NumBlendModes; ++i) {
|
| + BlendMode blend_mode = static_cast<BlendMode>(i);
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassProgram(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassProgramAA(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassMaskProgram(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassMaskProgramAA(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassColorMatrixProgram(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgramAA(
|
| + precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(
|
| + renderer()->GetRenderPassColorMatrixProgramAA(precision, blend_mode));
|
| + EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgram(
|
| + precision, blend_mode));
|
| + }
|
| EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision));
|
| EXPECT_PROGRAM_VALID(
|
| renderer()->GetNonPremultipliedTextureProgram(precision));
|
| @@ -159,8 +204,7 @@ class GLRendererWithDefaultHarnessTest : public GLRendererTest {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false).Pass();
|
| + 1).Pass();
|
| renderer_ = make_scoped_ptr(new FakeRendererGL(&renderer_client_,
|
| &settings_,
|
| output_surface_.get(),
|
| @@ -196,69 +240,91 @@ class GLRendererShaderTest : public GLRendererTest {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false).Pass();
|
| + 1).Pass();
|
| renderer_.reset(new FakeRendererGL(&renderer_client_,
|
| &settings_,
|
| output_surface_.get(),
|
| resource_provider_.get()));
|
| }
|
|
|
| - void TestRenderPassProgram(TexCoordPrecision precision) {
|
| - EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_program_[precision].program(),
|
| - renderer_->program_shadow_);
|
| - }
|
| -
|
| - void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) {
|
| + void TestRenderPassProgram(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| EXPECT_PROGRAM_VALID(
|
| - &renderer_->render_pass_color_matrix_program_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(),
|
| + &renderer_->render_pass_program_[precision][blend_mode]);
|
| + EXPECT_EQ(renderer_->render_pass_program_[precision][blend_mode].program(),
|
| renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassMaskProgram(TexCoordPrecision precision) {
|
| - EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_mask_program_[precision].program(),
|
| - renderer_->program_shadow_);
|
| + void TestRenderPassColorMatrixProgram(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| + EXPECT_PROGRAM_VALID(
|
| + &renderer_->render_pass_color_matrix_program_[precision][blend_mode]);
|
| + EXPECT_EQ(
|
| + renderer_->render_pass_color_matrix_program_[precision][blend_mode]
|
| + .program(),
|
| + renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) {
|
| + void TestRenderPassMaskProgram(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| EXPECT_PROGRAM_VALID(
|
| - &renderer_->render_pass_mask_color_matrix_program_[precision]);
|
| + &renderer_->render_pass_mask_program_[precision][blend_mode]);
|
| EXPECT_EQ(
|
| - renderer_->render_pass_mask_color_matrix_program_[precision].program(),
|
| + renderer_->render_pass_mask_program_[precision][blend_mode].program(),
|
| renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassProgramAA(TexCoordPrecision precision) {
|
| - EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_program_aa_[precision].program(),
|
| - renderer_->program_shadow_);
|
| + void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| + EXPECT_PROGRAM_VALID(
|
| + &renderer_
|
| + ->render_pass_mask_color_matrix_program_[precision][blend_mode]);
|
| + EXPECT_EQ(
|
| + renderer_->render_pass_mask_color_matrix_program_[precision][blend_mode]
|
| + .program(),
|
| + renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) {
|
| + void TestRenderPassProgramAA(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| EXPECT_PROGRAM_VALID(
|
| - &renderer_->render_pass_color_matrix_program_aa_[precision]);
|
| + &renderer_->render_pass_program_aa_[precision][blend_mode]);
|
| EXPECT_EQ(
|
| - renderer_->render_pass_color_matrix_program_aa_[precision].program(),
|
| + renderer_->render_pass_program_aa_[precision][blend_mode].program(),
|
| renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassMaskProgramAA(TexCoordPrecision precision) {
|
| - EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_aa_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision].program(),
|
| - renderer_->program_shadow_);
|
| + void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| + EXPECT_PROGRAM_VALID(
|
| + &renderer_
|
| + ->render_pass_color_matrix_program_aa_[precision][blend_mode]);
|
| + EXPECT_EQ(
|
| + renderer_->render_pass_color_matrix_program_aa_[precision][blend_mode]
|
| + .program(),
|
| + renderer_->program_shadow_);
|
| }
|
|
|
| - void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) {
|
| + void TestRenderPassMaskProgramAA(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| EXPECT_PROGRAM_VALID(
|
| - &renderer_->render_pass_mask_color_matrix_program_aa_[precision]);
|
| - EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_aa_[precision]
|
| + &renderer_->render_pass_mask_program_aa_[precision][blend_mode]);
|
| + EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision][blend_mode]
|
| .program(),
|
| renderer_->program_shadow_);
|
| }
|
|
|
| + void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
|
| + BlendMode blend_mode) {
|
| + EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_color_matrix_program_aa_
|
| + [precision][blend_mode]);
|
| + EXPECT_EQ(
|
| + renderer_
|
| + ->render_pass_mask_color_matrix_program_aa_[precision][blend_mode]
|
| + .program(),
|
| + renderer_->program_shadow_);
|
| + }
|
| +
|
| void TestSolidColorProgramAA() {
|
| EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_);
|
| EXPECT_EQ(renderer_->solid_color_program_aa_.program(),
|
| @@ -470,8 +536,7 @@ TEST_F(GLRendererTest, InitializationDoesNotMakeSynchronousCalls) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -511,8 +576,7 @@ TEST_F(GLRendererTest, InitializationWithQuicklyLostContextDoesNotAssert) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -551,8 +615,7 @@ TEST_F(GLRendererTest, OpaqueBackground) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -604,8 +667,7 @@ TEST_F(GLRendererTest, TransparentBackground) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -650,8 +712,7 @@ TEST_F(GLRendererTest, OffscreenOutputSurface) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -736,8 +797,7 @@ TEST_F(GLRendererTest, VisibilityChangeIsLastCall) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -808,8 +868,7 @@ TEST_F(GLRendererTest, ActiveTextureState) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -900,8 +959,7 @@ TEST_F(GLRendererTest, ShouldClearRootRenderPass) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| settings.should_clear_root_render_pass = false;
|
| @@ -999,8 +1057,7 @@ TEST_F(GLRendererTest, ScissorTestWhenClearing) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -1098,8 +1155,7 @@ TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| settings.partial_swap_enabled = true;
|
| @@ -1288,8 +1344,7 @@ TEST_F(GLRendererTest, ScissorAndViewportWithinNonreshapableSurface) {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false));
|
| + 1));
|
|
|
| LayerTreeSettings settings;
|
| FakeRendererClient renderer_client;
|
| @@ -1361,191 +1416,224 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) {
|
| gfx::Transform transform_causing_aa;
|
| transform_causing_aa.Rotate(20.0);
|
|
|
| - // RenderPassProgram
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - gfx::Transform());
|
| + for (int i = 0; i < NumBlendModes; ++i) {
|
| + BlendMode blend_mode = static_cast<BlendMode>(i);
|
| + SkXfermode::Mode xfer_mode = BlendModeToSkXfermode(blend_mode);
|
| + // RenderPassProgram
|
| + render_passes_in_draw_order_.clear();
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + gfx::Transform());
|
| +
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
| +
|
| + AddRenderPassQuad(root_pass,
|
| + child_pass,
|
| + 0,
|
| + FilterOperations(),
|
| + gfx::Transform(),
|
| + xfer_mode);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassProgram(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - AddRenderPassQuad(
|
| - root_pass, child_pass, 0, FilterOperations(), gfx::Transform());
|
| + // RenderPassColorMatrixProgram
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassProgram(TexCoordPrecisionMedium);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + transform_causing_aa);
|
|
|
| - // RenderPassColorMatrixProgram
|
| - render_passes_in_draw_order_.clear();
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - transform_causing_aa);
|
| + AddRenderPassQuad(
|
| + root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - AddRenderPassQuad(root_pass, child_pass, 0, filters, gfx::Transform());
|
| + // RenderPassMaskProgram
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + gfx::Transform());
|
|
|
| - // RenderPassMaskProgram
|
| - render_passes_in_draw_order_.clear();
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - gfx::Transform());
|
| + AddRenderPassQuad(root_pass,
|
| + child_pass,
|
| + mask,
|
| + FilterOperations(),
|
| + gfx::Transform(),
|
| + xfer_mode);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassMaskProgram(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - AddRenderPassQuad(
|
| - root_pass, child_pass, mask, FilterOperations(), gfx::Transform());
|
| + // RenderPassMaskColorMatrixProgram
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassMaskProgram(TexCoordPrecisionMedium);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + gfx::Transform());
|
|
|
| - // RenderPassMaskColorMatrixProgram
|
| - render_passes_in_draw_order_.clear();
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - gfx::Transform());
|
| + AddRenderPassQuad(
|
| + root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| -
|
| - AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform());
|
| -
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium);
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - // RenderPassProgramAA
|
| - render_passes_in_draw_order_.clear();
|
| + // RenderPassProgramAA
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - transform_causing_aa);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + transform_causing_aa);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - AddRenderPassQuad(
|
| - root_pass, child_pass, 0, FilterOperations(), transform_causing_aa);
|
| + AddRenderPassQuad(root_pass,
|
| + child_pass,
|
| + 0,
|
| + FilterOperations(),
|
| + transform_causing_aa,
|
| + xfer_mode);
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassProgramAA(TexCoordPrecisionMedium);
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassProgramAA(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - // RenderPassColorMatrixProgramAA
|
| - render_passes_in_draw_order_.clear();
|
| + // RenderPassColorMatrixProgramAA
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - transform_causing_aa);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + transform_causing_aa);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - AddRenderPassQuad(root_pass, child_pass, 0, filters, transform_causing_aa);
|
| + AddRenderPassQuad(
|
| + root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode);
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium);
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - // RenderPassMaskProgramAA
|
| - render_passes_in_draw_order_.clear();
|
| + // RenderPassMaskProgramAA
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - transform_causing_aa);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + transform_causing_aa);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - gfx::Transform());
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + gfx::Transform());
|
|
|
| - AddRenderPassQuad(
|
| - root_pass, child_pass, mask, FilterOperations(), transform_causing_aa);
|
| + AddRenderPassQuad(root_pass,
|
| + child_pass,
|
| + mask,
|
| + FilterOperations(),
|
| + transform_causing_aa,
|
| + xfer_mode);
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassMaskProgramAA(TexCoordPrecisionMedium);
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassMaskProgramAA(TexCoordPrecisionMedium, blend_mode);
|
|
|
| - // RenderPassMaskColorMatrixProgramAA
|
| - render_passes_in_draw_order_.clear();
|
| + // RenderPassMaskColorMatrixProgramAA
|
| + render_passes_in_draw_order_.clear();
|
|
|
| - child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - child_pass_id,
|
| - child_rect,
|
| - transform_causing_aa);
|
| + child_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + child_pass_id,
|
| + child_rect,
|
| + transform_causing_aa);
|
|
|
| - root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| - root_pass_id,
|
| - viewport_rect,
|
| - transform_causing_aa);
|
| + root_pass = AddRenderPass(&render_passes_in_draw_order_,
|
| + root_pass_id,
|
| + viewport_rect,
|
| + transform_causing_aa);
|
|
|
| - AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa);
|
| + AddRenderPassQuad(
|
| + root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode);
|
|
|
| - renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| - renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| - 1.f,
|
| - viewport_rect,
|
| - viewport_rect,
|
| - false);
|
| - TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium);
|
| + renderer_->DecideRenderPassAllocationsForFrame(
|
| + render_passes_in_draw_order_);
|
| + renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| + 1.f,
|
| + viewport_rect,
|
| + viewport_rect,
|
| + false);
|
| + TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium, blend_mode);
|
| + }
|
| }
|
|
|
| // At this time, the AA code path cannot be taken if the surface's rect would
|
| @@ -1580,8 +1668,12 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
|
| viewport_rect,
|
| gfx::Transform());
|
|
|
| - AddRenderPassQuad(
|
| - root_pass, child_pass, 0, FilterOperations(), transform_preventing_aa);
|
| + AddRenderPassQuad(root_pass,
|
| + child_pass,
|
| + 0,
|
| + FilterOperations(),
|
| + transform_preventing_aa,
|
| + SkXfermode::kSrcOver_Mode);
|
|
|
| renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
|
| renderer_->DrawFrame(&render_passes_in_draw_order_,
|
| @@ -1592,7 +1684,7 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
|
|
|
| // If use_aa incorrectly ignores clipping, it will use the
|
| // RenderPassProgramAA shader instead of the RenderPassProgram.
|
| - TestRenderPassProgram(TexCoordPrecisionMedium);
|
| + TestRenderPassProgram(TexCoordPrecisionMedium, BlendModeNormal);
|
| }
|
|
|
| TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
|
| @@ -1668,8 +1760,7 @@ class MockOutputSurfaceTest : public GLRendererTest {
|
| NULL,
|
| 0,
|
| false,
|
| - 1,
|
| - false).Pass();
|
| + 1).Pass();
|
|
|
| renderer_.reset(new FakeRendererGL(&renderer_client_,
|
| &settings_,
|
|
|