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

Side by Side Diff: cc/output/gl_renderer_unittest.cc

Issue 668123003: cc: Support texture rect targets for masks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base_for_texture_rect_changes
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "cc/base/math_util.h" 9 #include "cc/base/math_util.h"
10 #include "cc/output/compositor_frame_metadata.h" 10 #include "cc/output/compositor_frame_metadata.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698