| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgram(precision)); |
| 74 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision)); | 74 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassProgramAA(precision)); |
| 75 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgram(precision)); | |
| 76 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA(precision)); | |
| 77 EXPECT_PROGRAM_VALID( | 75 EXPECT_PROGRAM_VALID( |
| 78 renderer()->GetRenderPassColorMatrixProgram(precision)); | 76 renderer()->GetRenderPassColorMatrixProgram(precision)); |
| 79 EXPECT_PROGRAM_VALID( | 77 EXPECT_PROGRAM_VALID( |
| 80 renderer()->GetRenderPassMaskColorMatrixProgramAA(precision)); | |
| 81 EXPECT_PROGRAM_VALID( | |
| 82 renderer()->GetRenderPassColorMatrixProgramAA(precision)); | 78 renderer()->GetRenderPassColorMatrixProgramAA(precision)); |
| 83 EXPECT_PROGRAM_VALID( | |
| 84 renderer()->GetRenderPassMaskColorMatrixProgram(precision)); | |
| 85 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision)); | 79 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision)); |
| 86 EXPECT_PROGRAM_VALID( | 80 EXPECT_PROGRAM_VALID( |
| 87 renderer()->GetNonPremultipliedTextureProgram(precision)); | 81 renderer()->GetNonPremultipliedTextureProgram(precision)); |
| 88 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision)); | 82 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision)); |
| 89 EXPECT_PROGRAM_VALID( | 83 EXPECT_PROGRAM_VALID( |
| 90 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision)); | 84 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision)); |
| 91 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision)); | 85 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision)); |
| 92 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision)); | 86 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision)); |
| 93 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision)); | 87 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision)); |
| 94 // This is unlikely to be ever true in tests due to usage of osmesa. | 88 // This is unlikely to be ever true in tests due to usage of osmesa. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 106 void TestShadersWithSamplerType(TexCoordPrecision precision, | 100 void TestShadersWithSamplerType(TexCoordPrecision precision, |
| 107 SamplerType sampler) { | 101 SamplerType sampler) { |
| 108 EXPECT_PROGRAM_VALID(renderer()->GetTileProgram(precision, sampler)); | 102 EXPECT_PROGRAM_VALID(renderer()->GetTileProgram(precision, sampler)); |
| 109 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramOpaque(precision, sampler)); | 103 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramOpaque(precision, sampler)); |
| 110 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramAA(precision, sampler)); | 104 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramAA(precision, sampler)); |
| 111 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramSwizzle(precision, sampler)); | 105 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramSwizzle(precision, sampler)); |
| 112 EXPECT_PROGRAM_VALID( | 106 EXPECT_PROGRAM_VALID( |
| 113 renderer()->GetTileProgramSwizzleOpaque(precision, sampler)); | 107 renderer()->GetTileProgramSwizzleOpaque(precision, sampler)); |
| 114 EXPECT_PROGRAM_VALID( | 108 EXPECT_PROGRAM_VALID( |
| 115 renderer()->GetTileProgramSwizzleAA(precision, sampler)); | 109 renderer()->GetTileProgramSwizzleAA(precision, sampler)); |
| 110 EXPECT_PROGRAM_VALID( |
| 111 renderer()->GetRenderPassMaskProgram(precision, sampler)); |
| 112 EXPECT_PROGRAM_VALID( |
| 113 renderer()->GetRenderPassMaskProgramAA(precision, sampler)); |
| 114 EXPECT_PROGRAM_VALID( |
| 115 renderer()->GetRenderPassMaskColorMatrixProgramAA(precision, sampler)); |
| 116 EXPECT_PROGRAM_VALID( |
| 117 renderer()->GetRenderPassMaskColorMatrixProgram(precision, sampler)); |
| 116 } | 118 } |
| 117 }; | 119 }; |
| 118 | 120 |
| 119 namespace { | 121 namespace { |
| 120 | 122 |
| 121 #if !defined(OS_ANDROID) | 123 #if !defined(OS_ANDROID) |
| 122 TEST_F(GLRendererShaderPixelTest, AllShadersCompile) { TestShaders(); } | 124 TEST_F(GLRendererShaderPixelTest, AllShadersCompile) { TestShaders(); } |
| 123 #endif | 125 #endif |
| 124 | 126 |
| 125 class FakeRendererGL : public GLRenderer { | 127 class FakeRendererGL : public GLRenderer { |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 renderer_->program_shadow_); | 212 renderer_->program_shadow_); |
| 211 } | 213 } |
| 212 | 214 |
| 213 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) { | 215 void TestRenderPassColorMatrixProgram(TexCoordPrecision precision) { |
| 214 EXPECT_PROGRAM_VALID( | 216 EXPECT_PROGRAM_VALID( |
| 215 &renderer_->render_pass_color_matrix_program_[precision]); | 217 &renderer_->render_pass_color_matrix_program_[precision]); |
| 216 EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(), | 218 EXPECT_EQ(renderer_->render_pass_color_matrix_program_[precision].program(), |
| 217 renderer_->program_shadow_); | 219 renderer_->program_shadow_); |
| 218 } | 220 } |
| 219 | 221 |
| 220 void TestRenderPassMaskProgram(TexCoordPrecision precision) { | 222 void TestRenderPassMaskProgram(TexCoordPrecision precision, |
| 221 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_[precision]); | 223 SamplerType sampler) { |
| 222 EXPECT_EQ(renderer_->render_pass_mask_program_[precision].program(), | |
| 223 renderer_->program_shadow_); | |
| 224 } | |
| 225 | |
| 226 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision) { | |
| 227 EXPECT_PROGRAM_VALID( | 224 EXPECT_PROGRAM_VALID( |
| 228 &renderer_->render_pass_mask_color_matrix_program_[precision]); | 225 &renderer_->render_pass_mask_program_[precision][sampler]); |
| 229 EXPECT_EQ( | 226 EXPECT_EQ( |
| 230 renderer_->render_pass_mask_color_matrix_program_[precision].program(), | 227 renderer_->render_pass_mask_program_[precision][sampler].program(), |
| 231 renderer_->program_shadow_); | 228 renderer_->program_shadow_); |
| 232 } | 229 } |
| 233 | 230 |
| 231 void TestRenderPassMaskColorMatrixProgram(TexCoordPrecision precision, |
| 232 SamplerType sampler) { |
| 233 EXPECT_PROGRAM_VALID( |
| 234 &renderer_->render_pass_mask_color_matrix_program_[precision][sampler]); |
| 235 EXPECT_EQ( |
| 236 renderer_->render_pass_mask_color_matrix_program_[precision][sampler] |
| 237 .program(), |
| 238 renderer_->program_shadow_); |
| 239 } |
| 240 |
| 234 void TestRenderPassProgramAA(TexCoordPrecision precision) { | 241 void TestRenderPassProgramAA(TexCoordPrecision precision) { |
| 235 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision]); | 242 EXPECT_PROGRAM_VALID(&renderer_->render_pass_program_aa_[precision]); |
| 236 EXPECT_EQ(renderer_->render_pass_program_aa_[precision].program(), | 243 EXPECT_EQ(renderer_->render_pass_program_aa_[precision].program(), |
| 237 renderer_->program_shadow_); | 244 renderer_->program_shadow_); |
| 238 } | 245 } |
| 239 | 246 |
| 240 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) { | 247 void TestRenderPassColorMatrixProgramAA(TexCoordPrecision precision) { |
| 241 EXPECT_PROGRAM_VALID( | 248 EXPECT_PROGRAM_VALID( |
| 242 &renderer_->render_pass_color_matrix_program_aa_[precision]); | 249 &renderer_->render_pass_color_matrix_program_aa_[precision]); |
| 243 EXPECT_EQ( | 250 EXPECT_EQ( |
| 244 renderer_->render_pass_color_matrix_program_aa_[precision].program(), | 251 renderer_->render_pass_color_matrix_program_aa_[precision].program(), |
| 245 renderer_->program_shadow_); | 252 renderer_->program_shadow_); |
| 246 } | 253 } |
| 247 | 254 |
| 248 void TestRenderPassMaskProgramAA(TexCoordPrecision precision) { | 255 void TestRenderPassMaskProgramAA(TexCoordPrecision precision, |
| 249 EXPECT_PROGRAM_VALID(&renderer_->render_pass_mask_program_aa_[precision]); | 256 SamplerType sampler) { |
| 250 EXPECT_EQ(renderer_->render_pass_mask_program_aa_[precision].program(), | 257 EXPECT_PROGRAM_VALID( |
| 251 renderer_->program_shadow_); | 258 &renderer_->render_pass_mask_program_aa_[precision][sampler]); |
| 259 EXPECT_EQ( |
| 260 renderer_->render_pass_mask_program_aa_[precision][sampler].program(), |
| 261 renderer_->program_shadow_); |
| 252 } | 262 } |
| 253 | 263 |
| 254 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision) { | 264 void TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision, |
| 265 SamplerType sampler) { |
| 255 EXPECT_PROGRAM_VALID( | 266 EXPECT_PROGRAM_VALID( |
| 256 &renderer_->render_pass_mask_color_matrix_program_aa_[precision]); | 267 &renderer_ |
| 257 EXPECT_EQ(renderer_->render_pass_mask_color_matrix_program_aa_[precision] | 268 ->render_pass_mask_color_matrix_program_aa_[precision][sampler]); |
| 258 .program(), | 269 EXPECT_EQ( |
| 259 renderer_->program_shadow_); | 270 renderer_->render_pass_mask_color_matrix_program_aa_[precision][sampler] |
| 271 .program(), |
| 272 renderer_->program_shadow_); |
| 260 } | 273 } |
| 261 | 274 |
| 262 void TestSolidColorProgramAA() { | 275 void TestSolidColorProgramAA() { |
| 263 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_); | 276 EXPECT_PROGRAM_VALID(&renderer_->solid_color_program_aa_); |
| 264 EXPECT_EQ(renderer_->solid_color_program_aa_.program(), | 277 EXPECT_EQ(renderer_->solid_color_program_aa_.program(), |
| 265 renderer_->program_shadow_); | 278 renderer_->program_shadow_); |
| 266 } | 279 } |
| 267 | 280 |
| 268 LayerTreeSettings settings_; | 281 LayerTreeSettings settings_; |
| 269 FakeOutputSurfaceClient output_surface_client_; | 282 FakeOutputSurfaceClient output_surface_client_; |
| (...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 | 1434 |
| 1422 AddRenderPassQuad( | 1435 AddRenderPassQuad( |
| 1423 root_pass, child_pass, mask, FilterOperations(), gfx::Transform()); | 1436 root_pass, child_pass, mask, FilterOperations(), gfx::Transform()); |
| 1424 | 1437 |
| 1425 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1438 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1426 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1439 renderer_->DrawFrame(&render_passes_in_draw_order_, |
| 1427 1.f, | 1440 1.f, |
| 1428 viewport_rect, | 1441 viewport_rect, |
| 1429 viewport_rect, | 1442 viewport_rect, |
| 1430 false); | 1443 false); |
| 1431 TestRenderPassMaskProgram(TexCoordPrecisionMedium); | 1444 TestRenderPassMaskProgram(TexCoordPrecisionMedium, SamplerType2D); |
| 1432 | 1445 |
| 1433 // RenderPassMaskColorMatrixProgram | 1446 // RenderPassMaskColorMatrixProgram |
| 1434 render_passes_in_draw_order_.clear(); | 1447 render_passes_in_draw_order_.clear(); |
| 1435 | 1448 |
| 1436 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1449 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1437 child_pass_id, | 1450 child_pass_id, |
| 1438 child_rect, | 1451 child_rect, |
| 1439 gfx::Transform()); | 1452 gfx::Transform()); |
| 1440 | 1453 |
| 1441 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1454 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1442 root_pass_id, | 1455 root_pass_id, |
| 1443 viewport_rect, | 1456 viewport_rect, |
| 1444 gfx::Transform()); | 1457 gfx::Transform()); |
| 1445 | 1458 |
| 1446 AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform()); | 1459 AddRenderPassQuad(root_pass, child_pass, mask, filters, gfx::Transform()); |
| 1447 | 1460 |
| 1448 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1461 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1449 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1462 renderer_->DrawFrame(&render_passes_in_draw_order_, |
| 1450 1.f, | 1463 1.f, |
| 1451 viewport_rect, | 1464 viewport_rect, |
| 1452 viewport_rect, | 1465 viewport_rect, |
| 1453 false); | 1466 false); |
| 1454 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium); | 1467 TestRenderPassMaskColorMatrixProgram(TexCoordPrecisionMedium, SamplerType2D); |
| 1455 | 1468 |
| 1456 // RenderPassProgramAA | 1469 // RenderPassProgramAA |
| 1457 render_passes_in_draw_order_.clear(); | 1470 render_passes_in_draw_order_.clear(); |
| 1458 | 1471 |
| 1459 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1472 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1460 child_pass_id, | 1473 child_pass_id, |
| 1461 child_rect, | 1474 child_rect, |
| 1462 transform_causing_aa); | 1475 transform_causing_aa); |
| 1463 | 1476 |
| 1464 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1477 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1515 | 1528 |
| 1516 AddRenderPassQuad( | 1529 AddRenderPassQuad( |
| 1517 root_pass, child_pass, mask, FilterOperations(), transform_causing_aa); | 1530 root_pass, child_pass, mask, FilterOperations(), transform_causing_aa); |
| 1518 | 1531 |
| 1519 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1532 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1520 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1533 renderer_->DrawFrame(&render_passes_in_draw_order_, |
| 1521 1.f, | 1534 1.f, |
| 1522 viewport_rect, | 1535 viewport_rect, |
| 1523 viewport_rect, | 1536 viewport_rect, |
| 1524 false); | 1537 false); |
| 1525 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium); | 1538 TestRenderPassMaskProgramAA(TexCoordPrecisionMedium, SamplerType2D); |
| 1526 | 1539 |
| 1527 // RenderPassMaskColorMatrixProgramAA | 1540 // RenderPassMaskColorMatrixProgramAA |
| 1528 render_passes_in_draw_order_.clear(); | 1541 render_passes_in_draw_order_.clear(); |
| 1529 | 1542 |
| 1530 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1543 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1531 child_pass_id, | 1544 child_pass_id, |
| 1532 child_rect, | 1545 child_rect, |
| 1533 transform_causing_aa); | 1546 transform_causing_aa); |
| 1534 | 1547 |
| 1535 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1548 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1536 root_pass_id, | 1549 root_pass_id, |
| 1537 viewport_rect, | 1550 viewport_rect, |
| 1538 transform_causing_aa); | 1551 transform_causing_aa); |
| 1539 | 1552 |
| 1540 AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa); | 1553 AddRenderPassQuad(root_pass, child_pass, mask, filters, transform_causing_aa); |
| 1541 | 1554 |
| 1542 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1555 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1543 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1556 renderer_->DrawFrame(&render_passes_in_draw_order_, |
| 1544 1.f, | 1557 1.f, |
| 1545 viewport_rect, | 1558 viewport_rect, |
| 1546 viewport_rect, | 1559 viewport_rect, |
| 1547 false); | 1560 false); |
| 1548 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium); | 1561 TestRenderPassMaskColorMatrixProgramAA(TexCoordPrecisionMedium, |
| 1562 SamplerType2D); |
| 1549 } | 1563 } |
| 1550 | 1564 |
| 1551 // At this time, the AA code path cannot be taken if the surface's rect would | 1565 // At this time, the AA code path cannot be taken if the surface's rect would |
| 1552 // project incorrectly by the given transform, because of w<0 clipping. | 1566 // project incorrectly by the given transform, because of w<0 clipping. |
| 1553 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { | 1567 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
| 1554 gfx::Rect child_rect(50, 50); | 1568 gfx::Rect child_rect(50, 50); |
| 1555 RenderPassId child_pass_id(2, 0); | 1569 RenderPassId child_pass_id(2, 0); |
| 1556 TestRenderPass* child_pass; | 1570 TestRenderPass* child_pass; |
| 1557 | 1571 |
| 1558 gfx::Rect viewport_rect(1, 1); | 1572 gfx::Rect viewport_rect(1, 1); |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1824 base::MessageLoop::current()->Run(); | 1838 base::MessageLoop::current()->Run(); |
| 1825 | 1839 |
| 1826 // The sync point should have happened. | 1840 // The sync point should have happened. |
| 1827 EXPECT_EQ(1, sync_point_callback_count); | 1841 EXPECT_EQ(1, sync_point_callback_count); |
| 1828 EXPECT_EQ(1, other_callback_count); | 1842 EXPECT_EQ(1, other_callback_count); |
| 1829 } | 1843 } |
| 1830 #endif // OS_ANDROID | 1844 #endif // OS_ANDROID |
| 1831 | 1845 |
| 1832 } // namespace | 1846 } // namespace |
| 1833 } // namespace cc | 1847 } // namespace cc |
| OLD | NEW |