Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3030)

Unified Diff: cc/output/gl_renderer_unittest.cc

Issue 658483003: Implement mix-blend-mode in GL renderer using shaders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing antialiasing issues Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/output/gl_renderer_unittest.cc
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc
index d6f7522a5f64ee084da6fae7e4bcbeac060ae2a2..c64f4a0c0a43f10a610daad6d2a2dbd1e87668e5 100644
--- a/cc/output/gl_renderer_unittest.cc
+++ b/cc/output/gl_renderer_unittest.cc
@@ -70,18 +70,26 @@ 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 (SkXfermode::Mode mode = kDefaultBlendMode; mode <= kLastBlendMode;) {
enne (OOO) 2014/10/16 01:41:25 This is weird to read. I would expect loops to go
rosca 2014/10/16 16:14:56 Done.
+ EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision, mode));
+ EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassMaskProgram(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassMaskProgramAA(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassColorMatrixProgram(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassMaskColorMatrixProgramAA(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassColorMatrixProgramAA(precision, mode));
+ EXPECT_PROGRAM_VALID(
+ renderer()->GetRenderPassMaskColorMatrixProgram(precision, mode));
+ if (mode < kFirstBlendMode)
+ mode = kFirstBlendMode;
+ else
+ mode = static_cast<SkXfermode::Mode>(mode + 1);
+ }
EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision));
EXPECT_PROGRAM_VALID(
renderer()->GetNonPremultipliedTextureProgram(precision));
@@ -204,59 +212,78 @@ class GLRendererShaderTest : public GLRendererTest {
resource_provider_.get()));
}
- void TestRenderPassProgram(TexCoordPrecision precision) {
- EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision]);
- EXPECT_EQ(renderer_->render_pass_program_[precision].program(),
+ void TestRenderPassProgram(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
+ EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_program_[precision][bm].program(),
renderer_->program_shadow_);
}
- void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) {
+ void TestRenderPassColorMatrixProgram(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
EXPECT_PROGRAM_VALID(
- &renderer_->render_pass_color_matrix_program_[precision]);
- EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(),
- renderer_->program_shadow_);
+ &renderer_->render_pass_color_matrix_program_[precision][bm]);
+ EXPECT_EQ(
+ renderer_->render_pass_color_matrix_program_[precision][bm].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(),
+ void TestRenderPassMaskProgram(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
+ EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_mask_program_[precision][bm].program(),
renderer_->program_shadow_);
}
- void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) {
+ void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
EXPECT_PROGRAM_VALID(
- &renderer_->render_pass_mask_color_matrix_program_[precision]);
- EXPECT_EQ(
- renderer_->render_pass_mask_color_matrix_program_[precision].program(),
- renderer_->program_shadow_);
+ &renderer_->render_pass_mask_color_matrix_program_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_[precision][bm]
+ .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(),
+ void TestRenderPassProgramAA(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
+ EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_program_aa_[precision][bm].program(),
renderer_->program_shadow_);
}
- void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) {
+ void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
EXPECT_PROGRAM_VALID(
- &renderer_->render_pass_color_matrix_program_aa_[precision]);
- EXPECT_EQ(
- renderer_->render_pass_color_matrix_program_aa_[precision].program(),
- renderer_->program_shadow_);
+ &renderer_->render_pass_color_matrix_program_aa_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_color_matrix_program_aa_[precision][bm]
+ .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(),
+ void TestRenderPassMaskProgramAA(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
+ EXPECT_PROGRAM_VALID(
+ &renderer_->render_pass_mask_program_aa_[precision][bm]);
+ EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision][bm].program(),
renderer_->program_shadow_);
}
- void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) {
+ void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
+ SkXfermode::Mode mode) {
+ int bm = index_for_blend_mode(mode);
enne (OOO) 2014/10/16 01:41:25 nit: please don't abbreviate bm; make it blend_mod
rosca 2014/10/16 16:14:56 Done.
EXPECT_PROGRAM_VALID(
- &renderer_->render_pass_mask_color_matrix_program_aa_[precision]);
- EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_aa_[precision]
- .program(),
- renderer_->program_shadow_);
+ &renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]);
+ EXPECT_EQ(
+ renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]
+ .program(),
+ renderer_->program_shadow_);
}
void TestSolidColorProgramAA() {
@@ -1387,191 +1414,223 @@ 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 (SkXfermode::Mode mode = kDefaultBlendMode; mode <= kLastBlendMode;) {
+ // 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());
+ root_pass = AddRenderPass(&render_passes_in_draw_order_,
+ root_pass_id,
+ viewport_rect,
+ gfx::Transform());
- AddRenderPassQuad(
- root_pass, child_pass, 0, FilterOperations(), gfx::Transform());
+ AddRenderPassQuad(
+ root_pass, child_pass, 0, FilterOperations(), gfx::Transform(), mode);
- renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
- renderer_->DrawFrame(&render_passes_in_draw_order_,
- 1.f,
- viewport_rect,
- viewport_rect,
- false);
- TestRenderPassProgram(TexCoordPrecisionMedium);
+ renderer_->DecideRenderPassAllocationsForFrame(
+ render_passes_in_draw_order_);
+ renderer_->DrawFrame(&render_passes_in_draw_order_,
+ 1.f,
+ viewport_rect,
+ viewport_rect,
+ false);
+ TestRenderPassProgram(TexCoordPrecisionMedium, mode);
- // RenderPassColorMatrixProgram
- render_passes_in_draw_order_.clear();
+ // RenderPassColorMatrixProgram
+ 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, gfx::Transform());
+ AddRenderPassQuad(
+ root_pass, child_pass, 0, filters, gfx::Transform(), mode);
- renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
- renderer_->DrawFrame(&render_passes_in_draw_order_,
- 1.f,
- viewport_rect,
- viewport_rect,
- false);
- TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium);
+ renderer_->DecideRenderPassAllocationsForFrame(
+ render_passes_in_draw_order_);
+ renderer_->DrawFrame(&render_passes_in_draw_order_,
+ 1.f,
+ viewport_rect,
+ viewport_rect,
+ false);
+ TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, mode);
- // RenderPassMaskProgram
- render_passes_in_draw_order_.clear();
+ // RenderPassMaskProgram
+ render_passes_in_draw_order_.clear();
- child_pass = AddRenderPass(&render_passes_in_draw_order_,
- child_pass_id,
- child_rect,
- gfx::Transform());
+ 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());
+ root_pass = AddRenderPass(&render_passes_in_draw_order_,
+ root_pass_id,
+ viewport_rect,
+ gfx::Transform());
- AddRenderPassQuad(
- root_pass, child_pass, mask, FilterOperations(), gfx::Transform());
+ AddRenderPassQuad(root_pass,
+ child_pass,
+ mask,
+ FilterOperations(),
+ gfx::Transform(),
+ mode);
- renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
- renderer_->DrawFrame(&render_passes_in_draw_order_,
- 1.f,
- viewport_rect,
- viewport_rect,
- false);
- TestRenderPassMaskProgram(TexCoordPrecisionMedium);
+ renderer_->DecideRenderPassAllocationsForFrame(
+ render_passes_in_draw_order_);
+ renderer_->DrawFrame(&render_passes_in_draw_order_,
+ 1.f,
+ viewport_rect,
+ viewport_rect,
+ false);
+ TestRenderPassMaskProgram(TexCoordPrecisionMedium, mode);
- // RenderPassMaskColorMatrixProgram
- render_passes_in_draw_order_.clear();
+ // RenderPassMaskColorMatrixProgram
+ render_passes_in_draw_order_.clear();
- child_pass = AddRenderPass(&render_passes_in_draw_order_,
- child_pass_id,
- child_rect,
- gfx::Transform());
+ 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());
+ root_pass = AddRenderPass(&render_passes_in_draw_order_,
+ root_pass_id,
+ viewport_rect,
+ gfx::Transform());
- AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform());
+ AddRenderPassQuad(
+ root_pass, child_pass, mask, filters, gfx::Transform(), mode);
- 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, 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,
+ 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, 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, 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, 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,
+ 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, 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, 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, mode);
+
+ if (mode < kFirstBlendMode)
+ mode = kFirstBlendMode;
+ else
+ mode = static_cast<SkXfermode::Mode>(mode + 1);
+ }
}
// At this time, the AA code path cannot be taken if the surface's rect would
@@ -1606,8 +1665,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,
+ kDefaultBlendMode);
renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
renderer_->DrawFrame(&render_passes_in_draw_order_,
@@ -1618,7 +1681,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, kDefaultBlendMode);
}
TEST_F(GLRendererShaderTest, DrawSolidColorShader) {

Powered by Google App Engine
This is Rietveld 408576698