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_, |