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

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

Issue 952893003: Update from https://crrev.com/317530 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Fix gn for nacl Created 5 years, 10 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
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/output/program_binding.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
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) { 58 static inline SkXfermode::Mode BlendModeToSkXfermode(BlendMode blend_mode) {
59 switch (blend_mode) { 59 switch (blend_mode) {
60 case BlendModeNone: 60 case BLEND_MODE_NONE:
61 case BlendModeNormal: 61 case BLEND_MODE_NORMAL:
62 return SkXfermode::kSrcOver_Mode; 62 return SkXfermode::kSrcOver_Mode;
63 case BlendModeScreen: 63 case BLEND_MODE_SCREEN:
64 return SkXfermode::kScreen_Mode; 64 return SkXfermode::kScreen_Mode;
65 case BlendModeOverlay: 65 case BLEND_MODE_OVERLAY:
66 return SkXfermode::kOverlay_Mode; 66 return SkXfermode::kOverlay_Mode;
67 case BlendModeDarken: 67 case BLEND_MODE_DARKEN:
68 return SkXfermode::kDarken_Mode; 68 return SkXfermode::kDarken_Mode;
69 case BlendModeLighten: 69 case BLEND_MODE_LIGHTEN:
70 return SkXfermode::kLighten_Mode; 70 return SkXfermode::kLighten_Mode;
71 case BlendModeColorDodge: 71 case BLEND_MODE_COLOR_DODGE:
72 return SkXfermode::kColorDodge_Mode; 72 return SkXfermode::kColorDodge_Mode;
73 case BlendModeColorBurn: 73 case BLEND_MODE_COLOR_BURN:
74 return SkXfermode::kColorBurn_Mode; 74 return SkXfermode::kColorBurn_Mode;
75 case BlendModeHardLight: 75 case BLEND_MODE_HARD_LIGHT:
76 return SkXfermode::kHardLight_Mode; 76 return SkXfermode::kHardLight_Mode;
77 case BlendModeSoftLight: 77 case BLEND_MODE_SOFT_LIGHT:
78 return SkXfermode::kSoftLight_Mode; 78 return SkXfermode::kSoftLight_Mode;
79 case BlendModeDifference: 79 case BLEND_MODE_DIFFERENCE:
80 return SkXfermode::kDifference_Mode; 80 return SkXfermode::kDifference_Mode;
81 case BlendModeExclusion: 81 case BLEND_MODE_EXCLUSION:
82 return SkXfermode::kExclusion_Mode; 82 return SkXfermode::kExclusion_Mode;
83 case BlendModeMultiply: 83 case BLEND_MODE_MULTIPLY:
84 return SkXfermode::kMultiply_Mode; 84 return SkXfermode::kMultiply_Mode;
85 case BlendModeHue: 85 case BLEND_MODE_HUE:
86 return SkXfermode::kHue_Mode; 86 return SkXfermode::kHue_Mode;
87 case BlendModeSaturation: 87 case BLEND_MODE_SATURATION:
88 return SkXfermode::kSaturation_Mode; 88 return SkXfermode::kSaturation_Mode;
89 case BlendModeColor: 89 case BLEND_MODE_COLOR:
90 return SkXfermode::kColor_Mode; 90 return SkXfermode::kColor_Mode;
91 case BlendModeLuminosity: 91 case BLEND_MODE_LUMINOSITY:
92 return SkXfermode::kLuminosity_Mode; 92 return SkXfermode::kLuminosity_Mode;
93 case NumBlendModes:
94 NOTREACHED();
95 } 93 }
96 return SkXfermode::kSrcOver_Mode; 94 return SkXfermode::kSrcOver_Mode;
97 } 95 }
98 96
99 // Explicitly named to be a friend in GLRenderer for shader access. 97 // Explicitly named to be a friend in GLRenderer for shader access.
100 class GLRendererShaderPixelTest : public GLRendererPixelTest { 98 class GLRendererShaderPixelTest : public GLRendererPixelTest {
101 public: 99 public:
102 void TestShaders() { 100 void TestShaders() {
103 ASSERT_FALSE(renderer()->IsContextLost()); 101 ASSERT_FALSE(renderer()->IsContextLost());
104 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram()); 102 EXPECT_PROGRAM_VALID(renderer()->GetTileCheckerboardProgram());
105 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram()); 103 EXPECT_PROGRAM_VALID(renderer()->GetDebugBorderProgram());
106 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram()); 104 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgram());
107 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA()); 105 EXPECT_PROGRAM_VALID(renderer()->GetSolidColorProgramAA());
108 TestShadersWithTexCoordPrecision(TexCoordPrecisionMedium); 106 TestShadersWithTexCoordPrecision(TEX_COORD_PRECISION_MEDIUM);
109 TestShadersWithTexCoordPrecision(TexCoordPrecisionHigh); 107 TestShadersWithTexCoordPrecision(TEX_COORD_PRECISION_HIGH);
110 ASSERT_FALSE(renderer()->IsContextLost()); 108 ASSERT_FALSE(renderer()->IsContextLost());
111 } 109 }
112 110
113 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) { 111 void TestShadersWithTexCoordPrecision(TexCoordPrecision precision) {
114 for (int i = 0; i < NumBlendModes; ++i) { 112 for (int i = 0; i <= LAST_BLEND_MODE; ++i) {
115 BlendMode blend_mode = static_cast<BlendMode>(i); 113 BlendMode blend_mode = static_cast<BlendMode>(i);
116 EXPECT_PROGRAM_VALID( 114 EXPECT_PROGRAM_VALID(
117 renderer()->GetRenderPassProgram(precision, blend_mode)); 115 renderer()->GetRenderPassProgram(precision, blend_mode));
118 EXPECT_PROGRAM_VALID( 116 EXPECT_PROGRAM_VALID(
119 renderer()->GetRenderPassProgramAA(precision, blend_mode)); 117 renderer()->GetRenderPassProgramAA(precision, blend_mode));
120 } 118 }
121 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision)); 119 EXPECT_PROGRAM_VALID(renderer()->GetTextureProgram(precision));
122 EXPECT_PROGRAM_VALID( 120 EXPECT_PROGRAM_VALID(
123 renderer()->GetNonPremultipliedTextureProgram(precision)); 121 renderer()->GetNonPremultipliedTextureProgram(precision));
124 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision)); 122 EXPECT_PROGRAM_VALID(renderer()->GetTextureBackgroundProgram(precision));
125 EXPECT_PROGRAM_VALID( 123 EXPECT_PROGRAM_VALID(
126 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision)); 124 renderer()->GetNonPremultipliedTextureBackgroundProgram(precision));
127 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision)); 125 EXPECT_PROGRAM_VALID(renderer()->GetTextureIOSurfaceProgram(precision));
128 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision)); 126 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVProgram(precision));
129 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision)); 127 EXPECT_PROGRAM_VALID(renderer()->GetVideoYUVAProgram(precision));
130 // This is unlikely to be ever true in tests due to usage of osmesa. 128 // This is unlikely to be ever true in tests due to usage of osmesa.
131 if (renderer()->Capabilities().using_egl_image) 129 if (renderer()->Capabilities().using_egl_image)
132 EXPECT_PROGRAM_VALID(renderer()->GetVideoStreamTextureProgram(precision)); 130 EXPECT_PROGRAM_VALID(renderer()->GetVideoStreamTextureProgram(precision));
133 else 131 else
134 EXPECT_FALSE(renderer()->GetVideoStreamTextureProgram(precision)); 132 EXPECT_FALSE(renderer()->GetVideoStreamTextureProgram(precision));
135 TestShadersWithSamplerType(precision, SamplerType2D); 133 TestShadersWithSamplerType(precision, SAMPLER_TYPE_2D);
136 TestShadersWithSamplerType(precision, SamplerType2DRect); 134 TestShadersWithSamplerType(precision, SAMPLER_TYPE_2D_RECT);
137 // This is unlikely to be ever true in tests due to usage of osmesa. 135 // This is unlikely to be ever true in tests due to usage of osmesa.
138 if (renderer()->Capabilities().using_egl_image) 136 if (renderer()->Capabilities().using_egl_image)
139 TestShadersWithSamplerType(precision, SamplerTypeExternalOES); 137 TestShadersWithSamplerType(precision, SAMPLER_TYPE_EXTERNAL_OES);
140 } 138 }
141 139
142 void TestShadersWithSamplerType(TexCoordPrecision precision, 140 void TestShadersWithSamplerType(TexCoordPrecision precision,
143 SamplerType sampler) { 141 SamplerType sampler) {
144 EXPECT_PROGRAM_VALID(renderer()->GetTileProgram(precision, sampler)); 142 EXPECT_PROGRAM_VALID(renderer()->GetTileProgram(precision, sampler));
145 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramOpaque(precision, sampler)); 143 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramOpaque(precision, sampler));
146 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramAA(precision, sampler)); 144 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramAA(precision, sampler));
147 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramSwizzle(precision, sampler)); 145 EXPECT_PROGRAM_VALID(renderer()->GetTileProgramSwizzle(precision, sampler));
148 EXPECT_PROGRAM_VALID( 146 EXPECT_PROGRAM_VALID(
149 renderer()->GetTileProgramSwizzleOpaque(precision, sampler)); 147 renderer()->GetTileProgramSwizzleOpaque(precision, sampler));
150 EXPECT_PROGRAM_VALID( 148 EXPECT_PROGRAM_VALID(
151 renderer()->GetTileProgramSwizzleAA(precision, sampler)); 149 renderer()->GetTileProgramSwizzleAA(precision, sampler));
152 for (int i = 0; i < NumBlendModes; ++i) { 150 for (int i = 0; i <= LAST_BLEND_MODE; ++i) {
153 BlendMode blend_mode = static_cast<BlendMode>(i); 151 BlendMode blend_mode = static_cast<BlendMode>(i);
154 EXPECT_PROGRAM_VALID( 152 EXPECT_PROGRAM_VALID(
155 renderer()->GetRenderPassMaskProgram(precision, sampler, blend_mode)); 153 renderer()->GetRenderPassMaskProgram(precision, sampler, blend_mode));
156 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA( 154 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskProgramAA(
157 precision, sampler, blend_mode)); 155 precision, sampler, blend_mode));
158 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgramAA( 156 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgramAA(
159 precision, sampler, blend_mode)); 157 precision, sampler, blend_mode));
160 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgram( 158 EXPECT_PROGRAM_VALID(renderer()->GetRenderPassMaskColorMatrixProgram(
161 precision, sampler, blend_mode)); 159 precision, sampler, blend_mode));
162 } 160 }
(...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1430 gfx::Rect viewport_rect(1, 1); 1428 gfx::Rect viewport_rect(1, 1);
1431 1429
1432 gfx::Rect child_rect(50, 50); 1430 gfx::Rect child_rect(50, 50);
1433 RenderPassId child_pass_id(2, 0); 1431 RenderPassId child_pass_id(2, 0);
1434 TestRenderPass* child_pass; 1432 TestRenderPass* child_pass;
1435 1433
1436 RenderPassId root_pass_id(1, 0); 1434 RenderPassId root_pass_id(1, 0);
1437 TestRenderPass* root_pass; 1435 TestRenderPass* root_pass;
1438 1436
1439 ResourceProvider::ResourceId mask = resource_provider_->CreateResource( 1437 ResourceProvider::ResourceId mask = resource_provider_->CreateResource(
1440 gfx::Size(20, 12), 1438 gfx::Size(20, 12), GL_CLAMP_TO_EDGE,
1441 GL_CLAMP_TO_EDGE, 1439 ResourceProvider::TEXTURE_HINT_IMMUTABLE,
1442 ResourceProvider::TextureHintImmutable,
1443 resource_provider_->best_texture_format()); 1440 resource_provider_->best_texture_format());
1444 resource_provider_->AllocateForTesting(mask); 1441 resource_provider_->AllocateForTesting(mask);
1445 1442
1446 SkScalar matrix[20]; 1443 SkScalar matrix[20];
1447 float amount = 0.5f; 1444 float amount = 0.5f;
1448 matrix[0] = 0.213f + 0.787f * amount; 1445 matrix[0] = 0.213f + 0.787f * amount;
1449 matrix[1] = 0.715f - 0.715f * amount; 1446 matrix[1] = 0.715f - 0.715f * amount;
1450 matrix[2] = 1.f - (matrix[0] + matrix[1]); 1447 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1451 matrix[3] = matrix[4] = 0; 1448 matrix[3] = matrix[4] = 0;
1452 matrix[5] = 0.213f - 0.213f * amount; 1449 matrix[5] = 0.213f - 0.213f * amount;
1453 matrix[6] = 0.715f + 0.285f * amount; 1450 matrix[6] = 0.715f + 0.285f * amount;
1454 matrix[7] = 1.f - (matrix[5] + matrix[6]); 1451 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1455 matrix[8] = matrix[9] = 0; 1452 matrix[8] = matrix[9] = 0;
1456 matrix[10] = 0.213f - 0.213f * amount; 1453 matrix[10] = 0.213f - 0.213f * amount;
1457 matrix[11] = 0.715f - 0.715f * amount; 1454 matrix[11] = 0.715f - 0.715f * amount;
1458 matrix[12] = 1.f - (matrix[10] + matrix[11]); 1455 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1459 matrix[13] = matrix[14] = 0; 1456 matrix[13] = matrix[14] = 0;
1460 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; 1457 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1461 matrix[18] = 1; 1458 matrix[18] = 1;
1462 skia::RefPtr<SkColorFilter> color_filter( 1459 skia::RefPtr<SkColorFilter> color_filter(
1463 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 1460 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
1464 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef( 1461 skia::RefPtr<SkImageFilter> filter = skia::AdoptRef(
1465 SkColorFilterImageFilter::Create(color_filter.get(), NULL)); 1462 SkColorFilterImageFilter::Create(color_filter.get(), NULL));
1466 FilterOperations filters; 1463 FilterOperations filters;
1467 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 1464 filters.Append(FilterOperation::CreateReferenceFilter(filter));
1468 1465
1469 gfx::Transform transform_causing_aa; 1466 gfx::Transform transform_causing_aa;
1470 transform_causing_aa.Rotate(20.0); 1467 transform_causing_aa.Rotate(20.0);
1471 1468
1472 for (int i = 0; i < NumBlendModes; ++i) { 1469 for (int i = 0; i <= LAST_BLEND_MODE; ++i) {
1473 BlendMode blend_mode = static_cast<BlendMode>(i); 1470 BlendMode blend_mode = static_cast<BlendMode>(i);
1474 SkXfermode::Mode xfer_mode = BlendModeToSkXfermode(blend_mode); 1471 SkXfermode::Mode xfer_mode = BlendModeToSkXfermode(blend_mode);
1475 settings_.force_blending_with_shaders = (blend_mode != BlendModeNone); 1472 settings_.force_blending_with_shaders = (blend_mode != BLEND_MODE_NONE);
1476 // RenderPassProgram 1473 // RenderPassProgram
1477 render_passes_in_draw_order_.clear(); 1474 render_passes_in_draw_order_.clear();
1478 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1475 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1479 child_pass_id, 1476 child_pass_id,
1480 child_rect, 1477 child_rect,
1481 gfx::Transform()); 1478 gfx::Transform());
1482 1479
1483 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1480 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1484 root_pass_id, 1481 root_pass_id,
1485 viewport_rect, 1482 viewport_rect,
1486 gfx::Transform()); 1483 gfx::Transform());
1487 1484
1488 AddRenderPassQuad(root_pass, 1485 AddRenderPassQuad(root_pass,
1489 child_pass, 1486 child_pass,
1490 0, 1487 0,
1491 FilterOperations(), 1488 FilterOperations(),
1492 gfx::Transform(), 1489 gfx::Transform(),
1493 xfer_mode); 1490 xfer_mode);
1494 1491
1495 renderer_->DecideRenderPassAllocationsForFrame( 1492 renderer_->DecideRenderPassAllocationsForFrame(
1496 render_passes_in_draw_order_); 1493 render_passes_in_draw_order_);
1497 renderer_->DrawFrame(&render_passes_in_draw_order_, 1494 renderer_->DrawFrame(&render_passes_in_draw_order_,
1498 1.f, 1495 1.f,
1499 viewport_rect, 1496 viewport_rect,
1500 viewport_rect, 1497 viewport_rect,
1501 false); 1498 false);
1502 TestRenderPassProgram(TexCoordPrecisionMedium, blend_mode); 1499 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode);
1503 1500
1504 // RenderPassColorMatrixProgram 1501 // RenderPassColorMatrixProgram
1505 render_passes_in_draw_order_.clear(); 1502 render_passes_in_draw_order_.clear();
1506 1503
1507 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1504 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1508 child_pass_id, 1505 child_pass_id,
1509 child_rect, 1506 child_rect,
1510 transform_causing_aa); 1507 transform_causing_aa);
1511 1508
1512 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1509 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1513 root_pass_id, 1510 root_pass_id,
1514 viewport_rect, 1511 viewport_rect,
1515 gfx::Transform()); 1512 gfx::Transform());
1516 1513
1517 AddRenderPassQuad( 1514 AddRenderPassQuad(
1518 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode); 1515 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode);
1519 1516
1520 renderer_->DecideRenderPassAllocationsForFrame( 1517 renderer_->DecideRenderPassAllocationsForFrame(
1521 render_passes_in_draw_order_); 1518 render_passes_in_draw_order_);
1522 renderer_->DrawFrame(&render_passes_in_draw_order_, 1519 renderer_->DrawFrame(&render_passes_in_draw_order_,
1523 1.f, 1520 1.f,
1524 viewport_rect, 1521 viewport_rect,
1525 viewport_rect, 1522 viewport_rect,
1526 false); 1523 false);
1527 TestRenderPassColorMatrixProgram(TexCoordPrecisionMedium, blend_mode); 1524 TestRenderPassColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode);
1528 1525
1529 // RenderPassMaskProgram 1526 // RenderPassMaskProgram
1530 render_passes_in_draw_order_.clear(); 1527 render_passes_in_draw_order_.clear();
1531 1528
1532 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1529 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1533 child_pass_id, 1530 child_pass_id,
1534 child_rect, 1531 child_rect,
1535 gfx::Transform()); 1532 gfx::Transform());
1536 1533
1537 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1534 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1538 root_pass_id, 1535 root_pass_id,
1539 viewport_rect, 1536 viewport_rect,
1540 gfx::Transform()); 1537 gfx::Transform());
1541 1538
1542 AddRenderPassQuad(root_pass, 1539 AddRenderPassQuad(root_pass,
1543 child_pass, 1540 child_pass,
1544 mask, 1541 mask,
1545 FilterOperations(), 1542 FilterOperations(),
1546 gfx::Transform(), 1543 gfx::Transform(),
1547 xfer_mode); 1544 xfer_mode);
1548 1545
1549 renderer_->DecideRenderPassAllocationsForFrame( 1546 renderer_->DecideRenderPassAllocationsForFrame(
1550 render_passes_in_draw_order_); 1547 render_passes_in_draw_order_);
1551 renderer_->DrawFrame(&render_passes_in_draw_order_, 1548 renderer_->DrawFrame(&render_passes_in_draw_order_,
1552 1.f, 1549 1.f,
1553 viewport_rect, 1550 viewport_rect,
1554 viewport_rect, 1551 viewport_rect,
1555 false); 1552 false);
1556 TestRenderPassMaskProgram( 1553 TestRenderPassMaskProgram(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D,
1557 TexCoordPrecisionMedium, SamplerType2D, blend_mode); 1554 blend_mode);
1558 1555
1559 // RenderPassMaskColorMatrixProgram 1556 // RenderPassMaskColorMatrixProgram
1560 render_passes_in_draw_order_.clear(); 1557 render_passes_in_draw_order_.clear();
1561 1558
1562 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1559 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1563 child_pass_id, 1560 child_pass_id,
1564 child_rect, 1561 child_rect,
1565 gfx::Transform()); 1562 gfx::Transform());
1566 1563
1567 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1564 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1568 root_pass_id, 1565 root_pass_id,
1569 viewport_rect, 1566 viewport_rect,
1570 gfx::Transform()); 1567 gfx::Transform());
1571 1568
1572 AddRenderPassQuad( 1569 AddRenderPassQuad(
1573 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode); 1570 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode);
1574 1571
1575 renderer_->DecideRenderPassAllocationsForFrame( 1572 renderer_->DecideRenderPassAllocationsForFrame(
1576 render_passes_in_draw_order_); 1573 render_passes_in_draw_order_);
1577 renderer_->DrawFrame(&render_passes_in_draw_order_, 1574 renderer_->DrawFrame(&render_passes_in_draw_order_,
1578 1.f, 1575 1.f,
1579 viewport_rect, 1576 viewport_rect,
1580 viewport_rect, 1577 viewport_rect,
1581 false); 1578 false);
1582 TestRenderPassMaskColorMatrixProgram( 1579 TestRenderPassMaskColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM,
1583 TexCoordPrecisionMedium, SamplerType2D, blend_mode); 1580 SAMPLER_TYPE_2D, blend_mode);
1584 1581
1585 // RenderPassProgramAA 1582 // RenderPassProgramAA
1586 render_passes_in_draw_order_.clear(); 1583 render_passes_in_draw_order_.clear();
1587 1584
1588 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1585 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1589 child_pass_id, 1586 child_pass_id,
1590 child_rect, 1587 child_rect,
1591 transform_causing_aa); 1588 transform_causing_aa);
1592 1589
1593 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1590 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1594 root_pass_id, 1591 root_pass_id,
1595 viewport_rect, 1592 viewport_rect,
1596 gfx::Transform()); 1593 gfx::Transform());
1597 1594
1598 AddRenderPassQuad(root_pass, 1595 AddRenderPassQuad(root_pass,
1599 child_pass, 1596 child_pass,
1600 0, 1597 0,
1601 FilterOperations(), 1598 FilterOperations(),
1602 transform_causing_aa, 1599 transform_causing_aa,
1603 xfer_mode); 1600 xfer_mode);
1604 1601
1605 renderer_->DecideRenderPassAllocationsForFrame( 1602 renderer_->DecideRenderPassAllocationsForFrame(
1606 render_passes_in_draw_order_); 1603 render_passes_in_draw_order_);
1607 renderer_->DrawFrame(&render_passes_in_draw_order_, 1604 renderer_->DrawFrame(&render_passes_in_draw_order_,
1608 1.f, 1605 1.f,
1609 viewport_rect, 1606 viewport_rect,
1610 viewport_rect, 1607 viewport_rect,
1611 false); 1608 false);
1612 TestRenderPassProgramAA(TexCoordPrecisionMedium, blend_mode); 1609 TestRenderPassProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode);
1613 1610
1614 // RenderPassColorMatrixProgramAA 1611 // RenderPassColorMatrixProgramAA
1615 render_passes_in_draw_order_.clear(); 1612 render_passes_in_draw_order_.clear();
1616 1613
1617 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1614 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1618 child_pass_id, 1615 child_pass_id,
1619 child_rect, 1616 child_rect,
1620 transform_causing_aa); 1617 transform_causing_aa);
1621 1618
1622 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1619 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1623 root_pass_id, 1620 root_pass_id,
1624 viewport_rect, 1621 viewport_rect,
1625 gfx::Transform()); 1622 gfx::Transform());
1626 1623
1627 AddRenderPassQuad( 1624 AddRenderPassQuad(
1628 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode); 1625 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode);
1629 1626
1630 renderer_->DecideRenderPassAllocationsForFrame( 1627 renderer_->DecideRenderPassAllocationsForFrame(
1631 render_passes_in_draw_order_); 1628 render_passes_in_draw_order_);
1632 renderer_->DrawFrame(&render_passes_in_draw_order_, 1629 renderer_->DrawFrame(&render_passes_in_draw_order_,
1633 1.f, 1630 1.f,
1634 viewport_rect, 1631 viewport_rect,
1635 viewport_rect, 1632 viewport_rect,
1636 false); 1633 false);
1637 TestRenderPassColorMatrixProgramAA(TexCoordPrecisionMedium, blend_mode); 1634 TestRenderPassColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode);
1638 1635
1639 // RenderPassMaskProgramAA 1636 // RenderPassMaskProgramAA
1640 render_passes_in_draw_order_.clear(); 1637 render_passes_in_draw_order_.clear();
1641 1638
1642 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1639 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1643 child_pass_id, 1640 child_pass_id,
1644 child_rect, 1641 child_rect,
1645 transform_causing_aa); 1642 transform_causing_aa);
1646 1643
1647 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1644 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1648 root_pass_id, 1645 root_pass_id,
1649 viewport_rect, 1646 viewport_rect,
1650 gfx::Transform()); 1647 gfx::Transform());
1651 1648
1652 AddRenderPassQuad(root_pass, 1649 AddRenderPassQuad(root_pass,
1653 child_pass, 1650 child_pass,
1654 mask, 1651 mask,
1655 FilterOperations(), 1652 FilterOperations(),
1656 transform_causing_aa, 1653 transform_causing_aa,
1657 xfer_mode); 1654 xfer_mode);
1658 1655
1659 renderer_->DecideRenderPassAllocationsForFrame( 1656 renderer_->DecideRenderPassAllocationsForFrame(
1660 render_passes_in_draw_order_); 1657 render_passes_in_draw_order_);
1661 renderer_->DrawFrame(&render_passes_in_draw_order_, 1658 renderer_->DrawFrame(&render_passes_in_draw_order_,
1662 1.f, 1659 1.f,
1663 viewport_rect, 1660 viewport_rect,
1664 viewport_rect, 1661 viewport_rect,
1665 false); 1662 false);
1666 TestRenderPassMaskProgramAA( 1663 TestRenderPassMaskProgramAA(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D,
1667 TexCoordPrecisionMedium, SamplerType2D, blend_mode); 1664 blend_mode);
1668 1665
1669 // RenderPassMaskColorMatrixProgramAA 1666 // RenderPassMaskColorMatrixProgramAA
1670 render_passes_in_draw_order_.clear(); 1667 render_passes_in_draw_order_.clear();
1671 1668
1672 child_pass = AddRenderPass(&render_passes_in_draw_order_, 1669 child_pass = AddRenderPass(&render_passes_in_draw_order_,
1673 child_pass_id, 1670 child_pass_id,
1674 child_rect, 1671 child_rect,
1675 transform_causing_aa); 1672 transform_causing_aa);
1676 1673
1677 root_pass = AddRenderPass(&render_passes_in_draw_order_, 1674 root_pass = AddRenderPass(&render_passes_in_draw_order_,
1678 root_pass_id, 1675 root_pass_id,
1679 viewport_rect, 1676 viewport_rect,
1680 transform_causing_aa); 1677 transform_causing_aa);
1681 1678
1682 AddRenderPassQuad( 1679 AddRenderPassQuad(
1683 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode); 1680 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode);
1684 1681
1685 renderer_->DecideRenderPassAllocationsForFrame( 1682 renderer_->DecideRenderPassAllocationsForFrame(
1686 render_passes_in_draw_order_); 1683 render_passes_in_draw_order_);
1687 renderer_->DrawFrame(&render_passes_in_draw_order_, 1684 renderer_->DrawFrame(&render_passes_in_draw_order_,
1688 1.f, 1685 1.f,
1689 viewport_rect, 1686 viewport_rect,
1690 viewport_rect, 1687 viewport_rect,
1691 false); 1688 false);
1692 TestRenderPassMaskColorMatrixProgramAA( 1689 TestRenderPassMaskColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM,
1693 TexCoordPrecisionMedium, SamplerType2D, blend_mode); 1690 SAMPLER_TYPE_2D, blend_mode);
1694 } 1691 }
1695 } 1692 }
1696 1693
1697 // At this time, the AA code path cannot be taken if the surface's rect would 1694 // At this time, the AA code path cannot be taken if the surface's rect would
1698 // project incorrectly by the given transform, because of w<0 clipping. 1695 // project incorrectly by the given transform, because of w<0 clipping.
1699 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { 1696 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) {
1700 gfx::Rect child_rect(50, 50); 1697 gfx::Rect child_rect(50, 50);
1701 RenderPassId child_pass_id(2, 0); 1698 RenderPassId child_pass_id(2, 0);
1702 TestRenderPass* child_pass; 1699 TestRenderPass* child_pass;
1703 1700
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1735 1732
1736 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); 1733 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_);
1737 renderer_->DrawFrame(&render_passes_in_draw_order_, 1734 renderer_->DrawFrame(&render_passes_in_draw_order_,
1738 1.f, 1735 1.f,
1739 viewport_rect, 1736 viewport_rect,
1740 viewport_rect, 1737 viewport_rect,
1741 false); 1738 false);
1742 1739
1743 // If use_aa incorrectly ignores clipping, it will use the 1740 // If use_aa incorrectly ignores clipping, it will use the
1744 // RenderPassProgramAA shader instead of the RenderPassProgram. 1741 // RenderPassProgramAA shader instead of the RenderPassProgram.
1745 TestRenderPassProgram(TexCoordPrecisionMedium, BlendModeNone); 1742 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE);
1746 } 1743 }
1747 1744
1748 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { 1745 TEST_F(GLRendererShaderTest, DrawSolidColorShader) {
1749 gfx::Rect viewport_rect(1, 1); 1746 gfx::Rect viewport_rect(1, 1);
1750 RenderPassId root_pass_id(1, 0); 1747 RenderPassId root_pass_id(1, 0);
1751 TestRenderPass* root_pass; 1748 TestRenderPass* root_pass;
1752 1749
1753 gfx::Transform pixel_aligned_transform_causing_aa; 1750 gfx::Transform pixel_aligned_transform_causing_aa;
1754 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); 1751 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f);
1755 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); 1752 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f);
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 base::MessageLoop::current()->Run(); 1970 base::MessageLoop::current()->Run();
1974 1971
1975 // The sync point should have happened. 1972 // The sync point should have happened.
1976 EXPECT_EQ(1, sync_point_callback_count); 1973 EXPECT_EQ(1, sync_point_callback_count);
1977 EXPECT_EQ(1, other_callback_count); 1974 EXPECT_EQ(1, other_callback_count);
1978 } 1975 }
1979 #endif // OS_ANDROID 1976 #endif // OS_ANDROID
1980 1977
1981 } // namespace 1978 } // namespace
1982 } // namespace cc 1979 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/output/program_binding.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698