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