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

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: 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;) {
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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 0, 203 0,
196 false, 204 false,
197 1, 205 1,
198 false).Pass(); 206 false).Pass();
199 renderer_.reset(new FakeRendererGL(&renderer_client_, 207 renderer_.reset(new FakeRendererGL(&renderer_client_,
200 &settings_, 208 &settings_,
201 output_surface_.get(), 209 output_surface_.get(),
202 resource_provider_.get())); 210 resource_provider_.get()));
203 } 211 }
204 212
205 void TestRenderPassProgram(TexCoordPrecision precision) { 213 void TestRenderPassProgram(TexCoordPrecision precision,
206 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision]); 214 SkXfermode::Mode mode) {
207 EXPECT_EQ(renderer_->render_pass_program_[precision].program(), 215 int bm = index_for_blend_mode(mode);
216 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision][bm]);
217 EXPECT_EQ(renderer_->render_pass_program_[precision][bm].program(),
208 renderer_->program_shadow_); 218 renderer_->program_shadow_);
209 } 219 }
210 220
211 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) { 221 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision,
222 SkXfermode::Mode mode) {
223 int bm = index_for_blend_mode(mode);
212 EXPECT_PROGRAM_VALID( 224 EXPECT_PROGRAM_VALID(
213 &renderer_->render_pass_color_matrix_program_[precision]); 225 &renderer_->render_pass_color_matrix_program_[precision][bm]);
214 EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(), 226 EXPECT_EQ(
227 renderer_->render_pass_color_matrix_program_[precision][bm].program(),
228 renderer_->program_shadow_);
229 }
230
231 void TestRenderPassMaskProgram(TexCoordPrecision precision,
232 SkXfermode::Mode mode) {
233 int bm = index_for_blend_mode(mode);
234 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision][bm]);
235 EXPECT_EQ(renderer_->render_pass_mask_program_[precision][bm].program(),
215 renderer_->program_shadow_); 236 renderer_->program_shadow_);
216 } 237 }
217 238
218 void TestRenderPassMaskProgram(TexCoordPrecision precision) { 239 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
219 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision]); 240 SkXfermode::Mode mode) {
220 EXPECT_EQ(renderer_->render_pass_mask_program_[precision].program(), 241 int bm = index_for_blend_mode(mode);
221 renderer_->program_shadow_);
222 }
223
224 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) {
225 EXPECT_PROGRAM_VALID( 242 EXPECT_PROGRAM_VALID(
226 &renderer_->render_pass_mask_color_matrix_program_[precision]); 243 &renderer_->render_pass_mask_color_matrix_program_[precision][bm]);
227 EXPECT_EQ( 244 EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_[precision][bm]
228 renderer_->render_pass_mask_color_matrix_program_[precision].program(),
229 renderer_->program_shadow_);
230 }
231
232 void TestRenderPassProgramAA(TexCoordPrecision precision) {
233 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision]);
234 EXPECT_EQ(renderer_->render_pass_program_aa_[precision].program(),
235 renderer_->program_shadow_);
236 }
237
238 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) {
239 EXPECT_PROGRAM_VALID(
240 &renderer_->render_pass_color_matrix_program_aa_[precision]);
241 EXPECT_EQ(
242 renderer_->render_pass_color_matrix_program_aa_[precision].program(),
243 renderer_->program_shadow_);
244 }
245
246 void TestRenderPassMaskProgramAA(TexCoordPrecision precision) {
247 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_aa_[precision]);
248 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision].program(),
249 renderer_->program_shadow_);
250 }
251
252 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) {
253 EXPECT_PROGRAM_VALID(
254 &renderer_->render_pass_mask_color_matrix_program_aa_[precision]);
255 EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_aa_[precision]
256 .program(), 245 .program(),
257 renderer_->program_shadow_); 246 renderer_->program_shadow_);
258 } 247 }
259 248
249 void TestRenderPassProgramAA(TexCoordPrecision precision,
250 SkXfermode::Mode mode) {
251 int bm = index_for_blend_mode(mode);
252 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision][bm]);
253 EXPECT_EQ(renderer_->render_pass_program_aa_[precision][bm].program(),
254 renderer_->program_shadow_);
255 }
256
257 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
258 SkXfermode::Mode mode) {
259 int bm = index_for_blend_mode(mode);
260 EXPECT_PROGRAM_VALID(
261 &renderer_->render_pass_color_matrix_program_aa_[precision][bm]);
262 EXPECT_EQ(renderer_->render_pass_color_matrix_program_aa_[precision][bm]
263 .program(),
264 renderer_->program_shadow_);
265 }
266
267 void TestRenderPassMaskProgramAA(TexCoordPrecision precision,
268 SkXfermode::Mode mode) {
269 int bm = index_for_blend_mode(mode);
270 EXPECT_PROGRAM_VALID(
271 &renderer_->render_pass_mask_program_aa_[precision][bm]);
272 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision][bm].program(),
273 renderer_->program_shadow_);
274 }
275
276 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
277 SkXfermode::Mode mode) {
278 int bm = index_for_blend_mode(mode);
279 EXPECT_PROGRAM_VALID(
280 &renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]);
281 EXPECT_EQ(
282 renderer_->render_pass_mask_color_matrix_program_aa_[precision][bm]
283 .program(),
284 renderer_->program_shadow_);
285 }
286
260 void TestSolidColorProgramAA() { 287 void TestSolidColorProgramAA() {
261 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_); 288 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_);
262 EXPECT_EQ(renderer_->solid_color_program_aa_.program(), 289 EXPECT_EQ(renderer_->solid_color_program_aa_.program(),
263 renderer_->program_shadow_); 290 renderer_->program_shadow_);
264 } 291 }
265 292
266 LayerTreeSettings settings_; 293 LayerTreeSettings settings_;
267 FakeOutputSurfaceClient output_surface_client_; 294 FakeOutputSurfaceClient output_surface_client_;
268 scoped_ptr<FakeOutputSurface> output_surface_; 295 scoped_ptr<FakeOutputSurface> output_surface_;
269 FakeRendererClient renderer_client_; 296 FakeRendererClient renderer_client_;
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 skia::RefPtr<SkColorFilter> color_filter( 1394 skia::RefPtr<SkColorFilter> color_filter(
1368 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 1395 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
1369 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef( 1396 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef(
1370 SkColorFilterImageFilter::Create(color_filter.get(), NULL)); 1397 SkColorFilterImageFilter::Create(color_filter.get(), NULL));
1371 FilterOperations filters; 1398 FilterOperations filters;
1372 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 1399 filters.Append(FilterOperation::CreateReferenceFilter(filter));
1373 1400
1374 gfx::Transform transform_causing_aa; 1401 gfx::Transform transform_causing_aa;
1375 transform_causing_aa.Rotate(20.0); 1402 transform_causing_aa.Rotate(20.0);
1376 1403
1377 // RenderPassProgram 1404 for (SkXfermode::Mode mode = kDefaultBlendMode; mode <= kLastBlendMode;) {
1378 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1405 // RenderPassProgram
1379 child_pass_id, 1406 render_passes_in_draw_order_.clear();
1380 child_rect, 1407 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1381 gfx::Transform()); 1408 child_pass_id,
1382 1409 child_rect,
1383 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1410 gfx::Transform());
1384 root_pass_id, 1411
1385 viewport_rect, 1412 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1386 gfx::Transform()); 1413 root_pass_id,
1387 1414 viewport_rect,
1388 AddRenderPassQuad( 1415 gfx::Transform());
1389 root_pass, child_pass, 0, FilterOperations(), gfx::Transform()); 1416
1390 1417 AddRenderPassQuad(
1391 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1418 root_pass, child_pass, 0, FilterOperations(), gfx::Transform(), mode);
1392 renderer_->DrawFrame(&render_passes_in_draw_order_, 1419
1393 1.f, 1420 renderer_->DecideRenderPassAllocationsForFrame(
1394 viewport_rect, 1421 render_passes_in_draw_order_);
1395 viewport_rect, 1422 renderer_->DrawFrame(&render_passes_in_draw_order_,
1396 false); 1423 1.f,
1397 TestRenderPassProgram(TexCoordPrecisionMedium); 1424 viewport_rect,
1398 1425 viewport_rect,
1399 // RenderPassColorMatrixProgram 1426 false);
1400 render_passes_in_draw_order_.clear(); 1427 TestRenderPassProgram(TexCoordPrecisionMedium, mode);
1401 1428
1402 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1429 // RenderPassColorMatrixProgram
1403 child_pass_id, 1430 render_passes_in_draw_order_.clear();
1404 child_rect, 1431
1405 transform_causing_aa); 1432 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1406 1433 child_pass_id,
1407 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1434 child_rect,
1408 root_pass_id, 1435 transform_causing_aa);
1409 viewport_rect, 1436
1410 gfx::Transform()); 1437 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1411 1438 root_pass_id,
1412 AddRenderPassQuad(root_pass, child_pass, 0, filters, gfx::Transform()); 1439 viewport_rect,
1413 1440 gfx::Transform());
1414 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1441
1415 renderer_->DrawFrame(&render_passes_in_draw_order_, 1442 AddRenderPassQuad(
1416 1.f, 1443 root_pass, child_pass, 0, filters, gfx::Transform(), mode);
1417 viewport_rect, 1444
1418 viewport_rect, 1445 renderer_->DecideRenderPassAllocationsForFrame(
1419 false); 1446 render_passes_in_draw_order_);
1420 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium); 1447 renderer_->DrawFrame(&render_passes_in_draw_order_,
1421 1448 1.f,
1422 // RenderPassMaskProgram 1449 viewport_rect,
1423 render_passes_in_draw_order_.clear(); 1450 viewport_rect,
1424 1451 false);
1425 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1452 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, mode);
1426 child_pass_id, 1453
1427 child_rect, 1454 // RenderPassMaskProgram
1428 gfx::Transform()); 1455 render_passes_in_draw_order_.clear();
1429 1456
1430 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1457 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1431 root_pass_id, 1458 child_pass_id,
1432 viewport_rect, 1459 child_rect,
1433 gfx::Transform()); 1460 gfx::Transform());
1434 1461
1435 AddRenderPassQuad( 1462 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1436 root_pass, child_pass, mask, FilterOperations(), gfx::Transform()); 1463 root_pass_id,
1437 1464 viewport_rect,
1438 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1465 gfx::Transform());
1439 renderer_->DrawFrame(&render_passes_in_draw_order_, 1466
1440 1.f, 1467 AddRenderPassQuad(root_pass,
1441 viewport_rect, 1468 child_pass,
1442 viewport_rect, 1469 mask,
1443 false); 1470 FilterOperations(),
1444 TestRenderPassMaskProgram(TexCoordPrecisionMedium); 1471 gfx::Transform(),
1445 1472 mode);
1446 // RenderPassMaskColorMatrixProgram 1473
1447 render_passes_in_draw_order_.clear(); 1474 renderer_->DecideRenderPassAllocationsForFrame(
1448 1475 render_passes_in_draw_order_);
1449 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1476 renderer_->DrawFrame(&render_passes_in_draw_order_,
1450 child_pass_id, 1477 1.f,
1451 child_rect, 1478 viewport_rect,
1452 gfx::Transform()); 1479 viewport_rect,
1453 1480 false);
1454 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1481 TestRenderPassMaskProgram(TexCoordPrecisionMedium, mode);
1455 root_pass_id, 1482
1456 viewport_rect, 1483 // RenderPassMaskColorMatrixProgram
1457 gfx::Transform()); 1484 render_passes_in_draw_order_.clear();
1458 1485
1459 AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform()); 1486 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1460 1487 child_pass_id,
1461 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1488 child_rect,
1462 renderer_->DrawFrame(&render_passes_in_draw_order_, 1489 gfx::Transform());
1463 1.f, 1490
1464 viewport_rect, 1491 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1465 viewport_rect, 1492 root_pass_id,
1466 false); 1493 viewport_rect,
1467 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium); 1494 gfx::Transform());
1468 1495
1469 // RenderPassProgramAA 1496 AddRenderPassQuad(
1470 render_passes_in_draw_order_.clear(); 1497 root_pass, child_pass, mask, filters, gfx::Transform(), mode);
1471 1498
1472 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1499 renderer_->DecideRenderPassAllocationsForFrame(
1473 child_pass_id, 1500 render_passes_in_draw_order_);
1474 child_rect, 1501 renderer_->DrawFrame(&render_passes_in_draw_order_,
1475 transform_causing_aa); 1502 1.f,
1476 1503 viewport_rect,
1477 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1504 viewport_rect,
1478 root_pass_id, 1505 false);
1479 viewport_rect, 1506 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium, mode);
1480 gfx::Transform()); 1507
1481 1508 // RenderPassProgramAA
1482 AddRenderPassQuad( 1509 render_passes_in_draw_order_.clear();
1483 root_pass, child_pass, 0, FilterOperations(), transform_causing_aa); 1510
1484 1511 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1485 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1512 child_pass_id,
1486 renderer_->DrawFrame(&render_passes_in_draw_order_, 1513 child_rect,
1487 1.f, 1514 transform_causing_aa);
1488 viewport_rect, 1515
1489 viewport_rect, 1516 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1490 false); 1517 root_pass_id,
1491 TestRenderPassProgramAA(TexCoordPrecisionMedium); 1518 viewport_rect,
1492 1519 gfx::Transform());
1493 // RenderPassColorMatrixProgramAA 1520
1494 render_passes_in_draw_order_.clear(); 1521 AddRenderPassQuad(root_pass,
1495 1522 child_pass,
1496 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1523 0,
1497 child_pass_id, 1524 FilterOperations(),
1498 child_rect, 1525 transform_causing_aa,
1499 transform_causing_aa); 1526 mode);
1500 1527
1501 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1528 renderer_->DecideRenderPassAllocationsForFrame(
1502 root_pass_id, 1529 render_passes_in_draw_order_);
1503 viewport_rect, 1530 renderer_->DrawFrame(&render_passes_in_draw_order_,
1504 gfx::Transform()); 1531 1.f,
1505 1532 viewport_rect,
1506 AddRenderPassQuad(root_pass, child_pass, 0, filters, transform_causing_aa); 1533 viewport_rect,
1507 1534 false);
1508 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1535 TestRenderPassProgramAA(TexCoordPrecisionMedium, mode);
1509 renderer_->DrawFrame(&render_passes_in_draw_order_, 1536
1510 1.f, 1537 // RenderPassColorMatrixProgramAA
1511 viewport_rect, 1538 render_passes_in_draw_order_.clear();
1512 viewport_rect, 1539
1513 false); 1540 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1514 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium); 1541 child_pass_id,
1515 1542 child_rect,
1516 // RenderPassMaskProgramAA 1543 transform_causing_aa);
1517 render_passes_in_draw_order_.clear(); 1544
1518 1545 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1519 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1546 root_pass_id,
1520 child_pass_id, 1547 viewport_rect,
1521 child_rect, 1548 gfx::Transform());
1522 transform_causing_aa); 1549
1523 1550 AddRenderPassQuad(
1524 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1551 root_pass, child_pass, 0, filters, transform_causing_aa, mode);
1525 root_pass_id, 1552
1526 viewport_rect, 1553 renderer_->DecideRenderPassAllocationsForFrame(
1527 gfx::Transform()); 1554 render_passes_in_draw_order_);
1528 1555 renderer_->DrawFrame(&render_passes_in_draw_order_,
1529 AddRenderPassQuad( 1556 1.f,
1530 root_pass, child_pass, mask, FilterOperations(), transform_causing_aa); 1557 viewport_rect,
1531 1558 viewport_rect,
1532 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1559 false);
1533 renderer_->DrawFrame(&render_passes_in_draw_order_, 1560 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium, mode);
1534 1.f, 1561
1535 viewport_rect, 1562 // RenderPassMaskProgramAA
1536 viewport_rect, 1563 render_passes_in_draw_order_.clear();
1537 false); 1564
1538 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium); 1565 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1539 1566 child_pass_id,
1540 // RenderPassMaskColorMatrixProgramAA 1567 child_rect,
1541 render_passes_in_draw_order_.clear(); 1568 transform_causing_aa);
1542 1569
1543 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1570 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1544 child_pass_id, 1571 root_pass_id,
1545 child_rect, 1572 viewport_rect,
1546 transform_causing_aa); 1573 gfx::Transform());
1547 1574
1548 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1575 AddRenderPassQuad(root_pass,
1549 root_pass_id, 1576 child_pass,
1550 viewport_rect, 1577 mask,
1551 transform_causing_aa); 1578 FilterOperations(),
1552 1579 transform_causing_aa,
1553 AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa); 1580 mode);
1554 1581
1555 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1582 renderer_->DecideRenderPassAllocationsForFrame(
1556 renderer_->DrawFrame(&render_passes_in_draw_order_, 1583 render_passes_in_draw_order_);
1557 1.f, 1584 renderer_->DrawFrame(&render_passes_in_draw_order_,
1558 viewport_rect, 1585 1.f,
1559 viewport_rect, 1586 viewport_rect,
1560 false); 1587 viewport_rect,
1561 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium); 1588 false);
1589 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium, mode);
1590
1591 // RenderPassMaskColorMatrixProgramAA
1592 render_passes_in_draw_order_.clear();
1593
1594 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1595 child_pass_id,
1596 child_rect,
1597 transform_causing_aa);
1598
1599 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1600 root_pass_id,
1601 viewport_rect,
1602 transform_causing_aa);
1603
1604 AddRenderPassQuad(
1605 root_pass, child_pass, mask, filters, transform_causing_aa, mode);
1606
1607 renderer_->DecideRenderPassAllocationsForFrame(
1608 render_passes_in_draw_order_);
1609 renderer_->DrawFrame(&render_passes_in_draw_order_,
1610 1.f,
1611 viewport_rect,
1612 viewport_rect,
1613 false);
1614 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium, mode);
1615
1616 if (mode < kFirstBlendMode)
1617 mode = kFirstBlendMode;
1618 else
1619 mode = static_cast<SkXfermode::Mode>(mode + 1);
1620 }
1562 } 1621 }
1563 1622
1564 // At this time, the AA code path cannot be taken if the surface's rect would 1623 // At this time, the AA code path cannot be taken if the surface's rect would
1565 // project incorrectly by the given transform, because of w<0 clipping. 1624 // project incorrectly by the given transform, because of w<0 clipping.
1566 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { 1625 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
1567 gfx::Rect child_rect(50, 50); 1626 gfx::Rect child_rect(50, 50);
1568 RenderPassId child_pass_id(2, 0); 1627 RenderPassId child_pass_id(2, 0);
1569 TestRenderPass* child_pass; 1628 TestRenderPass* child_pass;
1570 1629
1571 gfx::Rect viewport_rect(1, 1); 1630 gfx::Rect viewport_rect(1, 1);
(...skipping 14 matching lines...) Expand all
1586 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1645 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1587 child_pass_id, 1646 child_pass_id,
1588 child_rect, 1647 child_rect,
1589 transform_preventing_aa); 1648 transform_preventing_aa);
1590 1649
1591 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1650 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1592 root_pass_id, 1651 root_pass_id,
1593 viewport_rect, 1652 viewport_rect,
1594 gfx::Transform()); 1653 gfx::Transform());
1595 1654
1596 AddRenderPassQuad( 1655 AddRenderPassQuad(root_pass,
1597 root_pass, child_pass, 0, FilterOperations(), transform_preventing_aa); 1656 child_pass,
1657 0,
1658 FilterOperations(),
1659 transform_preventing_aa,
1660 kDefaultBlendMode);
1598 1661
1599 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1662 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
1600 renderer_->DrawFrame(&render_passes_in_draw_order_, 1663 renderer_->DrawFrame(&render_passes_in_draw_order_,
1601 1.f, 1664 1.f,
1602 viewport_rect, 1665 viewport_rect,
1603 viewport_rect, 1666 viewport_rect,
1604 false); 1667 false);
1605 1668
1606 // If use_aa incorrectly ignores clipping, it will use the 1669 // If use_aa incorrectly ignores clipping, it will use the
1607 // RenderPassProgramAA shader instead of the RenderPassProgram. 1670 // RenderPassProgramAA shader instead of the RenderPassProgram.
1608 TestRenderPassProgram(TexCoordPrecisionMedium); 1671 TestRenderPassProgram(TexCoordPrecisionMedium, kDefaultBlendMode);
1609 } 1672 }
1610 1673
1611 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { 1674 TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
1612 gfx::Rect viewport_rect(1, 1); 1675 gfx::Rect viewport_rect(1, 1);
1613 RenderPassId root_pass_id(1, 0); 1676 RenderPassId root_pass_id(1, 0);
1614 TestRenderPass* root_pass; 1677 TestRenderPass* root_pass;
1615 1678
1616 gfx::Transform pixel_aligned_transform_causing_aa; 1679 gfx::Transform pixel_aligned_transform_causing_aa;
1617 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); 1680 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f);
1618 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); 1681 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f);
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 base::MessageLoop::current()->Run(); 1899 base::MessageLoop::current()->Run();
1837 1900
1838 // The sync point should have happened. 1901 // The sync point should have happened.
1839 EXPECT_EQ(1, sync_point_callback_count); 1902 EXPECT_EQ(1, sync_point_callback_count);
1840 EXPECT_EQ(1, other_callback_count); 1903 EXPECT_EQ(1, other_callback_count);
1841 } 1904 }
1842 #endif // OS_ANDROID 1905 #endif // OS_ANDROID
1843 1906
1844 } // namespace 1907 } // namespace
1845 } // namespace cc 1908 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698