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 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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |