| 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 |