| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cc/layers/picture_image_layer.h" | |
| 6 #include "cc/layers/solid_color_layer.h" | |
| 7 #include "cc/test/layer_tree_pixel_resource_test.h" | |
| 8 #include "cc/test/pixel_comparator.h" | |
| 9 | |
| 10 #if !defined(OS_ANDROID) | |
| 11 | |
| 12 namespace cc { | |
| 13 namespace { | |
| 14 | |
| 15 SkXfermode::Mode const kBlendModes[] = { | |
| 16 SkXfermode::kSrcOver_Mode, SkXfermode::kScreen_Mode, | |
| 17 SkXfermode::kOverlay_Mode, SkXfermode::kDarken_Mode, | |
| 18 SkXfermode::kLighten_Mode, SkXfermode::kColorDodge_Mode, | |
| 19 SkXfermode::kColorBurn_Mode, SkXfermode::kHardLight_Mode, | |
| 20 SkXfermode::kSoftLight_Mode, SkXfermode::kDifference_Mode, | |
| 21 SkXfermode::kExclusion_Mode, SkXfermode::kMultiply_Mode, | |
| 22 SkXfermode::kHue_Mode, SkXfermode::kSaturation_Mode, | |
| 23 SkXfermode::kColor_Mode, SkXfermode::kLuminosity_Mode}; | |
| 24 | |
| 25 SkColor kCSSTestColors[] = { | |
| 26 0xffff0000, // red | |
| 27 0xff00ff00, // lime | |
| 28 0xff0000ff, // blue | |
| 29 0xff00ffff, // aqua | |
| 30 0xffff00ff, // fuchsia | |
| 31 0xffffff00, // yellow | |
| 32 0xff008000, // green | |
| 33 0xff800000, // maroon | |
| 34 0xff000080, // navy | |
| 35 0xff800080, // purple | |
| 36 0xff808000, // olive | |
| 37 0xff008080, // teal | |
| 38 0xfffa8072, // salmon | |
| 39 0xffc0c0c0, // silver | |
| 40 0xff000000, // black | |
| 41 0xff808080, // gray | |
| 42 0x80000000, // black with transparency | |
| 43 0xffffffff, // white | |
| 44 0x80ffffff, // white with transparency | |
| 45 0x00000000 // transparent | |
| 46 }; | |
| 47 | |
| 48 const int kBlendModesCount = arraysize(kBlendModes); | |
| 49 const int kCSSTestColorsCount = arraysize(kCSSTestColors); | |
| 50 | |
| 51 using RenderPassOptions = uint32; | |
| 52 const uint32 kUseMasks = 1 << 0; | |
| 53 const uint32 kUseAntialiasing = 1 << 1; | |
| 54 const uint32 kUseColorMatrix = 1 << 2; | |
| 55 const uint32 kForceShaders = 1 << 3; | |
| 56 | |
| 57 class LayerTreeHostBlendingPixelTest : public LayerTreeHostPixelResourceTest { | |
| 58 public: | |
| 59 LayerTreeHostBlendingPixelTest() | |
| 60 : force_antialiasing_(false), force_blending_with_shaders_(false) { | |
| 61 pixel_comparator_.reset(new FuzzyPixelOffByOneComparator(true)); | |
| 62 } | |
| 63 | |
| 64 void InitializeSettings(LayerTreeSettings* settings) override { | |
| 65 settings->renderer_settings.force_antialiasing = force_antialiasing_; | |
| 66 settings->renderer_settings.force_blending_with_shaders = | |
| 67 force_blending_with_shaders_; | |
| 68 } | |
| 69 | |
| 70 protected: | |
| 71 void RunBlendingWithRootPixelTestType(PixelResourceTestCase type) { | |
| 72 const int kLaneWidth = 2; | |
| 73 const int kLaneHeight = kLaneWidth; | |
| 74 const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth; | |
| 75 const int kRootHeight = 2 * kLaneWidth + kLaneHeight; | |
| 76 InitializeFromTestCase(type); | |
| 77 | |
| 78 scoped_refptr<SolidColorLayer> background = | |
| 79 CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSOrange); | |
| 80 | |
| 81 // Orange child layers will blend with the green background | |
| 82 for (int i = 0; i < kBlendModesCount; ++i) { | |
| 83 gfx::Rect child_rect( | |
| 84 (i + 1) * kLaneWidth, kLaneWidth, kLaneWidth, kLaneHeight); | |
| 85 scoped_refptr<SolidColorLayer> green_lane = | |
| 86 CreateSolidColorLayer(child_rect, kCSSGreen); | |
| 87 background->AddChild(green_lane); | |
| 88 green_lane->SetBlendMode(kBlendModes[i]); | |
| 89 } | |
| 90 | |
| 91 RunPixelResourceTest( | |
| 92 background, | |
| 93 base::FilePath(FILE_PATH_LITERAL("blending_with_root.png"))); | |
| 94 } | |
| 95 | |
| 96 void RunBlendingWithTransparentPixelTestType(PixelResourceTestCase type) { | |
| 97 const int kLaneWidth = 2; | |
| 98 const int kLaneHeight = 3 * kLaneWidth; | |
| 99 const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth; | |
| 100 const int kRootHeight = 2 * kLaneWidth + kLaneHeight; | |
| 101 InitializeFromTestCase(type); | |
| 102 | |
| 103 scoped_refptr<SolidColorLayer> root = | |
| 104 CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSBrown); | |
| 105 | |
| 106 scoped_refptr<SolidColorLayer> background = CreateSolidColorLayer( | |
| 107 gfx::Rect(0, kLaneWidth * 2, kRootWidth, kLaneWidth), kCSSOrange); | |
| 108 | |
| 109 root->AddChild(background); | |
| 110 background->SetIsRootForIsolatedGroup(true); | |
| 111 | |
| 112 // Orange child layers will blend with the green background | |
| 113 for (int i = 0; i < kBlendModesCount; ++i) { | |
| 114 gfx::Rect child_rect( | |
| 115 (i + 1) * kLaneWidth, -kLaneWidth, kLaneWidth, kLaneHeight); | |
| 116 scoped_refptr<SolidColorLayer> green_lane = | |
| 117 CreateSolidColorLayer(child_rect, kCSSGreen); | |
| 118 background->AddChild(green_lane); | |
| 119 green_lane->SetBlendMode(kBlendModes[i]); | |
| 120 } | |
| 121 | |
| 122 RunPixelResourceTest( | |
| 123 root, base::FilePath(FILE_PATH_LITERAL("blending_transparent.png"))); | |
| 124 } | |
| 125 | |
| 126 scoped_refptr<Layer> CreateColorfulBackdropLayer(int width, int height) { | |
| 127 // Draw the backdrop with horizontal lanes. | |
| 128 const int kLaneWidth = width; | |
| 129 const int kLaneHeight = height / kCSSTestColorsCount; | |
| 130 SkBitmap backing_store; | |
| 131 backing_store.allocN32Pixels(width, height); | |
| 132 SkCanvas canvas(backing_store); | |
| 133 canvas.clear(SK_ColorTRANSPARENT); | |
| 134 for (int i = 0; i < kCSSTestColorsCount; ++i) { | |
| 135 SkPaint paint; | |
| 136 paint.setColor(kCSSTestColors[i]); | |
| 137 canvas.drawRect( | |
| 138 SkRect::MakeXYWH(0, i * kLaneHeight, kLaneWidth, kLaneHeight), paint); | |
| 139 } | |
| 140 scoped_refptr<PictureImageLayer> layer = PictureImageLayer::Create(); | |
| 141 layer->SetIsDrawable(true); | |
| 142 layer->SetBounds(gfx::Size(width, height)); | |
| 143 layer->SetBitmap(backing_store); | |
| 144 return layer; | |
| 145 } | |
| 146 | |
| 147 void SetupMaskLayer(scoped_refptr<Layer> layer) { | |
| 148 const int kMaskOffset = 2; | |
| 149 gfx::Size bounds = layer->bounds(); | |
| 150 scoped_refptr<PictureImageLayer> mask = PictureImageLayer::Create(); | |
| 151 mask->SetIsDrawable(true); | |
| 152 mask->SetIsMask(true); | |
| 153 mask->SetBounds(bounds); | |
| 154 | |
| 155 SkBitmap bitmap; | |
| 156 bitmap.allocN32Pixels(bounds.width(), bounds.height()); | |
| 157 SkCanvas canvas(bitmap); | |
| 158 SkPaint paint; | |
| 159 paint.setColor(SK_ColorWHITE); | |
| 160 canvas.clear(SK_ColorTRANSPARENT); | |
| 161 canvas.drawRect(SkRect::MakeXYWH(kMaskOffset, | |
| 162 kMaskOffset, | |
| 163 bounds.width() - kMaskOffset * 2, | |
| 164 bounds.height() - kMaskOffset * 2), | |
| 165 paint); | |
| 166 mask->SetBitmap(bitmap); | |
| 167 layer->SetMaskLayer(mask.get()); | |
| 168 } | |
| 169 | |
| 170 void SetupColorMatrix(scoped_refptr<Layer> layer) { | |
| 171 FilterOperations filter_operations; | |
| 172 filter_operations.Append(FilterOperation::CreateSepiaFilter(.001f)); | |
| 173 layer->SetFilters(filter_operations); | |
| 174 } | |
| 175 | |
| 176 void CreateBlendingColorLayers(int lane_width, | |
| 177 int lane_height, | |
| 178 scoped_refptr<Layer> background, | |
| 179 RenderPassOptions flags) { | |
| 180 const int kLanesCount = kBlendModesCount + 4; | |
| 181 const SkColor kMiscOpaqueColor = 0xffc86464; | |
| 182 const SkColor kMiscTransparentColor = 0x80c86464; | |
| 183 const SkXfermode::Mode kCoeffBlendMode = SkXfermode::kScreen_Mode; | |
| 184 const SkXfermode::Mode kShaderBlendMode = SkXfermode::kColorBurn_Mode; | |
| 185 // add vertical lanes with each of the blend modes | |
| 186 for (int i = 0; i < kLanesCount; ++i) { | |
| 187 gfx::Rect child_rect(i * lane_width, 0, lane_width, lane_height); | |
| 188 SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode; | |
| 189 float opacity = 1.f; | |
| 190 SkColor color = kMiscOpaqueColor; | |
| 191 | |
| 192 if (i < kBlendModesCount) { | |
| 193 blend_mode = kBlendModes[i]; | |
| 194 } else if (i == kBlendModesCount) { | |
| 195 blend_mode = kCoeffBlendMode; | |
| 196 opacity = 0.5f; | |
| 197 } else if (i == kBlendModesCount + 1) { | |
| 198 blend_mode = kCoeffBlendMode; | |
| 199 color = kMiscTransparentColor; | |
| 200 } else if (i == kBlendModesCount + 2) { | |
| 201 blend_mode = kShaderBlendMode; | |
| 202 opacity = 0.5f; | |
| 203 } else if (i == kBlendModesCount + 3) { | |
| 204 blend_mode = kShaderBlendMode; | |
| 205 color = kMiscTransparentColor; | |
| 206 } | |
| 207 | |
| 208 scoped_refptr<SolidColorLayer> lane = | |
| 209 CreateSolidColorLayer(child_rect, color); | |
| 210 lane->SetBlendMode(blend_mode); | |
| 211 lane->SetOpacity(opacity); | |
| 212 lane->SetForceRenderSurface(true); | |
| 213 if (flags & kUseMasks) | |
| 214 SetupMaskLayer(lane); | |
| 215 if (flags & kUseColorMatrix) { | |
| 216 SetupColorMatrix(lane); | |
| 217 } | |
| 218 background->AddChild(lane); | |
| 219 } | |
| 220 } | |
| 221 | |
| 222 void RunBlendingWithRenderPass(PixelResourceTestCase type, | |
| 223 const base::FilePath::CharType* expected_path, | |
| 224 RenderPassOptions flags) { | |
| 225 const int kLaneWidth = 8; | |
| 226 const int kLaneHeight = kLaneWidth * kCSSTestColorsCount; | |
| 227 const int kRootSize = kLaneHeight; | |
| 228 InitializeFromTestCase(type); | |
| 229 | |
| 230 scoped_refptr<SolidColorLayer> root = | |
| 231 CreateSolidColorLayer(gfx::Rect(kRootSize, kRootSize), SK_ColorWHITE); | |
| 232 scoped_refptr<Layer> background = | |
| 233 CreateColorfulBackdropLayer(kRootSize, kRootSize); | |
| 234 | |
| 235 background->SetIsRootForIsolatedGroup(true); | |
| 236 root->AddChild(background); | |
| 237 | |
| 238 CreateBlendingColorLayers(kLaneWidth, kLaneHeight, background.get(), flags); | |
| 239 | |
| 240 this->force_antialiasing_ = (flags & kUseAntialiasing); | |
| 241 this->force_blending_with_shaders_ = (flags & kForceShaders); | |
| 242 | |
| 243 if ((flags & kUseAntialiasing) && (test_type_ == PIXEL_TEST_GL)) { | |
| 244 // Anti aliasing causes differences up to 8 pixels at the edges. | |
| 245 int large_error_allowed = 8; | |
| 246 // Blending results might differ with one pixel. | |
| 247 int small_error_allowed = 1; | |
| 248 // Most of the errors are one pixel errors. | |
| 249 float percentage_pixels_small_error = 13.1f; | |
| 250 // Because of anti-aliasing, around 10% of pixels (at the edges) have | |
| 251 // bigger errors (from small_error_allowed + 1 to large_error_allowed). | |
| 252 float percentage_pixels_error = 22.5f; | |
| 253 // The average error is still close to 1. | |
| 254 float average_error_allowed_in_bad_pixels = 1.4f; | |
| 255 | |
| 256 pixel_comparator_.reset( | |
| 257 new FuzzyPixelComparator(false, // discard_alpha | |
| 258 percentage_pixels_error, | |
| 259 percentage_pixels_small_error, | |
| 260 average_error_allowed_in_bad_pixels, | |
| 261 large_error_allowed, | |
| 262 small_error_allowed)); | |
| 263 } | |
| 264 | |
| 265 RunPixelResourceTest(root, base::FilePath(expected_path)); | |
| 266 } | |
| 267 | |
| 268 bool force_antialiasing_; | |
| 269 bool force_blending_with_shaders_; | |
| 270 }; | |
| 271 | |
| 272 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRoot_GL) { | |
| 273 RunBlendingWithRootPixelTestType(GL_ASYNC_UPLOAD_2D_DRAW); | |
| 274 } | |
| 275 | |
| 276 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRoot_Software) { | |
| 277 RunBlendingWithRootPixelTestType(SOFTWARE); | |
| 278 } | |
| 279 | |
| 280 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithBackgroundFilter) { | |
| 281 const int kLaneWidth = 2; | |
| 282 const int kLaneHeight = kLaneWidth; | |
| 283 const int kRootWidth = (kBlendModesCount + 2) * kLaneWidth; | |
| 284 const int kRootHeight = 2 * kLaneWidth + kLaneHeight; | |
| 285 InitializeFromTestCase(GL_ASYNC_UPLOAD_2D_DRAW); | |
| 286 | |
| 287 scoped_refptr<SolidColorLayer> background = | |
| 288 CreateSolidColorLayer(gfx::Rect(kRootWidth, kRootHeight), kCSSOrange); | |
| 289 | |
| 290 // Orange child layers have a background filter set and they will blend with | |
| 291 // the green background | |
| 292 for (int i = 0; i < kBlendModesCount; ++i) { | |
| 293 gfx::Rect child_rect( | |
| 294 (i + 1) * kLaneWidth, kLaneWidth, kLaneWidth, kLaneHeight); | |
| 295 scoped_refptr<SolidColorLayer> green_lane = | |
| 296 CreateSolidColorLayer(child_rect, kCSSGreen); | |
| 297 background->AddChild(green_lane); | |
| 298 | |
| 299 FilterOperations filters; | |
| 300 filters.Append(FilterOperation::CreateGrayscaleFilter(.75)); | |
| 301 green_lane->SetBackgroundFilters(filters); | |
| 302 green_lane->SetBlendMode(kBlendModes[i]); | |
| 303 } | |
| 304 | |
| 305 RunPixelResourceTest( | |
| 306 background, base::FilePath(FILE_PATH_LITERAL("blending_and_filter.png"))); | |
| 307 } | |
| 308 | |
| 309 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithTransparent_GL) { | |
| 310 RunBlendingWithTransparentPixelTestType(GL_ASYNC_UPLOAD_2D_DRAW); | |
| 311 } | |
| 312 | |
| 313 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithTransparent_Software) { | |
| 314 RunBlendingWithTransparentPixelTestType(SOFTWARE); | |
| 315 } | |
| 316 | |
| 317 // Tests for render passes | |
| 318 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPass_GL) { | |
| 319 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 320 FILE_PATH_LITERAL("blending_render_pass.png"), 0); | |
| 321 } | |
| 322 | |
| 323 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPass_Software) { | |
| 324 RunBlendingWithRenderPass(SOFTWARE, | |
| 325 FILE_PATH_LITERAL("blending_render_pass.png"), 0); | |
| 326 } | |
| 327 | |
| 328 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassAA_GL) { | |
| 329 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 330 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 331 kUseAntialiasing); | |
| 332 } | |
| 333 | |
| 334 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassAA_Software) { | |
| 335 RunBlendingWithRenderPass(SOFTWARE, | |
| 336 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 337 kUseAntialiasing); | |
| 338 } | |
| 339 | |
| 340 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassWithMask_GL) { | |
| 341 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 342 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 343 kUseMasks); | |
| 344 } | |
| 345 | |
| 346 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 347 BlendingWithRenderPassWithMask_Software) { | |
| 348 RunBlendingWithRenderPass( | |
| 349 SOFTWARE, FILE_PATH_LITERAL("blending_render_pass_mask.png"), kUseMasks); | |
| 350 } | |
| 351 | |
| 352 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassWithMaskAA_GL) { | |
| 353 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 354 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 355 kUseMasks | kUseAntialiasing); | |
| 356 } | |
| 357 | |
| 358 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 359 BlendingWithRenderPassWithMaskAA_Software) { | |
| 360 RunBlendingWithRenderPass(SOFTWARE, | |
| 361 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 362 kUseMasks | kUseAntialiasing); | |
| 363 } | |
| 364 | |
| 365 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassColorMatrix_GL) { | |
| 366 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 367 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 368 kUseColorMatrix); | |
| 369 } | |
| 370 | |
| 371 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 372 BlendingWithRenderPassColorMatrix_Software) { | |
| 373 RunBlendingWithRenderPass( | |
| 374 SOFTWARE, FILE_PATH_LITERAL("blending_render_pass.png"), kUseColorMatrix); | |
| 375 } | |
| 376 | |
| 377 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassColorMatrixAA_GL) { | |
| 378 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 379 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 380 kUseAntialiasing | kUseColorMatrix); | |
| 381 } | |
| 382 | |
| 383 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 384 BlendingWithRenderPassColorMatrixAA_Software) { | |
| 385 RunBlendingWithRenderPass(SOFTWARE, | |
| 386 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 387 kUseAntialiasing | kUseColorMatrix); | |
| 388 } | |
| 389 | |
| 390 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 391 BlendingWithRenderPassWithMaskColorMatrix_GL) { | |
| 392 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 393 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 394 kUseMasks | kUseColorMatrix); | |
| 395 } | |
| 396 | |
| 397 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 398 BlendingWithRenderPassWithMaskColorMatrix_Software) { | |
| 399 RunBlendingWithRenderPass(SOFTWARE, | |
| 400 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 401 kUseMasks | kUseColorMatrix); | |
| 402 } | |
| 403 | |
| 404 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 405 BlendingWithRenderPassWithMaskColorMatrixAA_GL) { | |
| 406 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 407 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 408 kUseMasks | kUseAntialiasing | kUseColorMatrix); | |
| 409 } | |
| 410 | |
| 411 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 412 BlendingWithRenderPassWithMaskColorMatrixAA_Software) { | |
| 413 RunBlendingWithRenderPass(SOFTWARE, | |
| 414 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 415 kUseMasks | kUseAntialiasing | kUseColorMatrix); | |
| 416 } | |
| 417 | |
| 418 // Tests for render passes forcing shaders for all the blend modes. | |
| 419 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassShaders_GL) { | |
| 420 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 421 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 422 kForceShaders); | |
| 423 } | |
| 424 | |
| 425 TEST_F(LayerTreeHostBlendingPixelTest, BlendingWithRenderPassShadersAA_GL) { | |
| 426 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 427 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 428 kUseAntialiasing | kForceShaders); | |
| 429 } | |
| 430 | |
| 431 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 432 BlendingWithRenderPassShadersWithMask_GL) { | |
| 433 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 434 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 435 kUseMasks | kForceShaders); | |
| 436 } | |
| 437 | |
| 438 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 439 BlendingWithRenderPassShadersWithMask_GL_TextureRect) { | |
| 440 RunBlendingWithRenderPass(GL_ZERO_COPY_RECT_DRAW, | |
| 441 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 442 kUseMasks | kForceShaders); | |
| 443 } | |
| 444 | |
| 445 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 446 BlendingWithRenderPassShadersWithMaskAA_GL) { | |
| 447 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 448 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 449 kUseMasks | kUseAntialiasing | kForceShaders); | |
| 450 } | |
| 451 | |
| 452 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 453 BlendingWithRenderPassShadersWithMaskAA_GL_TextureRect) { | |
| 454 RunBlendingWithRenderPass(GL_ZERO_COPY_RECT_DRAW, | |
| 455 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 456 kUseMasks | kUseAntialiasing | kForceShaders); | |
| 457 } | |
| 458 | |
| 459 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 460 BlendingWithRenderPassShadersColorMatrix_GL) { | |
| 461 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 462 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 463 kUseColorMatrix | kForceShaders); | |
| 464 } | |
| 465 | |
| 466 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 467 BlendingWithRenderPassShadersColorMatrixAA_GL) { | |
| 468 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 469 FILE_PATH_LITERAL("blending_render_pass.png"), | |
| 470 kUseAntialiasing | kUseColorMatrix | kForceShaders); | |
| 471 } | |
| 472 | |
| 473 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 474 BlendingWithRenderPassShadersWithMaskColorMatrix_GL) { | |
| 475 RunBlendingWithRenderPass(GL_ASYNC_UPLOAD_2D_DRAW, | |
| 476 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 477 kUseMasks | kUseColorMatrix | kForceShaders); | |
| 478 } | |
| 479 | |
| 480 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 481 BlendingWithRenderPassShadersWithMaskColorMatrix_GL_TextureRect) { | |
| 482 RunBlendingWithRenderPass(GL_ZERO_COPY_RECT_DRAW, | |
| 483 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 484 kUseMasks | kUseColorMatrix | kForceShaders); | |
| 485 } | |
| 486 | |
| 487 TEST_F(LayerTreeHostBlendingPixelTest, | |
| 488 BlendingWithRenderPassShadersWithMaskColorMatrixAA_GL) { | |
| 489 RunBlendingWithRenderPass( | |
| 490 GL_ASYNC_UPLOAD_2D_DRAW, | |
| 491 FILE_PATH_LITERAL("blending_render_pass_mask.png"), | |
| 492 kUseMasks | kUseAntialiasing | kUseColorMatrix | kForceShaders); | |
| 493 } | |
| 494 | |
| 495 } // namespace | |
| 496 } // namespace cc | |
| 497 | |
| 498 #endif // OS_ANDROID | |
| OLD | NEW |