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

Side by Side 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 unified diff | Download patch
OLDNEW
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 "cc/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/output/compositor_frame_metadata.h" 10 #include "cc/output/compositor_frame_metadata.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram()); 63 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram());
64 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram()); 64 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram());
65 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram()); 65 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram());
66 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA()); 66 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA());
67 TestShadersWithTexCoordPrecision(TexCoordPrecisionMedium); 67 TestShadersWithTexCoordPrecision(TexCoordPrecisionMedium);
68 TestShadersWithTexCoordPrecision(TexCoordPrecisionHigh); 68 TestShadersWithTexCoordPrecision(TexCoordPrecisionHigh);
69 ASSERT_FALSE(renderer()->IsContextLost()); 69 ASSERT_FALSE(renderer()->IsContextLost());
70 } 70 }
71 71
72 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) { 72 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) {
73 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision)); 73 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.
74 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision)); 74 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision, mode));
75 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgram(precision)); 75 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision, mode));
76 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA(precision)); 76 EXPECT_PROGRAM_VALID(
77 EXPECT_PROGRAM_VALID( 77 renderer()->GetRenderPassMaskProgram(precision, mode));
78 renderer()->GetRenderPassColorMatrixProgram(precision)); 78 EXPECT_PROGRAM_VALID(
79 EXPECT_PROGRAM_VALID( 79 renderer()->GetRenderPassMaskProgramAA(precision, mode));
80 renderer()->GetRenderPassMaskColorMatrixProgramAA(precision)); 80 EXPECT_PROGRAM_VALID(
81 EXPECT_PROGRAM_VALID( 81 renderer()->GetRenderPassColorMatrixProgram(precision, mode));
82 renderer()->GetRenderPassColorMatrixProgramAA(precision)); 82 EXPECT_PROGRAM_VALID(
83 EXPECT_PROGRAM_VALID( 83 renderer()->GetRenderPassMaskColorMatrixProgramAA(precision, mode));
84 renderer()->GetRenderPassMaskColorMatrixProgram(precision)); 84 EXPECT_PROGRAM_VALID(
85 renderer()->GetRenderPassColorMatrixProgramAA(precision, mode));
86 EXPECT_PROGRAM_VALID(
87 renderer()->GetRenderPassMaskColorMatrixProgram(precision, mode));
88 if (mode < kFirstBlendMode)
89 mode = kFirstBlendMode;
90 else
91 mode = static_cast<SkXfermode::Mode>(mode + 1);
92 }
85 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision)); 93 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision));
86 EXPECT_PROGRAM_VALID( 94 EXPECT_PROGRAM_VALID(
87 renderer()->GetNonPremultipliedTextureProgram(precision)); 95 renderer()->GetNonPremultipliedTextureProgram(precision));
88 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision)); 96 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision));
89 EXPECT_PROGRAM_VALID( 97 EXPECT_PROGRAM_VALID(
90 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision)); 98 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision));
91 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision)); 99 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision));
92 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision)); 100 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision));
93 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision)); 101 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision));
94 // This is unlikely to be ever true in tests due to usage of osmesa. 102 // This is unlikely to be ever true in tests due to usage of osmesa.
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 0, 205 0,
198 false, 206 false,
199 1, 207 1,
200 false).Pass(); 208 false).Pass();
201 renderer_.reset(new FakeRendererGL(&renderer_client_, 209 renderer_.reset(new FakeRendererGL(&renderer_client_,
202 &settings_, 210 &settings_,
203 output_surface_.get(), 211 output_surface_.get(),
204 resource_provider_.get())); 212 resource_provider_.get()));
205 } 213 }
206 214
207 void TestRenderPassProgram(TexCoordPrecision precision) { 215 void TestRenderPassProgram(TexCoordPrecision precision,
208 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision]); 216 SkXfermode::Mode mode) {
209 EXPECT_EQ(renderer_->render_pass_program_[precision].program(), 217 int bm = index_for_blend_mode(mode);
218 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision][bm]);
219 EXPECT_EQ(renderer_->render_pass_program_[precision][bm].program(),
210 renderer_->program_shadow_); 220 renderer_->program_shadow_);
211 } 221 }
212 222
213 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) { 223 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision,
224 SkXfermode::Mode mode) {
225 int bm = index_for_blend_mode(mode);
214 EXPECT_PROGRAM_VALID( 226 EXPECT_PROGRAM_VALID(
215 &renderer_->render_pass_color_matrix_program_[precision]); 227 &renderer_->render_pass_color_matrix_program_[precision][bm]);
216 EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(), 228 EXPECT_EQ(
229 renderer_->render_pass_color_matrix_program_[precision][bm].program(),
230 renderer_->program_shadow_);
231 }
232
233 void TestRenderPassMaskProgram(TexCoordPrecision precision,
234 SkXfermode::Mode mode) {
235 int bm = index_for_blend_mode(mode);
236 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision][bm]);
237 EXPECT_EQ(renderer_->render_pass_mask_program_[precision][bm].program(),
217 renderer_->program_shadow_); 238 renderer_->program_shadow_);
218 } 239 }
219 240
220 void TestRenderPassMaskProgram(TexCoordPrecision precision) { 241 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
221 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision]); 242 SkXfermode::Mode mode) {
222 EXPECT_EQ(renderer_->render_pass_mask_program_[precision].program(), 243 int bm = index_for_blend_mode(mode);
223 renderer_->program_shadow_);
224 }
225
226 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) {
227 EXPECT_PROGRAM_VALID( 244 EXPECT_PROGRAM_VALID(
228 &renderer_->render_pass_mask_color_matrix_program_[precision]); 245 &renderer_->render_pass_mask_color_matrix_program_[precision][bm]);
229 EXPECT_EQ( 246 EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_[precision][bm]
230 renderer_->render_pass_mask_color_matrix_program_[precision].program(),
231 renderer_->program_shadow_);
232 }
233
234 void TestRenderPassProgramAA(TexCoordPrecision precision) {
235 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision]);
236 EXPECT_EQ(renderer_->render_pass_program_aa_[precision].program(),
237 renderer_->program_shadow_);
238 }
239
240 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) {
241 EXPECT_PROGRAM_VALID(
242 &renderer_->render_pass_color_matrix_program_aa_[precision]);
243 EXPECT_EQ(
244 renderer_->render_pass_color_matrix_program_aa_[precision].program(),
245 renderer_->program_shadow_);
246 }
247
248 void TestRenderPassMaskProgramAA(TexCoordPrecision precision) {
249 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_aa_[precision]);
250 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision].program(),
251 renderer_->program_shadow_);
252 }
253
254 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) {
255 EXPECT_PROGRAM_VALID(
256 &renderer_->render_pass_mask_color_matrix_program_aa_[precision]);
257 EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_aa_[precision]
258 .program(), 247 .program(),
259 renderer_->program_shadow_); 248 renderer_->program_shadow_);
260 } 249 }
261 250
251 void TestRenderPassProgramAA(TexCoordPrecision precision,
252 SkXfermode::Mode mode) {
253 int bm = index_for_blend_mode(mode);
254 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision][bm]);
255 EXPECT_EQ(renderer_->render_pass_program_aa_[precision][bm].program(),
256 renderer_->program_shadow_);
257 }
258
259 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
260 SkXfermode::Mode mode) {
261 int bm = index_for_blend_mode(mode);
262 EXPECT_PROGRAM_VALID(
263 &renderer_->render_pass_color_matrix_program_aa_[precision][bm]);
264 EXPECT_EQ(renderer_->render_pass_color_matrix_program_aa_[precision][bm]
265 .program(),
266 renderer_->program_shadow_);
267 }
268
269 void TestRenderPassMaskProgramAA(TexCoordPrecision precision,
270 SkXfermode::Mode mode) {
271 int bm = index_for_blend_mode(mode);
272 EXPECT_PROGRAM_VALID(
273 &renderer_->render_pass_mask_program_aa_[precision][bm]);
274 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision][bm].program(),
275 renderer_->program_shadow_);
276 }
277
278 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
279 SkXfermode::Mode mode) {
280 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.
281 EXPECT_PROGRAM_VALID(
282 &renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]);
283 EXPECT_EQ(
284 renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]
285 .program(),
286 renderer_->program_shadow_);
287 }
288
262 void TestSolidColorProgramAA() { 289 void TestSolidColorProgramAA() {
263 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_); 290 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_);
264 EXPECT_EQ(renderer_->solid_color_program_aa_.program(), 291 EXPECT_EQ(renderer_->solid_color_program_aa_.program(),
265 renderer_->program_shadow_); 292 renderer_->program_shadow_);
266 } 293 }
267 294
268 LayerTreeSettings settings_; 295 LayerTreeSettings settings_;
269 FakeOutputSurfaceClient output_surface_client_; 296 FakeOutputSurfaceClient output_surface_client_;
270 scoped_ptr<FakeOutputSurface> output_surface_; 297 scoped_ptr<FakeOutputSurface> output_surface_;
271 FakeRendererClient renderer_client_; 298 FakeRendererClient renderer_client_;
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 skia::RefPtr<SkColorFilter> color_filter( 1407 skia::RefPtr<SkColorFilter> color_filter(
1381 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 1408 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
1382 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef( 1409 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef(
1383 SkColorFilterImageFilter::Create(color_filter.get(), NULL)); 1410 SkColorFilterImageFilter::Create(color_filter.get(), NULL));
1384 FilterOperations filters; 1411 FilterOperations filters;
1385 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 1412 filters.Append(FilterOperation::CreateReferenceFilter(filter));
1386 1413
1387 gfx::Transform transform_causing_aa; 1414 gfx::Transform transform_causing_aa;
1388 transform_causing_aa.Rotate(20.0); 1415 transform_causing_aa.Rotate(20.0);
1389 1416
1390 // RenderPassProgram 1417 for (SkXfermode::Mode mode = kDefaultBlendMode; mode <= kLastBlendMode;) {
1391 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1418 // RenderPassProgram
1392 child_pass_id, 1419 render_passes_in_draw_order_.clear();
1393 child_rect, 1420 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1394 gfx::Transform()); 1421 child_pass_id,
1395 1422 child_rect,
1396 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1423 gfx::Transform());
1397 root_pass_id, 1424
1398 viewport_rect, 1425 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1399 gfx::Transform()); 1426 root_pass_id,
1400 1427 viewport_rect,
1401 AddRenderPassQuad( 1428 gfx::Transform());
1402 root_pass, child_pass, 0, FilterOperations(), gfx::Transform()); 1429
1403 1430 AddRenderPassQuad(
1404 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1431 root_pass, child_pass, 0, FilterOperations(), gfx::Transform(), mode);
1405 renderer_->DrawFrame(&render_passes_in_draw_order_, 1432
1406 1.f, 1433 renderer_->DecideRenderPassAllocationsForFrame(
1407 viewport_rect, 1434 render_passes_in_draw_order_);
1408 viewport_rect, 1435 renderer_->DrawFrame(&render_passes_in_draw_order_,
1409 false); 1436 1.f,
1410 TestRenderPassProgram(TexCoordPrecisionMedium); 1437 viewport_rect,
1411 1438 viewport_rect,
1412 // RenderPassColorMatrixProgram 1439 false);
1413 render_passes_in_draw_order_.clear(); 1440 TestRenderPassProgram(TexCoordPrecisionMedium, mode);
1414 1441
1415 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1442 // RenderPassColorMatrixProgram
1416 child_pass_id, 1443 render_passes_in_draw_order_.clear();
1417 child_rect, 1444
1418 transform_causing_aa); 1445 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1419 1446 child_pass_id,
1420 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1447 child_rect,
1421 root_pass_id, 1448 transform_causing_aa);
1422 viewport_rect, 1449
1423 gfx::Transform()); 1450 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1424 1451 root_pass_id,
1425 AddRenderPassQuad(root_pass, child_pass, 0, filters, gfx::Transform()); 1452 viewport_rect,
1426 1453 gfx::Transform());
1427 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1454
1428 renderer_->DrawFrame(&render_passes_in_draw_order_, 1455 AddRenderPassQuad(
1429 1.f, 1456 root_pass, child_pass, 0, filters, gfx::Transform(), mode);
1430 viewport_rect, 1457
1431 viewport_rect, 1458 renderer_->DecideRenderPassAllocationsForFrame(
1432 false); 1459 render_passes_in_draw_order_);
1433 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium); 1460 renderer_->DrawFrame(&render_passes_in_draw_order_,
1434 1461 1.f,
1435 // RenderPassMaskProgram 1462 viewport_rect,
1436 render_passes_in_draw_order_.clear(); 1463 viewport_rect,
1437 1464 false);
1438 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1465 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, mode);
1439 child_pass_id, 1466
1440 child_rect, 1467 // RenderPassMaskProgram
1441 gfx::Transform()); 1468 render_passes_in_draw_order_.clear();
1442 1469
1443 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1470 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1444 root_pass_id, 1471 child_pass_id,
1445 viewport_rect, 1472 child_rect,
1446 gfx::Transform()); 1473 gfx::Transform());
1447 1474
1448 AddRenderPassQuad( 1475 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1449 root_pass, child_pass, mask, FilterOperations(), gfx::Transform()); 1476 root_pass_id,
1450 1477 viewport_rect,
1451 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1478 gfx::Transform());
1452 renderer_->DrawFrame(&render_passes_in_draw_order_, 1479
1453 1.f, 1480 AddRenderPassQuad(root_pass,
1454 viewport_rect, 1481 child_pass,
1455 viewport_rect, 1482 mask,
1456 false); 1483 FilterOperations(),
1457 TestRenderPassMaskProgram(TexCoordPrecisionMedium); 1484 gfx::Transform(),
1458 1485 mode);
1459 // RenderPassMaskColorMatrixProgram 1486
1460 render_passes_in_draw_order_.clear(); 1487 renderer_->DecideRenderPassAllocationsForFrame(
1461 1488 render_passes_in_draw_order_);
1462 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1489 renderer_->DrawFrame(&render_passes_in_draw_order_,
1463 child_pass_id, 1490 1.f,
1464 child_rect, 1491 viewport_rect,
1465 gfx::Transform()); 1492 viewport_rect,
1466 1493 false);
1467 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1494 TestRenderPassMaskProgram(TexCoordPrecisionMedium, mode);
1468 root_pass_id, 1495
1469 viewport_rect, 1496 // RenderPassMaskColorMatrixProgram
1470 gfx::Transform()); 1497 render_passes_in_draw_order_.clear();
1471 1498
1472 AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform()); 1499 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1473 1500 child_pass_id,
1474 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1501 child_rect,
1475 renderer_->DrawFrame(&render_passes_in_draw_order_, 1502 gfx::Transform());
1476 1.f, 1503
1477 viewport_rect, 1504 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1478 viewport_rect, 1505 root_pass_id,
1479 false); 1506 viewport_rect,
1480 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium); 1507 gfx::Transform());
1481 1508
1482 // RenderPassProgramAA 1509 AddRenderPassQuad(
1483 render_passes_in_draw_order_.clear(); 1510 root_pass, child_pass, mask, filters, gfx::Transform(), mode);
1484 1511
1485 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1512 renderer_->DecideRenderPassAllocationsForFrame(
1486 child_pass_id, 1513 render_passes_in_draw_order_);
1487 child_rect, 1514 renderer_->DrawFrame(&render_passes_in_draw_order_,
1488 transform_causing_aa); 1515 1.f,
1489 1516 viewport_rect,
1490 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1517 viewport_rect,
1491 root_pass_id, 1518 false);
1492 viewport_rect, 1519 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium, mode);
1493 gfx::Transform()); 1520
1494 1521 // RenderPassProgramAA
1495 AddRenderPassQuad( 1522 render_passes_in_draw_order_.clear();
1496 root_pass, child_pass, 0, FilterOperations(), transform_causing_aa); 1523
1497 1524 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1498 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1525 child_pass_id,
1499 renderer_->DrawFrame(&render_passes_in_draw_order_, 1526 child_rect,
1500 1.f, 1527 transform_causing_aa);
1501 viewport_rect, 1528
1502 viewport_rect, 1529 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1503 false); 1530 root_pass_id,
1504 TestRenderPassProgramAA(TexCoordPrecisionMedium); 1531 viewport_rect,
1505 1532 gfx::Transform());
1506 // RenderPassColorMatrixProgramAA 1533
1507 render_passes_in_draw_order_.clear(); 1534 AddRenderPassQuad(root_pass,
1508 1535 child_pass,
1509 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1536 0,
1510 child_pass_id, 1537 FilterOperations(),
1511 child_rect, 1538 transform_causing_aa,
1512 transform_causing_aa); 1539 mode);
1513 1540
1514 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1541 renderer_->DecideRenderPassAllocationsForFrame(
1515 root_pass_id, 1542 render_passes_in_draw_order_);
1516 viewport_rect, 1543 renderer_->DrawFrame(&render_passes_in_draw_order_,
1517 gfx::Transform()); 1544 1.f,
1518 1545 viewport_rect,
1519 AddRenderPassQuad(root_pass, child_pass, 0, filters, transform_causing_aa); 1546 viewport_rect,
1520 1547 false);
1521 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1548 TestRenderPassProgramAA(TexCoordPrecisionMedium, mode);
1522 renderer_->DrawFrame(&render_passes_in_draw_order_, 1549
1523 1.f, 1550 // RenderPassColorMatrixProgramAA
1524 viewport_rect, 1551 render_passes_in_draw_order_.clear();
1525 viewport_rect, 1552
1526 false); 1553 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1527 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium); 1554 child_pass_id,
1528 1555 child_rect,
1529 // RenderPassMaskProgramAA 1556 transform_causing_aa);
1530 render_passes_in_draw_order_.clear(); 1557
1531 1558 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1532 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1559 root_pass_id,
1533 child_pass_id, 1560 viewport_rect,
1534 child_rect, 1561 gfx::Transform());
1535 transform_causing_aa); 1562
1536 1563 AddRenderPassQuad(
1537 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1564 root_pass, child_pass, 0, filters, transform_causing_aa, mode);
1538 root_pass_id, 1565
1539 viewport_rect, 1566 renderer_->DecideRenderPassAllocationsForFrame(
1540 gfx::Transform()); 1567 render_passes_in_draw_order_);
1541 1568 renderer_->DrawFrame(&render_passes_in_draw_order_,
1542 AddRenderPassQuad( 1569 1.f,
1543 root_pass, child_pass, mask, FilterOperations(), transform_causing_aa); 1570 viewport_rect,
1544 1571 viewport_rect,
1545 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1572 false);
1546 renderer_->DrawFrame(&render_passes_in_draw_order_, 1573 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium, mode);
1547 1.f, 1574
1548 viewport_rect, 1575 // RenderPassMaskProgramAA
1549 viewport_rect, 1576 render_passes_in_draw_order_.clear();
1550 false); 1577
1551 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium); 1578 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1552 1579 child_pass_id,
1553 // RenderPassMaskColorMatrixProgramAA 1580 child_rect,
1554 render_passes_in_draw_order_.clear(); 1581 transform_causing_aa);
1555 1582
1556 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1583 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1557 child_pass_id, 1584 root_pass_id,
1558 child_rect, 1585 viewport_rect,
1559 transform_causing_aa); 1586 gfx::Transform());
1560 1587
1561 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1588 AddRenderPassQuad(root_pass,
1562 root_pass_id, 1589 child_pass,
1563 viewport_rect, 1590 mask,
1564 transform_causing_aa); 1591 FilterOperations(),
1565 1592 transform_causing_aa,
1566 AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa); 1593 mode);
1567 1594
1568 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1595 renderer_->DecideRenderPassAllocationsForFrame(
1569 renderer_->DrawFrame(&render_passes_in_draw_order_, 1596 render_passes_in_draw_order_);
1570 1.f, 1597 renderer_->DrawFrame(&render_passes_in_draw_order_,
1571 viewport_rect, 1598 1.f,
1572 viewport_rect, 1599 viewport_rect,
1573 false); 1600 viewport_rect,
1574 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium); 1601 false);
1602 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium, mode);
1603
1604 // RenderPassMaskColorMatrixProgramAA
1605 render_passes_in_draw_order_.clear();
1606
1607 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1608 child_pass_id,
1609 child_rect,
1610 transform_causing_aa);
1611
1612 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1613 root_pass_id,
1614 viewport_rect,
1615 transform_causing_aa);
1616
1617 AddRenderPassQuad(
1618 root_pass, child_pass, mask, filters, transform_causing_aa, mode);
1619
1620 renderer_->DecideRenderPassAllocationsForFrame(
1621 render_passes_in_draw_order_);
1622 renderer_->DrawFrame(&render_passes_in_draw_order_,
1623 1.f,
1624 viewport_rect,
1625 viewport_rect,
1626 false);
1627 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium, mode);
1628
1629 if (mode < kFirstBlendMode)
1630 mode = kFirstBlendMode;
1631 else
1632 mode = static_cast<SkXfermode::Mode>(mode + 1);
1633 }
1575 } 1634 }
1576 1635
1577 // At this time, the AA code path cannot be taken if the surface's rect would 1636 // At this time, the AA code path cannot be taken if the surface's rect would
1578 // project incorrectly by the given transform, because of w<0 clipping. 1637 // project incorrectly by the given transform, because of w<0 clipping.
1579 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { 1638 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
1580 gfx::Rect child_rect(50, 50); 1639 gfx::Rect child_rect(50, 50);
1581 RenderPassId child_pass_id(2, 0); 1640 RenderPassId child_pass_id(2, 0);
1582 TestRenderPass* child_pass; 1641 TestRenderPass* child_pass;
1583 1642
1584 gfx::Rect viewport_rect(1, 1); 1643 gfx::Rect viewport_rect(1, 1);
(...skipping 14 matching lines...) Expand all
1599 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1658 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1600 child_pass_id, 1659 child_pass_id,
1601 child_rect, 1660 child_rect,
1602 transform_preventing_aa); 1661 transform_preventing_aa);
1603 1662
1604 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1663 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1605 root_pass_id, 1664 root_pass_id,
1606 viewport_rect, 1665 viewport_rect,
1607 gfx::Transform()); 1666 gfx::Transform());
1608 1667
1609 AddRenderPassQuad( 1668 AddRenderPassQuad(root_pass,
1610 root_pass, child_pass, 0, FilterOperations(), transform_preventing_aa); 1669 child_pass,
1670 0,
1671 FilterOperations(),
1672 transform_preventing_aa,
1673 kDefaultBlendMode);
1611 1674
1612 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1675 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
1613 renderer_->DrawFrame(&render_passes_in_draw_order_, 1676 renderer_->DrawFrame(&render_passes_in_draw_order_,
1614 1.f, 1677 1.f,
1615 viewport_rect, 1678 viewport_rect,
1616 viewport_rect, 1679 viewport_rect,
1617 false); 1680 false);
1618 1681
1619 // If use_aa incorrectly ignores clipping, it will use the 1682 // If use_aa incorrectly ignores clipping, it will use the
1620 // RenderPassProgramAA shader instead of the RenderPassProgram. 1683 // RenderPassProgramAA shader instead of the RenderPassProgram.
1621 TestRenderPassProgram(TexCoordPrecisionMedium); 1684 TestRenderPassProgram(TexCoordPrecisionMedium, kDefaultBlendMode);
1622 } 1685 }
1623 1686
1624 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { 1687 TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
1625 gfx::Rect viewport_rect(1, 1); 1688 gfx::Rect viewport_rect(1, 1);
1626 RenderPassId root_pass_id(1, 0); 1689 RenderPassId root_pass_id(1, 0);
1627 TestRenderPass* root_pass; 1690 TestRenderPass* root_pass;
1628 1691
1629 gfx::Transform pixel_aligned_transform_causing_aa; 1692 gfx::Transform pixel_aligned_transform_causing_aa;
1630 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); 1693 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f);
1631 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); 1694 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1850 base::MessageLoop::current()->Run(); 1913 base::MessageLoop::current()->Run();
1851 1914
1852 // The sync point should have happened. 1915 // The sync point should have happened.
1853 EXPECT_EQ(1, sync_point_callback_count); 1916 EXPECT_EQ(1, sync_point_callback_count);
1854 EXPECT_EQ(1, other_callback_count); 1917 EXPECT_EQ(1, other_callback_count);
1855 } 1918 }
1856 #endif // OS_ANDROID 1919 #endif // OS_ANDROID
1857 1920
1858 } // namespace 1921 } // namespace
1859 } // namespace cc 1922 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698