OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |