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