| 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 |