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

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: adjusting the pixel comparator for linux and mac 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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 48
49 RenderPassList render_passes_in_draw_order_; 49 RenderPassList render_passes_in_draw_order_;
50 }; 50 };
51 51
52 #define EXPECT_PROGRAM_VALID(program_binding) \ 52 #define EXPECT_PROGRAM_VALID(program_binding) \
53 do { \ 53 do { \
54 EXPECT_TRUE((program_binding)->program()); \ 54 EXPECT_TRUE((program_binding)->program()); \
55 EXPECT_TRUE((program_binding)->initialized()); \ 55 EXPECT_TRUE((program_binding)->initialized()); \
56 } while (false) 56 } while (false)
57 57
58 static inline SkXfermode::Mode BlendModeToSkXfermode(BlendMode blend_mode) {
59 switch (blend_mode) {
60 case BlendModeNormal:
61 return SkXfermode::kSrcOver_Mode;
62 case BlendModeOverlay:
63 return SkXfermode::kOverlay_Mode;
64 case BlendModeDarken:
65 return SkXfermode::kDarken_Mode;
66 case BlendModeLighten:
67 return SkXfermode::kLighten_Mode;
68 case BlendModeColorDodge:
69 return SkXfermode::kColorDodge_Mode;
70 case BlendModeColorBurn:
71 return SkXfermode::kColorBurn_Mode;
72 case BlendModeHardLight:
73 return SkXfermode::kHardLight_Mode;
74 case BlendModeSoftLight:
75 return SkXfermode::kSoftLight_Mode;
76 case BlendModeDifference:
77 return SkXfermode::kDifference_Mode;
78 case BlendModeExclusion:
79 return SkXfermode::kExclusion_Mode;
80 case BlendModeMultiply:
81 return SkXfermode::kMultiply_Mode;
82 case BlendModeHue:
83 return SkXfermode::kHue_Mode;
84 case BlendModeSaturation:
85 return SkXfermode::kSaturation_Mode;
86 case BlendModeColor:
87 return SkXfermode::kColor_Mode;
88 case BlendModeLuminosity:
89 return SkXfermode::kLuminosity_Mode;
90 case NumBlendModes:
91 NOTREACHED();
92 }
93 return SkXfermode::kSrcOver_Mode;
94 }
95
58 // Explicitly named to be a friend in GLRenderer for shader access. 96 // Explicitly named to be a friend in GLRenderer for shader access.
59 class GLRendererShaderPixelTest : public GLRendererPixelTest { 97 class GLRendererShaderPixelTest : public GLRendererPixelTest {
60 public: 98 public:
61 void TestShaders() { 99 void TestShaders() {
62 ASSERT_FALSE(renderer()->IsContextLost()); 100 ASSERT_FALSE(renderer()->IsContextLost());
63 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram()); 101 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram());
64 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram()); 102 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram());
65 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram()); 103 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram());
66 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA()); 104 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA());
67 TestShadersWithTexCoordPrecision(TexCoordPrecisionMedium); 105 TestShadersWithTexCoordPrecision(TexCoordPrecisionMedium);
68 TestShadersWithTexCoordPrecision(TexCoordPrecisionHigh); 106 TestShadersWithTexCoordPrecision(TexCoordPrecisionHigh);
69 ASSERT_FALSE(renderer()->IsContextLost()); 107 ASSERT_FALSE(renderer()->IsContextLost());
70 } 108 }
71 109
72 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) { 110 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) {
73 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision)); 111 for (int i = 0; i < NumBlendModes; ++i) {
74 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision)); 112 BlendMode blend_mode = static_cast<BlendMode>(i);
75 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgram(precision)); 113 EXPECT_PROGRAM_VALID(
76 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA(precision)); 114 renderer()->GetRenderPassProgram(precision, blend_mode));
77 EXPECT_PROGRAM_VALID( 115 EXPECT_PROGRAM_VALID(
78 renderer()->GetRenderPassColorMatrixProgram(precision)); 116 renderer()->GetRenderPassProgramAA(precision, blend_mode));
79 EXPECT_PROGRAM_VALID( 117 EXPECT_PROGRAM_VALID(
80 renderer()->GetRenderPassMaskColorMatrixProgramAA(precision)); 118 renderer()->GetRenderPassMaskProgram(precision, blend_mode));
81 EXPECT_PROGRAM_VALID( 119 EXPECT_PROGRAM_VALID(
82 renderer()->GetRenderPassColorMatrixProgramAA(precision)); 120 renderer()->GetRenderPassMaskProgramAA(precision, blend_mode));
83 EXPECT_PROGRAM_VALID( 121 EXPECT_PROGRAM_VALID(
84 renderer()->GetRenderPassMaskColorMatrixProgram(precision)); 122 renderer()->GetRenderPassColorMatrixProgram(precision, blend_mode));
123 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgramAA(
124 precision, blend_mode));
125 EXPECT_PROGRAM_VALID(
126 renderer()->GetRenderPassColorMatrixProgramAA(precision, blend_mode));
127 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgram(
128 precision, blend_mode));
129 }
85 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision)); 130 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision));
86 EXPECT_PROGRAM_VALID( 131 EXPECT_PROGRAM_VALID(
87 renderer()->GetNonPremultipliedTextureProgram(precision)); 132 renderer()->GetNonPremultipliedTextureProgram(precision));
88 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision)); 133 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision));
89 EXPECT_PROGRAM_VALID( 134 EXPECT_PROGRAM_VALID(
90 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision)); 135 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision));
91 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision)); 136 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision));
92 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision)); 137 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision));
93 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision)); 138 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision));
94 // This is unlikely to be ever true in tests due to usage of osmesa. 139 // 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, 242 0,
198 false, 243 false,
199 1, 244 1,
200 false).Pass(); 245 false).Pass();
201 renderer_.reset(new FakeRendererGL(&renderer_client_, 246 renderer_.reset(new FakeRendererGL(&renderer_client_,
202 &settings_, 247 &settings_,
203 output_surface_.get(), 248 output_surface_.get(),
204 resource_provider_.get())); 249 resource_provider_.get()));
205 } 250 }
206 251
207 void TestRenderPassProgram(TexCoordPrecision precision) { 252 void TestRenderPassProgram(TexCoordPrecision precision,
208 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_[precision]); 253 BlendMode blend_mode) {
209 EXPECT_EQ(renderer_->render_pass_program_[precision].program(), 254 EXPECT_PROGRAM_VALID(
255 &renderer_->render_pass_program_[precision][blend_mode]);
256 EXPECT_EQ(renderer_->render_pass_program_[precision][blend_mode].program(),
210 renderer_->program_shadow_); 257 renderer_->program_shadow_);
211 } 258 }
212 259
213 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) { 260 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision,
261 BlendMode blend_mode) {
214 EXPECT_PROGRAM_VALID( 262 EXPECT_PROGRAM_VALID(
215 &renderer_->render_pass_color_matrix_program_[precision]); 263 &renderer_->render_pass_color_matrix_program_[precision][blend_mode]);
216 EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(), 264 EXPECT_EQ(
265 renderer_->render_pass_color_matrix_program_[precision][blend_mode]
266 .program(),
267 renderer_->program_shadow_);
268 }
269
270 void TestRenderPassMaskProgram(TexCoordPrecision precision,
271 BlendMode blend_mode) {
272 EXPECT_PROGRAM_VALID(
273 &renderer_->render_pass_mask_program_[precision][blend_mode]);
274 EXPECT_EQ(
275 renderer_->render_pass_mask_program_[precision][blend_mode].program(),
276 renderer_->program_shadow_);
277 }
278
279 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision,
280 BlendMode blend_mode) {
281 EXPECT_PROGRAM_VALID(
282 &renderer_
283 ->render_pass_mask_color_matrix_program_[precision][blend_mode]);
284 EXPECT_EQ(
285 renderer_->render_pass_mask_color_matrix_program_[precision][blend_mode]
286 .program(),
287 renderer_->program_shadow_);
288 }
289
290 void TestRenderPassProgramAA(TexCoordPrecision precision,
291 BlendMode blend_mode) {
292 EXPECT_PROGRAM_VALID(
293 &renderer_->render_pass_program_aa_[precision][blend_mode]);
294 EXPECT_EQ(
295 renderer_->render_pass_program_aa_[precision][blend_mode].program(),
296 renderer_->program_shadow_);
297 }
298
299 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision,
300 BlendMode blend_mode) {
301 EXPECT_PROGRAM_VALID(
302 &renderer_
303 ->render_pass_color_matrix_program_aa_[precision][blend_mode]);
304 EXPECT_EQ(
305 renderer_->render_pass_color_matrix_program_aa_[precision][blend_mode]
306 .program(),
307 renderer_->program_shadow_);
308 }
309
310 void TestRenderPassMaskProgramAA(TexCoordPrecision precision,
311 BlendMode blend_mode) {
312 EXPECT_PROGRAM_VALID(
313 &renderer_->render_pass_mask_program_aa_[precision][blend_mode]);
314 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision][blend_mode]
315 .program(),
217 renderer_->program_shadow_); 316 renderer_->program_shadow_);
218 } 317 }
219 318
220 void TestRenderPassMaskProgram(TexCoordPrecision precision) { 319 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision,
221 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision]); 320 BlendMode blend_mode) {
222 EXPECT_EQ(renderer_->render_pass_mask_program_[precision].program(), 321 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_color_matrix_program_aa_
223 renderer_->program_shadow_); 322 [precision][blend_mode]);
224 }
225
226 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) {
227 EXPECT_PROGRAM_VALID(
228 &renderer_->render_pass_mask_color_matrix_program_[precision]);
229 EXPECT_EQ( 323 EXPECT_EQ(
230 renderer_->render_pass_mask_color_matrix_program_[precision].program(), 324 renderer_
325 ->render_pass_mask_color_matrix_program_aa_[precision][blend_mode]
326 .program(),
231 renderer_->program_shadow_); 327 renderer_->program_shadow_);
232 } 328 }
233 329
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(),
259 renderer_->program_shadow_);
260 }
261
262 void TestSolidColorProgramAA() { 330 void TestSolidColorProgramAA() {
263 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_); 331 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_);
264 EXPECT_EQ(renderer_->solid_color_program_aa_.program(), 332 EXPECT_EQ(renderer_->solid_color_program_aa_.program(),
265 renderer_->program_shadow_); 333 renderer_->program_shadow_);
266 } 334 }
267 335
268 LayerTreeSettings settings_; 336 LayerTreeSettings settings_;
269 FakeOutputSurfaceClient output_surface_client_; 337 FakeOutputSurfaceClient output_surface_client_;
270 scoped_ptr<FakeOutputSurface> output_surface_; 338 scoped_ptr<FakeOutputSurface> output_surface_;
271 FakeRendererClient renderer_client_; 339 FakeRendererClient renderer_client_;
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 skia::RefPtr<SkColorFilter> color_filter( 1448 skia::RefPtr<SkColorFilter> color_filter(
1381 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 1449 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
1382 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef( 1450 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef(
1383 SkColorFilterImageFilter::Create(color_filter.get(), NULL)); 1451 SkColorFilterImageFilter::Create(color_filter.get(), NULL));
1384 FilterOperations filters; 1452 FilterOperations filters;
1385 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 1453 filters.Append(FilterOperation::CreateReferenceFilter(filter));
1386 1454
1387 gfx::Transform transform_causing_aa; 1455 gfx::Transform transform_causing_aa;
1388 transform_causing_aa.Rotate(20.0); 1456 transform_causing_aa.Rotate(20.0);
1389 1457
1390 // RenderPassProgram 1458 for (int i = 0; i < NumBlendModes; ++i) {
1391 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1459 BlendMode blend_mode = static_cast<BlendMode>(i);
1392 child_pass_id, 1460 SkXfermode::Mode xfer_mode = BlendModeToSkXfermode(blend_mode);
1393 child_rect, 1461 // RenderPassProgram
1394 gfx::Transform()); 1462 render_passes_in_draw_order_.clear();
1395 1463 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1396 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1464 child_pass_id,
1397 root_pass_id, 1465 child_rect,
1398 viewport_rect, 1466 gfx::Transform());
1399 gfx::Transform()); 1467
1400 1468 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1401 AddRenderPassQuad( 1469 root_pass_id,
1402 root_pass, child_pass, 0, FilterOperations(), gfx::Transform()); 1470 viewport_rect,
1403 1471 gfx::Transform());
1404 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1472
1405 renderer_->DrawFrame(&render_passes_in_draw_order_, 1473 AddRenderPassQuad(root_pass,
1406 1.f, 1474 child_pass,
1407 viewport_rect, 1475 0,
1408 viewport_rect, 1476 FilterOperations(),
1409 false); 1477 gfx::Transform(),
1410 TestRenderPassProgram(TexCoordPrecisionMedium); 1478 xfer_mode);
1411 1479
1412 // RenderPassColorMatrixProgram 1480 renderer_->DecideRenderPassAllocationsForFrame(
1413 render_passes_in_draw_order_.clear(); 1481 render_passes_in_draw_order_);
1414 1482 renderer_->DrawFrame(&render_passes_in_draw_order_,
1415 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1483 1.f,
1416 child_pass_id, 1484 viewport_rect,
1417 child_rect, 1485 viewport_rect,
1418 transform_causing_aa); 1486 false);
1419 1487 TestRenderPassProgram(TexCoordPrecisionMedium, blend_mode);
1420 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1488
1421 root_pass_id, 1489 // RenderPassColorMatrixProgram
1422 viewport_rect, 1490 render_passes_in_draw_order_.clear();
1423 gfx::Transform()); 1491
1424 1492 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1425 AddRenderPassQuad(root_pass, child_pass, 0, filters, gfx::Transform()); 1493 child_pass_id,
1426 1494 child_rect,
1427 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1495 transform_causing_aa);
1428 renderer_->DrawFrame(&render_passes_in_draw_order_, 1496
1429 1.f, 1497 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1430 viewport_rect, 1498 root_pass_id,
1431 viewport_rect, 1499 viewport_rect,
1432 false); 1500 gfx::Transform());
1433 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium); 1501
1434 1502 AddRenderPassQuad(
1435 // RenderPassMaskProgram 1503 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode);
1436 render_passes_in_draw_order_.clear(); 1504
1437 1505 renderer_->DecideRenderPassAllocationsForFrame(
1438 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1506 render_passes_in_draw_order_);
1439 child_pass_id, 1507 renderer_->DrawFrame(&render_passes_in_draw_order_,
1440 child_rect, 1508 1.f,
1441 gfx::Transform()); 1509 viewport_rect,
1442 1510 viewport_rect,
1443 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1511 false);
1444 root_pass_id, 1512 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, blend_mode);
1445 viewport_rect, 1513
1446 gfx::Transform()); 1514 // RenderPassMaskProgram
1447 1515 render_passes_in_draw_order_.clear();
1448 AddRenderPassQuad( 1516
1449 root_pass, child_pass, mask, FilterOperations(), gfx::Transform()); 1517 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1450 1518 child_pass_id,
1451 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1519 child_rect,
1452 renderer_->DrawFrame(&render_passes_in_draw_order_, 1520 gfx::Transform());
1453 1.f, 1521
1454 viewport_rect, 1522 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1455 viewport_rect, 1523 root_pass_id,
1456 false); 1524 viewport_rect,
1457 TestRenderPassMaskProgram(TexCoordPrecisionMedium); 1525 gfx::Transform());
1458 1526
1459 // RenderPassMaskColorMatrixProgram 1527 AddRenderPassQuad(root_pass,
1460 render_passes_in_draw_order_.clear(); 1528 child_pass,
1461 1529 mask,
1462 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1530 FilterOperations(),
1463 child_pass_id, 1531 gfx::Transform(),
1464 child_rect, 1532 xfer_mode);
1465 gfx::Transform()); 1533
1466 1534 renderer_->DecideRenderPassAllocationsForFrame(
1467 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1535 render_passes_in_draw_order_);
1468 root_pass_id, 1536 renderer_->DrawFrame(&render_passes_in_draw_order_,
1469 viewport_rect, 1537 1.f,
1470 gfx::Transform()); 1538 viewport_rect,
1471 1539 viewport_rect,
1472 AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform()); 1540 false);
1473 1541 TestRenderPassMaskProgram(TexCoordPrecisionMedium, blend_mode);
1474 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1542
1475 renderer_->DrawFrame(&render_passes_in_draw_order_, 1543 // RenderPassMaskColorMatrixProgram
1476 1.f, 1544 render_passes_in_draw_order_.clear();
1477 viewport_rect, 1545
1478 viewport_rect, 1546 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1479 false); 1547 child_pass_id,
1480 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium); 1548 child_rect,
1481 1549 gfx::Transform());
1482 // RenderPassProgramAA 1550
1483 render_passes_in_draw_order_.clear(); 1551 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1484 1552 root_pass_id,
1485 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1553 viewport_rect,
1486 child_pass_id, 1554 gfx::Transform());
1487 child_rect, 1555
1488 transform_causing_aa); 1556 AddRenderPassQuad(
1489 1557 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode);
1490 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1558
1491 root_pass_id, 1559 renderer_->DecideRenderPassAllocationsForFrame(
1492 viewport_rect, 1560 render_passes_in_draw_order_);
1493 gfx::Transform()); 1561 renderer_->DrawFrame(&render_passes_in_draw_order_,
1494 1562 1.f,
1495 AddRenderPassQuad( 1563 viewport_rect,
1496 root_pass, child_pass, 0, FilterOperations(), transform_causing_aa); 1564 viewport_rect,
1497 1565 false);
1498 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1566 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium, blend_mode);
1499 renderer_->DrawFrame(&render_passes_in_draw_order_, 1567
1500 1.f, 1568 // RenderPassProgramAA
1501 viewport_rect, 1569 render_passes_in_draw_order_.clear();
1502 viewport_rect, 1570
1503 false); 1571 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1504 TestRenderPassProgramAA(TexCoordPrecisionMedium); 1572 child_pass_id,
1505 1573 child_rect,
1506 // RenderPassColorMatrixProgramAA 1574 transform_causing_aa);
1507 render_passes_in_draw_order_.clear(); 1575
1508 1576 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1509 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1577 root_pass_id,
1510 child_pass_id, 1578 viewport_rect,
1511 child_rect, 1579 gfx::Transform());
1512 transform_causing_aa); 1580
1513 1581 AddRenderPassQuad(root_pass,
1514 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1582 child_pass,
1515 root_pass_id, 1583 0,
1516 viewport_rect, 1584 FilterOperations(),
1517 gfx::Transform()); 1585 transform_causing_aa,
1518 1586 xfer_mode);
1519 AddRenderPassQuad(root_pass, child_pass, 0, filters, transform_causing_aa); 1587
1520 1588 renderer_->DecideRenderPassAllocationsForFrame(
1521 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1589 render_passes_in_draw_order_);
1522 renderer_->DrawFrame(&render_passes_in_draw_order_, 1590 renderer_->DrawFrame(&render_passes_in_draw_order_,
1523 1.f, 1591 1.f,
1524 viewport_rect, 1592 viewport_rect,
1525 viewport_rect, 1593 viewport_rect,
1526 false); 1594 false);
1527 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium); 1595 TestRenderPassProgramAA(TexCoordPrecisionMedium, blend_mode);
1528 1596
1529 // RenderPassMaskProgramAA 1597 // RenderPassColorMatrixProgramAA
1530 render_passes_in_draw_order_.clear(); 1598 render_passes_in_draw_order_.clear();
1531 1599
1532 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1600 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1533 child_pass_id, 1601 child_pass_id,
1534 child_rect, 1602 child_rect,
1535 transform_causing_aa); 1603 transform_causing_aa);
1536 1604
1537 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1605 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1538 root_pass_id, 1606 root_pass_id,
1539 viewport_rect, 1607 viewport_rect,
1540 gfx::Transform()); 1608 gfx::Transform());
1541 1609
1542 AddRenderPassQuad( 1610 AddRenderPassQuad(
1543 root_pass, child_pass, mask, FilterOperations(), transform_causing_aa); 1611 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode);
1544 1612
1545 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1613 renderer_->DecideRenderPassAllocationsForFrame(
1546 renderer_->DrawFrame(&render_passes_in_draw_order_, 1614 render_passes_in_draw_order_);
1547 1.f, 1615 renderer_->DrawFrame(&render_passes_in_draw_order_,
1548 viewport_rect, 1616 1.f,
1549 viewport_rect, 1617 viewport_rect,
1550 false); 1618 viewport_rect,
1551 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium); 1619 false);
1552 1620 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium, blend_mode);
1553 // RenderPassMaskColorMatrixProgramAA 1621
1554 render_passes_in_draw_order_.clear(); 1622 // RenderPassMaskProgramAA
1555 1623 render_passes_in_draw_order_.clear();
1556 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1624
1557 child_pass_id, 1625 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1558 child_rect, 1626 child_pass_id,
1559 transform_causing_aa); 1627 child_rect,
1560 1628 transform_causing_aa);
1561 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1629
1562 root_pass_id, 1630 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1563 viewport_rect, 1631 root_pass_id,
1564 transform_causing_aa); 1632 viewport_rect,
1565 1633 gfx::Transform());
1566 AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa); 1634
1567 1635 AddRenderPassQuad(root_pass,
1568 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1636 child_pass,
1569 renderer_->DrawFrame(&render_passes_in_draw_order_, 1637 mask,
1570 1.f, 1638 FilterOperations(),
1571 viewport_rect, 1639 transform_causing_aa,
1572 viewport_rect, 1640 xfer_mode);
1573 false); 1641
1574 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium); 1642 renderer_->DecideRenderPassAllocationsForFrame(
1643 render_passes_in_draw_order_);
1644 renderer_->DrawFrame(&render_passes_in_draw_order_,
1645 1.f,
1646 viewport_rect,
1647 viewport_rect,
1648 false);
1649 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium, blend_mode);
1650
1651 // RenderPassMaskColorMatrixProgramAA
1652 render_passes_in_draw_order_.clear();
1653
1654 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1655 child_pass_id,
1656 child_rect,
1657 transform_causing_aa);
1658
1659 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1660 root_pass_id,
1661 viewport_rect,
1662 transform_causing_aa);
1663
1664 AddRenderPassQuad(
1665 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode);
1666
1667 renderer_->DecideRenderPassAllocationsForFrame(
1668 render_passes_in_draw_order_);
1669 renderer_->DrawFrame(&render_passes_in_draw_order_,
1670 1.f,
1671 viewport_rect,
1672 viewport_rect,
1673 false);
1674 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium, blend_mode);
1675 }
1575 } 1676 }
1576 1677
1577 // At this time, the AA code path cannot be taken if the surface's rect would 1678 // 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. 1679 // project incorrectly by the given transform, because of w<0 clipping.
1579 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { 1680 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
1580 gfx::Rect child_rect(50, 50); 1681 gfx::Rect child_rect(50, 50);
1581 RenderPassId child_pass_id(2, 0); 1682 RenderPassId child_pass_id(2, 0);
1582 TestRenderPass* child_pass; 1683 TestRenderPass* child_pass;
1583 1684
1584 gfx::Rect viewport_rect(1, 1); 1685 gfx::Rect viewport_rect(1, 1);
(...skipping 14 matching lines...) Expand all
1599 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1700 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1600 child_pass_id, 1701 child_pass_id,
1601 child_rect, 1702 child_rect,
1602 transform_preventing_aa); 1703 transform_preventing_aa);
1603 1704
1604 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1705 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1605 root_pass_id, 1706 root_pass_id,
1606 viewport_rect, 1707 viewport_rect,
1607 gfx::Transform()); 1708 gfx::Transform());
1608 1709
1609 AddRenderPassQuad( 1710 AddRenderPassQuad(root_pass,
1610 root_pass, child_pass, 0, FilterOperations(), transform_preventing_aa); 1711 child_pass,
1712 0,
1713 FilterOperations(),
1714 transform_preventing_aa,
1715 SkXfermode::kSrcOver_Mode);
1611 1716
1612 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1717 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
1613 renderer_->DrawFrame(&render_passes_in_draw_order_, 1718 renderer_->DrawFrame(&render_passes_in_draw_order_,
1614 1.f, 1719 1.f,
1615 viewport_rect, 1720 viewport_rect,
1616 viewport_rect, 1721 viewport_rect,
1617 false); 1722 false);
1618 1723
1619 // If use_aa incorrectly ignores clipping, it will use the 1724 // If use_aa incorrectly ignores clipping, it will use the
1620 // RenderPassProgramAA shader instead of the RenderPassProgram. 1725 // RenderPassProgramAA shader instead of the RenderPassProgram.
1621 TestRenderPassProgram(TexCoordPrecisionMedium); 1726 TestRenderPassProgram(TexCoordPrecisionMedium, BlendModeNormal);
1622 } 1727 }
1623 1728
1624 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { 1729 TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
1625 gfx::Rect viewport_rect(1, 1); 1730 gfx::Rect viewport_rect(1, 1);
1626 RenderPassId root_pass_id(1, 0); 1731 RenderPassId root_pass_id(1, 0);
1627 TestRenderPass* root_pass; 1732 TestRenderPass* root_pass;
1628 1733
1629 gfx::Transform pixel_aligned_transform_causing_aa; 1734 gfx::Transform pixel_aligned_transform_causing_aa;
1630 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); 1735 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f);
1631 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); 1736 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(); 1955 base::MessageLoop::current()->Run();
1851 1956
1852 // The sync point should have happened. 1957 // The sync point should have happened.
1853 EXPECT_EQ(1, sync_point_callback_count); 1958 EXPECT_EQ(1, sync_point_callback_count);
1854 EXPECT_EQ(1, other_callback_count); 1959 EXPECT_EQ(1, other_callback_count);
1855 } 1960 }
1856 #endif // OS_ANDROID 1961 #endif // OS_ANDROID
1857 1962
1858 } // namespace 1963 } // namespace
1859 } // namespace cc 1964 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/output/program_binding.h » ('j') | cc/output/shader.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698