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

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

Issue 368403003: Use RenderPass to create DrawQuad in unittests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@layerrawptrDQ
Patch Set: address review comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/overlay_unittest.cc ('k') | cc/output/software_renderer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/message_loop/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 #include "cc/layers/append_quads_data.h" 6 #include "cc/layers/append_quads_data.h"
7 #include "cc/output/gl_renderer.h" 7 #include "cc/output/gl_renderer.h"
8 #include "cc/quads/draw_quad.h" 8 #include "cc/quads/draw_quad.h"
9 #include "cc/quads/picture_draw_quad.h" 9 #include "cc/quads/picture_draw_quad.h"
10 #include "cc/quads/texture_draw_quad.h" 10 #include "cc/quads/texture_draw_quad.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 const gfx::Rect& rect, 42 const gfx::Rect& rect,
43 const gfx::Transform& transform_to_root_target) { 43 const gfx::Transform& transform_to_root_target) {
44 scoped_ptr<RenderPass> pass = RenderPass::Create(); 44 scoped_ptr<RenderPass> pass = RenderPass::Create();
45 const gfx::Rect output_rect = rect; 45 const gfx::Rect output_rect = rect;
46 const gfx::Rect damage_rect = rect; 46 const gfx::Rect damage_rect = rect;
47 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); 47 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target);
48 return pass.Pass(); 48 return pass.Pass();
49 } 49 }
50 50
51 SharedQuadState* CreateTestSharedQuadState( 51 SharedQuadState* CreateTestSharedQuadState(
52 RenderPass* render_pass,
53 gfx::Transform content_to_target_transform, 52 gfx::Transform content_to_target_transform,
54 const gfx::Rect& rect) { 53 const gfx::Rect& rect,
54 RenderPass* render_pass) {
55 const gfx::Size content_bounds = rect.size(); 55 const gfx::Size content_bounds = rect.size();
56 const gfx::Rect visible_content_rect = rect; 56 const gfx::Rect visible_content_rect = rect;
57 const gfx::Rect clip_rect = rect; 57 const gfx::Rect clip_rect = rect;
58 const bool is_clipped = false; 58 const bool is_clipped = false;
59 const float opacity = 1.0f; 59 const float opacity = 1.0f;
60 const SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode; 60 const SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode;
61 int sorting_context_id = 0; 61 int sorting_context_id = 0;
62 SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState(); 62 SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState();
63 shared_state->SetAll(content_to_target_transform, 63 shared_state->SetAll(content_to_target_transform,
64 content_bounds, 64 content_bounds,
65 visible_content_rect, 65 visible_content_rect,
66 clip_rect, 66 clip_rect,
67 is_clipped, 67 is_clipped,
68 opacity, 68 opacity,
69 blend_mode, 69 blend_mode,
70 sorting_context_id); 70 sorting_context_id);
71 return shared_state; 71 return shared_state;
72 } 72 }
73 73
74 SharedQuadState* CreateTestSharedQuadStateClipped( 74 SharedQuadState* CreateTestSharedQuadStateClipped(
75 RenderPass* render_pass,
76 gfx::Transform content_to_target_transform, 75 gfx::Transform content_to_target_transform,
77 const gfx::Rect& rect, 76 const gfx::Rect& rect,
78 const gfx::Rect& clip_rect) { 77 const gfx::Rect& clip_rect,
78 RenderPass* render_pass) {
79 const gfx::Size content_bounds = rect.size(); 79 const gfx::Size content_bounds = rect.size();
80 const gfx::Rect visible_content_rect = clip_rect; 80 const gfx::Rect visible_content_rect = clip_rect;
81 const bool is_clipped = true; 81 const bool is_clipped = true;
82 const float opacity = 1.0f; 82 const float opacity = 1.0f;
83 const SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode; 83 const SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode;
84 int sorting_context_id = 0; 84 int sorting_context_id = 0;
85 SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState(); 85 SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState();
86 shared_state->SetAll(content_to_target_transform, 86 shared_state->SetAll(content_to_target_transform,
87 content_bounds, 87 content_bounds,
88 visible_content_rect, 88 visible_content_rect,
89 clip_rect, 89 clip_rect,
90 is_clipped, 90 is_clipped,
91 opacity, 91 opacity,
92 blend_mode, 92 blend_mode,
93 sorting_context_id); 93 sorting_context_id);
94 return shared_state; 94 return shared_state;
95 } 95 }
96 96
97 scoped_ptr<DrawQuad> CreateTestRenderPassDrawQuad( 97 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state,
98 SharedQuadState* shared_state, 98 const gfx::Rect& rect,
99 const gfx::Rect& rect, 99 RenderPass::Id pass_id,
100 RenderPass::Id pass_id) { 100 RenderPass* render_pass) {
101 scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create(); 101 RenderPassDrawQuad* quad =
102 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
102 quad->SetNew(shared_state, 103 quad->SetNew(shared_state,
103 rect, 104 rect,
104 rect, 105 rect,
105 pass_id, 106 pass_id,
106 false, // is_replica 107 false, // is_replica
107 0, // mask_resource_id 108 0, // mask_resource_id
108 rect, // contents_changed_since_last_frame 109 rect, // contents_changed_since_last_frame
109 gfx::RectF(1.f, 1.f), // mask_uv_rect 110 gfx::RectF(1.f, 1.f), // mask_uv_rect
110 FilterOperations(), // foreground filters 111 FilterOperations(), // foreground filters
111 FilterOperations()); // background filters 112 FilterOperations()); // background filters
112
113 return quad.PassAs<DrawQuad>();
114 } 113 }
115 114
116 scoped_ptr<TextureDrawQuad> CreateTestTextureDrawQuad( 115 void CreateTestTextureDrawQuad(const gfx::Rect& rect,
117 const gfx::Rect& rect, 116 SkColor texel_color,
118 SkColor texel_color, 117 SkColor background_color,
119 SkColor background_color, 118 bool premultiplied_alpha,
120 bool premultiplied_alpha, 119 const SharedQuadState* shared_state,
121 SharedQuadState* shared_state, 120 ResourceProvider* resource_provider,
122 ResourceProvider* resource_provider) { 121 RenderPass* render_pass) {
123 SkPMColor pixel_color = premultiplied_alpha ? 122 SkPMColor pixel_color = premultiplied_alpha ?
124 SkPreMultiplyColor(texel_color) : 123 SkPreMultiplyColor(texel_color) :
125 SkPackARGB32NoCheck(SkColorGetA(texel_color), 124 SkPackARGB32NoCheck(SkColorGetA(texel_color),
126 SkColorGetR(texel_color), 125 SkColorGetR(texel_color),
127 SkColorGetG(texel_color), 126 SkColorGetG(texel_color),
128 SkColorGetB(texel_color)); 127 SkColorGetB(texel_color));
129 std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color); 128 std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color);
130 129
131 ResourceProvider::ResourceId resource = 130 ResourceProvider::ResourceId resource =
132 resource_provider->CreateResource(rect.size(), 131 resource_provider->CreateResource(rect.size(),
133 GL_CLAMP_TO_EDGE, 132 GL_CLAMP_TO_EDGE,
134 ResourceProvider::TextureUsageAny, 133 ResourceProvider::TextureUsageAny,
135 RGBA_8888); 134 RGBA_8888);
136 resource_provider->SetPixels( 135 resource_provider->SetPixels(
137 resource, 136 resource,
138 reinterpret_cast<uint8_t*>(&pixels.front()), 137 reinterpret_cast<uint8_t*>(&pixels.front()),
139 rect, 138 rect,
140 rect, 139 rect,
141 gfx::Vector2d()); 140 gfx::Vector2d());
142 141
143 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 142 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
144 143
145 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); 144 TextureDrawQuad* quad =
145 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
146 quad->SetNew(shared_state, 146 quad->SetNew(shared_state,
147 rect, 147 rect,
148 gfx::Rect(), 148 gfx::Rect(),
149 rect, 149 rect,
150 resource, 150 resource,
151 premultiplied_alpha, 151 premultiplied_alpha,
152 gfx::PointF(0.0f, 0.0f), // uv_top_left 152 gfx::PointF(0.0f, 0.0f), // uv_top_left
153 gfx::PointF(1.0f, 1.0f), // uv_bottom_right 153 gfx::PointF(1.0f, 1.0f), // uv_bottom_right
154 background_color, 154 background_color,
155 vertex_opacity, 155 vertex_opacity,
156 false); // flipped 156 false); // flipped
157 return quad.Pass();
158 } 157 }
159 158
160 typedef ::testing::Types<GLRenderer, 159 typedef ::testing::Types<GLRenderer,
161 SoftwareRenderer, 160 SoftwareRenderer,
162 GLRendererWithExpandedViewport, 161 GLRendererWithExpandedViewport,
163 SoftwareRendererWithExpandedViewport> RendererTypes; 162 SoftwareRendererWithExpandedViewport> RendererTypes;
164 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); 163 TYPED_TEST_CASE(RendererPixelTest, RendererTypes);
165 164
166 // All pixels can be off by one, but any more than that is an error. 165 // All pixels can be off by one, but any more than that is an error.
167 class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator { 166 class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 return exact_.Compare(actual_bmp, expected_bmp); 205 return exact_.Compare(actual_bmp, expected_bmp);
207 } 206 }
208 207
209 TYPED_TEST(RendererPixelTest, SimpleGreenRect) { 208 TYPED_TEST(RendererPixelTest, SimpleGreenRect) {
210 gfx::Rect rect(this->device_viewport_size_); 209 gfx::Rect rect(this->device_viewport_size_);
211 210
212 RenderPass::Id id(1, 1); 211 RenderPass::Id id(1, 1);
213 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 212 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
214 213
215 SharedQuadState* shared_state = 214 SharedQuadState* shared_state =
216 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 215 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
217 216
218 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 217 SolidColorDrawQuad* color_quad =
218 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
219 color_quad->SetNew(shared_state, rect, rect, SK_ColorGREEN, false); 219 color_quad->SetNew(shared_state, rect, rect, SK_ColorGREEN, false);
220 220
221 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
222
223 RenderPassList pass_list; 221 RenderPassList pass_list;
224 pass_list.push_back(pass.Pass()); 222 pass_list.push_back(pass.Pass());
225 223
226 EXPECT_TRUE(this->RunPixelTest( 224 EXPECT_TRUE(this->RunPixelTest(
227 &pass_list, 225 &pass_list,
228 base::FilePath(FILE_PATH_LITERAL("green.png")), 226 base::FilePath(FILE_PATH_LITERAL("green.png")),
229 ExactPixelComparator(true))); 227 ExactPixelComparator(true)));
230 } 228 }
231 229
232 TYPED_TEST(RendererPixelTest, SimpleGreenRect_NonRootRenderPass) { 230 TYPED_TEST(RendererPixelTest, SimpleGreenRect_NonRootRenderPass) {
233 gfx::Rect rect(this->device_viewport_size_); 231 gfx::Rect rect(this->device_viewport_size_);
234 gfx::Rect small_rect(100, 100); 232 gfx::Rect small_rect(100, 100);
235 233
236 RenderPass::Id child_id(2, 1); 234 RenderPass::Id child_id(2, 1);
237 scoped_ptr<RenderPass> child_pass = 235 scoped_ptr<RenderPass> child_pass =
238 CreateTestRenderPass(child_id, small_rect, gfx::Transform()); 236 CreateTestRenderPass(child_id, small_rect, gfx::Transform());
239 237
240 SharedQuadState* child_shared_state = 238 SharedQuadState* child_shared_state =
241 CreateTestSharedQuadState(child_pass.get(), gfx::Transform(), small_rect); 239 CreateTestSharedQuadState(gfx::Transform(), small_rect, child_pass.get());
242 240
243 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 241 SolidColorDrawQuad* color_quad =
242 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
244 color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false); 243 color_quad->SetNew(child_shared_state, rect, rect, SK_ColorGREEN, false);
245 child_pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
246 244
247 RenderPass::Id root_id(1, 1); 245 RenderPass::Id root_id(1, 1);
248 scoped_ptr<RenderPass> root_pass = 246 scoped_ptr<RenderPass> root_pass =
249 CreateTestRenderPass(root_id, rect, gfx::Transform()); 247 CreateTestRenderPass(root_id, rect, gfx::Transform());
250 248
251 SharedQuadState* root_shared_state = 249 SharedQuadState* root_shared_state =
252 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), rect); 250 CreateTestSharedQuadState(gfx::Transform(), rect, root_pass.get());
253 251
254 scoped_ptr<DrawQuad> render_pass_quad = 252 CreateTestRenderPassDrawQuad(
255 CreateTestRenderPassDrawQuad(root_shared_state, small_rect, child_id); 253 root_shared_state, small_rect, child_id, root_pass.get());
256 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
257 254
258 RenderPass* child_pass_ptr = child_pass.get(); 255 RenderPass* child_pass_ptr = child_pass.get();
259 256
260 RenderPassList pass_list; 257 RenderPassList pass_list;
261 pass_list.push_back(child_pass.Pass()); 258 pass_list.push_back(child_pass.Pass());
262 pass_list.push_back(root_pass.Pass()); 259 pass_list.push_back(root_pass.Pass());
263 260
264 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget( 261 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget(
265 &pass_list, 262 &pass_list,
266 child_pass_ptr, 263 child_pass_ptr,
267 base::FilePath(FILE_PATH_LITERAL("green_small.png")), 264 base::FilePath(FILE_PATH_LITERAL("green_small.png")),
268 ExactPixelComparator(true))); 265 ExactPixelComparator(true)));
269 } 266 }
270 267
271 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithoutBackground) { 268 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithoutBackground) {
272 gfx::Rect rect(this->device_viewport_size_); 269 gfx::Rect rect(this->device_viewport_size_);
273 270
274 RenderPass::Id id(1, 1); 271 RenderPass::Id id(1, 1);
275 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 272 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
276 273
277 SharedQuadState* shared_state = 274 SharedQuadState* shared_state =
278 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 275 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
279 276
280 scoped_ptr<TextureDrawQuad> texture_quad = 277 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_),
281 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_), 278 SkColorSetARGB(128, 0, 255, 0), // Texel color.
282 SkColorSetARGB(128, 0, 255, 0), // Texel color. 279 SK_ColorTRANSPARENT, // Background color.
283 SK_ColorTRANSPARENT, // Background color. 280 true, // Premultiplied alpha.
284 true, // Premultiplied alpha. 281 shared_state,
285 shared_state, 282 this->resource_provider_.get(),
286 this->resource_provider_.get()); 283 pass.get());
287 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
288 284
289 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 285 SolidColorDrawQuad* color_quad =
286 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
290 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); 287 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false);
291 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
292 288
293 RenderPassList pass_list; 289 RenderPassList pass_list;
294 pass_list.push_back(pass.Pass()); 290 pass_list.push_back(pass.Pass());
295 291
296 EXPECT_TRUE(this->RunPixelTest( 292 EXPECT_TRUE(this->RunPixelTest(
297 &pass_list, 293 &pass_list,
298 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 294 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
299 FuzzyPixelOffByOneComparator(true))); 295 FuzzyPixelOffByOneComparator(true)));
300 } 296 }
301 297
302 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithBackground) { 298 TYPED_TEST(RendererPixelTest, PremultipliedTextureWithBackground) {
303 gfx::Rect rect(this->device_viewport_size_); 299 gfx::Rect rect(this->device_viewport_size_);
304 300
305 RenderPass::Id id(1, 1); 301 RenderPass::Id id(1, 1);
306 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 302 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
307 303
308 SharedQuadState* texture_quad_state = 304 SharedQuadState* texture_quad_state =
309 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 305 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
310 texture_quad_state->opacity = 0.8f; 306 texture_quad_state->opacity = 0.8f;
311 307
312 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad( 308 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_),
313 gfx::Rect(this->device_viewport_size_), 309 SkColorSetARGB(204, 120, 255, 120), // Texel color.
314 SkColorSetARGB(204, 120, 255, 120), // Texel color. 310 SK_ColorGREEN, // Background color.
315 SK_ColorGREEN, // Background color. 311 true, // Premultiplied alpha.
316 true, // Premultiplied alpha. 312 texture_quad_state,
317 texture_quad_state, 313 this->resource_provider_.get(),
318 this->resource_provider_.get()); 314 pass.get());
319 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
320 315
321 SharedQuadState* color_quad_state = 316 SharedQuadState* color_quad_state =
322 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 317 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
323 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 318 SolidColorDrawQuad* color_quad =
319 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
324 color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false); 320 color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
325 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
326 321
327 RenderPassList pass_list; 322 RenderPassList pass_list;
328 pass_list.push_back(pass.Pass()); 323 pass_list.push_back(pass.Pass());
329 324
330 EXPECT_TRUE(this->RunPixelTest( 325 EXPECT_TRUE(this->RunPixelTest(
331 &pass_list, 326 &pass_list,
332 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 327 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
333 FuzzyPixelOffByOneComparator(true))); 328 FuzzyPixelOffByOneComparator(true)));
334 } 329 }
335 330
336 // TODO(skaslev): The software renderer does not support non-premultplied alpha. 331 // TODO(skaslev): The software renderer does not support non-premultplied alpha.
337 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) { 332 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithoutBackground) {
338 gfx::Rect rect(this->device_viewport_size_); 333 gfx::Rect rect(this->device_viewport_size_);
339 334
340 RenderPass::Id id(1, 1); 335 RenderPass::Id id(1, 1);
341 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 336 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
342 337
343 SharedQuadState* shared_state = 338 SharedQuadState* shared_state =
344 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 339 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
345 340
346 scoped_ptr<TextureDrawQuad> texture_quad = 341 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_),
347 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_), 342 SkColorSetARGB(128, 0, 255, 0), // Texel color.
348 SkColorSetARGB(128, 0, 255, 0), // Texel color. 343 SK_ColorTRANSPARENT, // Background color.
349 SK_ColorTRANSPARENT, // Background color. 344 false, // Premultiplied alpha.
350 false, // Premultiplied alpha. 345 shared_state,
351 shared_state, 346 this->resource_provider_.get(),
352 this->resource_provider_.get()); 347 pass.get());
353 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
354 348
355 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 349 SolidColorDrawQuad* color_quad =
350 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
356 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); 351 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false);
357 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
358 352
359 RenderPassList pass_list; 353 RenderPassList pass_list;
360 pass_list.push_back(pass.Pass()); 354 pass_list.push_back(pass.Pass());
361 355
362 EXPECT_TRUE(this->RunPixelTest( 356 EXPECT_TRUE(this->RunPixelTest(
363 &pass_list, 357 &pass_list,
364 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 358 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
365 FuzzyPixelOffByOneComparator(true))); 359 FuzzyPixelOffByOneComparator(true)));
366 } 360 }
367 361
368 // TODO(skaslev): The software renderer does not support non-premultplied alpha. 362 // TODO(skaslev): The software renderer does not support non-premultplied alpha.
369 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithBackground) { 363 TEST_F(GLRendererPixelTest, NonPremultipliedTextureWithBackground) {
370 gfx::Rect rect(this->device_viewport_size_); 364 gfx::Rect rect(this->device_viewport_size_);
371 365
372 RenderPass::Id id(1, 1); 366 RenderPass::Id id(1, 1);
373 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 367 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
374 368
375 SharedQuadState* texture_quad_state = 369 SharedQuadState* texture_quad_state =
376 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 370 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
377 texture_quad_state->opacity = 0.8f; 371 texture_quad_state->opacity = 0.8f;
378 372
379 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad( 373 CreateTestTextureDrawQuad(gfx::Rect(this->device_viewport_size_),
380 gfx::Rect(this->device_viewport_size_), 374 SkColorSetARGB(204, 120, 255, 120), // Texel color.
381 SkColorSetARGB(204, 120, 255, 120), // Texel color. 375 SK_ColorGREEN, // Background color.
382 SK_ColorGREEN, // Background color. 376 false, // Premultiplied alpha.
383 false, // Premultiplied alpha. 377 texture_quad_state,
384 texture_quad_state, 378 this->resource_provider_.get(),
385 this->resource_provider_.get()); 379 pass.get());
386 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
387 380
388 SharedQuadState* color_quad_state = 381 SharedQuadState* color_quad_state =
389 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 382 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
390 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 383 SolidColorDrawQuad* color_quad =
384 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
391 color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false); 385 color_quad->SetNew(color_quad_state, rect, rect, SK_ColorWHITE, false);
392 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
393 386
394 RenderPassList pass_list; 387 RenderPassList pass_list;
395 pass_list.push_back(pass.Pass()); 388 pass_list.push_back(pass.Pass());
396 389
397 EXPECT_TRUE(this->RunPixelTest( 390 EXPECT_TRUE(this->RunPixelTest(
398 &pass_list, 391 &pass_list,
399 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 392 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
400 FuzzyPixelOffByOneComparator(true))); 393 FuzzyPixelOffByOneComparator(true)));
401 } 394 }
402 395
403 class VideoGLRendererPixelTest : public GLRendererPixelTest { 396 class VideoGLRendererPixelTest : public GLRendererPixelTest {
404 protected: 397 protected:
405 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad_Striped( 398 void CreateTestYUVVideoDrawQuad_Striped(const SharedQuadState* shared_state,
406 SharedQuadState* shared_state, 399 media::VideoFrame::Format format,
407 media::VideoFrame::Format format, 400 bool is_transparent,
408 bool is_transparent, 401 const gfx::RectF& tex_coord_rect,
409 const gfx::RectF& tex_coord_rect) { 402 RenderPass* render_pass) {
410 const gfx::Rect rect(this->device_viewport_size_); 403 const gfx::Rect rect(this->device_viewport_size_);
411 404
412 scoped_refptr<media::VideoFrame> video_frame = 405 scoped_refptr<media::VideoFrame> video_frame =
413 media::VideoFrame::CreateFrame( 406 media::VideoFrame::CreateFrame(
414 format, rect.size(), rect, rect.size(), base::TimeDelta()); 407 format, rect.size(), rect, rect.size(), base::TimeDelta());
415 408
416 // YUV values representing a striped pattern, for validating texture 409 // YUV values representing a striped pattern, for validating texture
417 // coordinates for sampling. 410 // coordinates for sampling.
418 uint8_t y_value = 0; 411 uint8_t y_value = 0;
419 uint8_t u_value = 0; 412 uint8_t u_value = 0;
(...skipping 10 matching lines...) Expand all
430 uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) + 423 uint8_t* u_row = video_frame->data(media::VideoFrame::kUPlane) +
431 video_frame->stride(media::VideoFrame::kUPlane) * i; 424 video_frame->stride(media::VideoFrame::kUPlane) * i;
432 uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) + 425 uint8_t* v_row = video_frame->data(media::VideoFrame::kVPlane) +
433 video_frame->stride(media::VideoFrame::kVPlane) * i; 426 video_frame->stride(media::VideoFrame::kVPlane) * i;
434 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane); 427 for (int j = 0; j < video_frame->row_bytes(media::VideoFrame::kUPlane);
435 ++j) { 428 ++j) {
436 u_row[j] = (u_value += 3); 429 u_row[j] = (u_value += 3);
437 v_row[j] = (v_value += 5); 430 v_row[j] = (v_value += 5);
438 } 431 }
439 } 432 }
440 return CreateTestYUVVideoDrawQuad_FromVideoFrame( 433 CreateTestYUVVideoDrawQuad_FromVideoFrame(
441 shared_state, video_frame, is_transparent, tex_coord_rect); 434 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
442 } 435 }
443 436
444 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad_Solid( 437 void CreateTestYUVVideoDrawQuad_Solid(const SharedQuadState* shared_state,
445 SharedQuadState* shared_state, 438 media::VideoFrame::Format format,
446 media::VideoFrame::Format format, 439 bool is_transparent,
447 bool is_transparent, 440 const gfx::RectF& tex_coord_rect,
448 const gfx::RectF& tex_coord_rect, 441 uint8 y,
449 uint8 y, 442 uint8 u,
450 uint8 u, 443 uint8 v,
451 uint8 v) { 444 RenderPass* render_pass) {
452 const gfx::Rect rect(this->device_viewport_size_); 445 const gfx::Rect rect(this->device_viewport_size_);
453 446
454 scoped_refptr<media::VideoFrame> video_frame = 447 scoped_refptr<media::VideoFrame> video_frame =
455 media::VideoFrame::CreateFrame( 448 media::VideoFrame::CreateFrame(
456 format, rect.size(), rect, rect.size(), base::TimeDelta()); 449 format, rect.size(), rect, rect.size(), base::TimeDelta());
457 450
458 // YUV values of a solid, constant, color. Useful for testing that color 451 // YUV values of a solid, constant, color. Useful for testing that color
459 // space/color range are being handled properly. 452 // space/color range are being handled properly.
460 memset(video_frame->data(media::VideoFrame::kYPlane), 453 memset(video_frame->data(media::VideoFrame::kYPlane),
461 y, 454 y,
462 video_frame->stride(media::VideoFrame::kYPlane) * 455 video_frame->stride(media::VideoFrame::kYPlane) *
463 video_frame->rows(media::VideoFrame::kYPlane)); 456 video_frame->rows(media::VideoFrame::kYPlane));
464 memset(video_frame->data(media::VideoFrame::kUPlane), 457 memset(video_frame->data(media::VideoFrame::kUPlane),
465 u, 458 u,
466 video_frame->stride(media::VideoFrame::kUPlane) * 459 video_frame->stride(media::VideoFrame::kUPlane) *
467 video_frame->rows(media::VideoFrame::kUPlane)); 460 video_frame->rows(media::VideoFrame::kUPlane));
468 memset(video_frame->data(media::VideoFrame::kVPlane), 461 memset(video_frame->data(media::VideoFrame::kVPlane),
469 v, 462 v,
470 video_frame->stride(media::VideoFrame::kVPlane) * 463 video_frame->stride(media::VideoFrame::kVPlane) *
471 video_frame->rows(media::VideoFrame::kVPlane)); 464 video_frame->rows(media::VideoFrame::kVPlane));
472 465
473 return CreateTestYUVVideoDrawQuad_FromVideoFrame( 466 CreateTestYUVVideoDrawQuad_FromVideoFrame(
474 shared_state, video_frame, is_transparent, tex_coord_rect); 467 shared_state, video_frame, is_transparent, tex_coord_rect, render_pass);
475 } 468 }
476 469
477 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad_FromVideoFrame( 470 void CreateTestYUVVideoDrawQuad_FromVideoFrame(
478 SharedQuadState* shared_state, 471 const SharedQuadState* shared_state,
479 scoped_refptr<media::VideoFrame> video_frame, 472 scoped_refptr<media::VideoFrame> video_frame,
480 bool is_transparent, 473 bool is_transparent,
481 const gfx::RectF& tex_coord_rect) { 474 const gfx::RectF& tex_coord_rect,
475 RenderPass* render_pass) {
482 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A); 476 const bool with_alpha = (video_frame->format() == media::VideoFrame::YV12A);
483 const YUVVideoDrawQuad::ColorSpace color_space = 477 const YUVVideoDrawQuad::ColorSpace color_space =
484 (video_frame->format() == media::VideoFrame::YV12J 478 (video_frame->format() == media::VideoFrame::YV12J
485 ? YUVVideoDrawQuad::REC_601_JPEG 479 ? YUVVideoDrawQuad::REC_601_JPEG
486 : YUVVideoDrawQuad::REC_601); 480 : YUVVideoDrawQuad::REC_601);
487 const gfx::Rect rect(this->device_viewport_size_); 481 const gfx::Rect rect(this->device_viewport_size_);
488 const gfx::Rect opaque_rect(0, 0, 0, 0); 482 const gfx::Rect opaque_rect(0, 0, 0, 0);
489 483
490 if (with_alpha) 484 if (with_alpha)
491 memset(video_frame->data(media::VideoFrame::kAPlane), 485 memset(video_frame->data(media::VideoFrame::kAPlane),
(...skipping 27 matching lines...) Expand all
519 SingleReleaseCallback::Create( 513 SingleReleaseCallback::Create(
520 resources.release_callbacks[media::VideoFrame::kVPlane])); 514 resources.release_callbacks[media::VideoFrame::kVPlane]));
521 ResourceProvider::ResourceId a_resource = 0; 515 ResourceProvider::ResourceId a_resource = 0;
522 if (with_alpha) { 516 if (with_alpha) {
523 a_resource = resource_provider_->CreateResourceFromTextureMailbox( 517 a_resource = resource_provider_->CreateResourceFromTextureMailbox(
524 resources.mailboxes[media::VideoFrame::kAPlane], 518 resources.mailboxes[media::VideoFrame::kAPlane],
525 SingleReleaseCallback::Create( 519 SingleReleaseCallback::Create(
526 resources.release_callbacks[media::VideoFrame::kAPlane])); 520 resources.release_callbacks[media::VideoFrame::kAPlane]));
527 } 521 }
528 522
529 scoped_ptr<YUVVideoDrawQuad> yuv_quad = YUVVideoDrawQuad::Create(); 523 YUVVideoDrawQuad* yuv_quad =
524 render_pass->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
530 yuv_quad->SetNew(shared_state, 525 yuv_quad->SetNew(shared_state,
531 rect, 526 rect,
532 opaque_rect, 527 opaque_rect,
533 rect, 528 rect,
534 tex_coord_rect, 529 tex_coord_rect,
535 y_resource, 530 y_resource,
536 u_resource, 531 u_resource,
537 v_resource, 532 v_resource,
538 a_resource, 533 a_resource,
539 color_space); 534 color_space);
540 return yuv_quad.Pass();
541 } 535 }
542 536
543 virtual void SetUp() OVERRIDE { 537 virtual void SetUp() OVERRIDE {
544 GLRendererPixelTest::SetUp(); 538 GLRendererPixelTest::SetUp();
545 video_resource_updater_.reset(new VideoResourceUpdater( 539 video_resource_updater_.reset(new VideoResourceUpdater(
546 output_surface_->context_provider().get(), resource_provider_.get())); 540 output_surface_->context_provider().get(), resource_provider_.get()));
547 } 541 }
548 542
549 private: 543 private:
550 scoped_ptr<VideoResourceUpdater> video_resource_updater_; 544 scoped_ptr<VideoResourceUpdater> video_resource_updater_;
551 }; 545 };
552 546
553 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) { 547 TEST_F(VideoGLRendererPixelTest, SimpleYUVRect) {
554 gfx::Rect rect(this->device_viewport_size_); 548 gfx::Rect rect(this->device_viewport_size_);
555 549
556 RenderPass::Id id(1, 1); 550 RenderPass::Id id(1, 1);
557 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 551 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
558 552
559 SharedQuadState* shared_state = 553 SharedQuadState* shared_state =
560 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 554 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
561 555
562 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 556 CreateTestYUVVideoDrawQuad_Striped(shared_state,
563 CreateTestYUVVideoDrawQuad_Striped(shared_state, 557 media::VideoFrame::YV12,
564 media::VideoFrame::YV12, 558 false,
565 false, 559 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
566 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f)); 560 pass.get());
567
568 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
569 561
570 RenderPassList pass_list; 562 RenderPassList pass_list;
571 pass_list.push_back(pass.Pass()); 563 pass_list.push_back(pass.Pass());
572 564
573 EXPECT_TRUE( 565 EXPECT_TRUE(
574 this->RunPixelTest(&pass_list, 566 this->RunPixelTest(&pass_list,
575 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")), 567 base::FilePath(FILE_PATH_LITERAL("yuv_stripes.png")),
576 FuzzyPixelOffByOneComparator(true))); 568 FuzzyPixelOffByOneComparator(true)));
577 } 569 }
578 570
579 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) { 571 TEST_F(VideoGLRendererPixelTest, OffsetYUVRect) {
580 gfx::Rect rect(this->device_viewport_size_); 572 gfx::Rect rect(this->device_viewport_size_);
581 573
582 RenderPass::Id id(1, 1); 574 RenderPass::Id id(1, 1);
583 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 575 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
584 576
585 SharedQuadState* shared_state = 577 SharedQuadState* shared_state =
586 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 578 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
587 579
588 // Intentionally sets frame format to I420 for testing coverage. 580 // Intentionally sets frame format to I420 for testing coverage.
589 scoped_ptr<YUVVideoDrawQuad> yuv_quad = CreateTestYUVVideoDrawQuad_Striped( 581 CreateTestYUVVideoDrawQuad_Striped(shared_state,
590 shared_state, 582 media::VideoFrame::I420,
591 media::VideoFrame::I420, 583 false,
592 false, 584 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f),
593 gfx::RectF(0.125f, 0.25f, 0.75f, 0.5f)); 585 pass.get());
594
595 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
596 586
597 RenderPassList pass_list; 587 RenderPassList pass_list;
598 pass_list.push_back(pass.Pass()); 588 pass_list.push_back(pass.Pass());
599 589
600 EXPECT_TRUE(this->RunPixelTest( 590 EXPECT_TRUE(this->RunPixelTest(
601 &pass_list, 591 &pass_list,
602 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")), 592 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_offset.png")),
603 FuzzyPixelOffByOneComparator(true))); 593 FuzzyPixelOffByOneComparator(true)));
604 } 594 }
605 595
606 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) { 596 TEST_F(VideoGLRendererPixelTest, SimpleYUVRectBlack) {
607 gfx::Rect rect(this->device_viewport_size_); 597 gfx::Rect rect(this->device_viewport_size_);
608 598
609 RenderPass::Id id(1, 1); 599 RenderPass::Id id(1, 1);
610 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 600 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
611 601
612 SharedQuadState* shared_state = 602 SharedQuadState* shared_state =
613 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 603 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
614 604
615 // In MPEG color range YUV values of (15,128,128) should produce black. 605 // In MPEG color range YUV values of (15,128,128) should produce black.
616 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 606 CreateTestYUVVideoDrawQuad_Solid(shared_state,
617 CreateTestYUVVideoDrawQuad_Solid(shared_state, 607 media::VideoFrame::YV12,
618 media::VideoFrame::YV12, 608 false,
619 false, 609 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
620 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 610 15,
621 15, 611 128,
622 128, 612 128,
623 128); 613 pass.get());
624
625 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
626 614
627 RenderPassList pass_list; 615 RenderPassList pass_list;
628 pass_list.push_back(pass.Pass()); 616 pass_list.push_back(pass.Pass());
629 617
630 // If we didn't get black out of the YUV values above, then we probably have a 618 // If we didn't get black out of the YUV values above, then we probably have a
631 // color range issue. 619 // color range issue.
632 EXPECT_TRUE(this->RunPixelTest(&pass_list, 620 EXPECT_TRUE(this->RunPixelTest(&pass_list,
633 base::FilePath(FILE_PATH_LITERAL("black.png")), 621 base::FilePath(FILE_PATH_LITERAL("black.png")),
634 FuzzyPixelOffByOneComparator(true))); 622 FuzzyPixelOffByOneComparator(true)));
635 } 623 }
636 624
637 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) { 625 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRect) {
638 gfx::Rect rect(this->device_viewport_size_); 626 gfx::Rect rect(this->device_viewport_size_);
639 627
640 RenderPass::Id id(1, 1); 628 RenderPass::Id id(1, 1);
641 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 629 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
642 630
643 SharedQuadState* shared_state = 631 SharedQuadState* shared_state =
644 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 632 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
645 633
646 // YUV of (149,43,21) should be green (0,255,0) in RGB. 634 // YUV of (149,43,21) should be green (0,255,0) in RGB.
647 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 635 CreateTestYUVVideoDrawQuad_Solid(shared_state,
648 CreateTestYUVVideoDrawQuad_Solid(shared_state, 636 media::VideoFrame::YV12J,
649 media::VideoFrame::YV12J, 637 false,
650 false, 638 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
651 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 639 149,
652 149, 640 43,
653 43, 641 21,
654 21); 642 pass.get());
655
656 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
657 643
658 RenderPassList pass_list; 644 RenderPassList pass_list;
659 pass_list.push_back(pass.Pass()); 645 pass_list.push_back(pass.Pass());
660 646
661 EXPECT_TRUE(this->RunPixelTest(&pass_list, 647 EXPECT_TRUE(this->RunPixelTest(&pass_list,
662 base::FilePath(FILE_PATH_LITERAL("green.png")), 648 base::FilePath(FILE_PATH_LITERAL("green.png")),
663 FuzzyPixelOffByOneComparator(true))); 649 FuzzyPixelOffByOneComparator(true)));
664 } 650 }
665 651
666 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) { 652 TEST_F(VideoGLRendererPixelTest, SimpleYUVJRectGrey) {
667 gfx::Rect rect(this->device_viewport_size_); 653 gfx::Rect rect(this->device_viewport_size_);
668 654
669 RenderPass::Id id(1, 1); 655 RenderPass::Id id(1, 1);
670 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 656 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
671 657
672 SharedQuadState* shared_state = 658 SharedQuadState* shared_state =
673 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 659 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
674 660
675 // Dark grey in JPEG color range (in MPEG, this is black). 661 // Dark grey in JPEG color range (in MPEG, this is black).
676 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 662 CreateTestYUVVideoDrawQuad_Solid(shared_state,
677 CreateTestYUVVideoDrawQuad_Solid(shared_state, 663 media::VideoFrame::YV12J,
678 media::VideoFrame::YV12J, 664 false,
679 false, 665 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
680 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f), 666 15,
681 15, 667 128,
682 128, 668 128,
683 128); 669 pass.get());
684
685 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>());
686 670
687 RenderPassList pass_list; 671 RenderPassList pass_list;
688 pass_list.push_back(pass.Pass()); 672 pass_list.push_back(pass.Pass());
689 673
690 EXPECT_TRUE( 674 EXPECT_TRUE(
691 this->RunPixelTest(&pass_list, 675 this->RunPixelTest(&pass_list,
692 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")), 676 base::FilePath(FILE_PATH_LITERAL("dark_grey.png")),
693 FuzzyPixelOffByOneComparator(true))); 677 FuzzyPixelOffByOneComparator(true)));
694 } 678 }
695 679
696 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) { 680 TEST_F(VideoGLRendererPixelTest, SimpleYUVARect) {
697 gfx::Rect rect(this->device_viewport_size_); 681 gfx::Rect rect(this->device_viewport_size_);
698 682
699 RenderPass::Id id(1, 1); 683 RenderPass::Id id(1, 1);
700 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 684 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
701 685
702 SharedQuadState* shared_state = 686 SharedQuadState* shared_state =
703 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 687 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
704 688
705 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 689 CreateTestYUVVideoDrawQuad_Striped(shared_state,
706 CreateTestYUVVideoDrawQuad_Striped(shared_state, 690 media::VideoFrame::YV12A,
707 media::VideoFrame::YV12A, 691 false,
708 false, 692 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
709 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f)); 693 pass.get());
710 694
711 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>()); 695 SolidColorDrawQuad* color_quad =
712 696 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
713 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
714 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false); 697 color_quad->SetNew(shared_state, rect, rect, SK_ColorWHITE, false);
715 698
716 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
717
718 RenderPassList pass_list; 699 RenderPassList pass_list;
719 pass_list.push_back(pass.Pass()); 700 pass_list.push_back(pass.Pass());
720 701
721 EXPECT_TRUE(this->RunPixelTest( 702 EXPECT_TRUE(this->RunPixelTest(
722 &pass_list, 703 &pass_list,
723 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")), 704 base::FilePath(FILE_PATH_LITERAL("yuv_stripes_alpha.png")),
724 FuzzyPixelOffByOneComparator(true))); 705 FuzzyPixelOffByOneComparator(true)));
725 } 706 }
726 707
727 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) { 708 TEST_F(VideoGLRendererPixelTest, FullyTransparentYUVARect) {
728 gfx::Rect rect(this->device_viewport_size_); 709 gfx::Rect rect(this->device_viewport_size_);
729 710
730 RenderPass::Id id(1, 1); 711 RenderPass::Id id(1, 1);
731 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 712 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
732 713
733 SharedQuadState* shared_state = 714 SharedQuadState* shared_state =
734 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 715 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
735 716
736 scoped_ptr<YUVVideoDrawQuad> yuv_quad = 717 CreateTestYUVVideoDrawQuad_Striped(shared_state,
737 CreateTestYUVVideoDrawQuad_Striped(shared_state, 718 media::VideoFrame::YV12A,
738 media::VideoFrame::YV12A, 719 true,
739 true, 720 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f),
740 gfx::RectF(0.0f, 0.0f, 1.0f, 1.0f)); 721 pass.get());
741 722
742 pass->quad_list.push_back(yuv_quad.PassAs<DrawQuad>()); 723 SolidColorDrawQuad* color_quad =
743 724 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
744 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create();
745 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false); 725 color_quad->SetNew(shared_state, rect, rect, SK_ColorBLACK, false);
746 726
747 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
748
749 RenderPassList pass_list; 727 RenderPassList pass_list;
750 pass_list.push_back(pass.Pass()); 728 pass_list.push_back(pass.Pass());
751 729
752 EXPECT_TRUE(this->RunPixelTest( 730 EXPECT_TRUE(this->RunPixelTest(
753 &pass_list, 731 &pass_list,
754 base::FilePath(FILE_PATH_LITERAL("black.png")), 732 base::FilePath(FILE_PATH_LITERAL("black.png")),
755 ExactPixelComparator(true))); 733 ExactPixelComparator(true)));
756 } 734 }
757 735
758 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { 736 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) {
759 gfx::Rect viewport_rect(this->device_viewport_size_); 737 gfx::Rect viewport_rect(this->device_viewport_size_);
760 738
761 RenderPass::Id root_pass_id(1, 1); 739 RenderPass::Id root_pass_id(1, 1);
762 scoped_ptr<RenderPass> root_pass = 740 scoped_ptr<RenderPass> root_pass =
763 CreateTestRootRenderPass(root_pass_id, viewport_rect); 741 CreateTestRootRenderPass(root_pass_id, viewport_rect);
764 742
765 RenderPass::Id child_pass_id(2, 2); 743 RenderPass::Id child_pass_id(2, 2);
766 gfx::Rect pass_rect(this->device_viewport_size_); 744 gfx::Rect pass_rect(this->device_viewport_size_);
767 gfx::Transform transform_to_root; 745 gfx::Transform transform_to_root;
768 scoped_ptr<RenderPass> child_pass = 746 scoped_ptr<RenderPass> child_pass =
769 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 747 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
770 748
771 gfx::Transform content_to_target_transform; 749 gfx::Transform content_to_target_transform;
772 SharedQuadState* shared_state = CreateTestSharedQuadState( 750 SharedQuadState* shared_state = CreateTestSharedQuadState(
773 child_pass.get(), content_to_target_transform, viewport_rect); 751 content_to_target_transform, viewport_rect, child_pass.get());
774 shared_state->opacity = 0.5f; 752 shared_state->opacity = 0.5f;
775 753
776 gfx::Rect blue_rect(0, 754 gfx::Rect blue_rect(0,
777 0, 755 0,
778 this->device_viewport_size_.width(), 756 this->device_viewport_size_.width(),
779 this->device_viewport_size_.height() / 2); 757 this->device_viewport_size_.height() / 2);
780 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 758 SolidColorDrawQuad* blue =
759 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
781 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 760 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
782 gfx::Rect yellow_rect(0, 761 gfx::Rect yellow_rect(0,
783 this->device_viewport_size_.height() / 2, 762 this->device_viewport_size_.height() / 2,
784 this->device_viewport_size_.width(), 763 this->device_viewport_size_.width(),
785 this->device_viewport_size_.height() / 2); 764 this->device_viewport_size_.height() / 2);
786 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 765 SolidColorDrawQuad* yellow =
766 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
787 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 767 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
788 768
789 SharedQuadState* blank_state = CreateTestSharedQuadState( 769 SharedQuadState* blank_state = CreateTestSharedQuadState(
790 child_pass.get(), content_to_target_transform, viewport_rect); 770 content_to_target_transform, viewport_rect, child_pass.get());
791 771
792 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 772 SolidColorDrawQuad* white =
773 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
793 white->SetNew( 774 white->SetNew(
794 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 775 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
795 776
796 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
797 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
798 child_pass->quad_list.push_back(white.PassAs<DrawQuad>());
799
800 SharedQuadState* pass_shared_state = 777 SharedQuadState* pass_shared_state =
801 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 778 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
802 779
803 SkScalar matrix[20]; 780 SkScalar matrix[20];
804 float amount = 0.5f; 781 float amount = 0.5f;
805 matrix[0] = 0.213f + 0.787f * amount; 782 matrix[0] = 0.213f + 0.787f * amount;
806 matrix[1] = 0.715f - 0.715f * amount; 783 matrix[1] = 0.715f - 0.715f * amount;
807 matrix[2] = 1.f - (matrix[0] + matrix[1]); 784 matrix[2] = 1.f - (matrix[0] + matrix[1]);
808 matrix[3] = matrix[4] = 0; 785 matrix[3] = matrix[4] = 0;
809 matrix[5] = 0.213f - 0.213f * amount; 786 matrix[5] = 0.213f - 0.213f * amount;
810 matrix[6] = 0.715f + 0.285f * amount; 787 matrix[6] = 0.715f + 0.285f * amount;
811 matrix[7] = 1.f - (matrix[5] + matrix[6]); 788 matrix[7] = 1.f - (matrix[5] + matrix[6]);
812 matrix[8] = matrix[9] = 0; 789 matrix[8] = matrix[9] = 0;
813 matrix[10] = 0.213f - 0.213f * amount; 790 matrix[10] = 0.213f - 0.213f * amount;
814 matrix[11] = 0.715f - 0.715f * amount; 791 matrix[11] = 0.715f - 0.715f * amount;
815 matrix[12] = 1.f - (matrix[10] + matrix[11]); 792 matrix[12] = 1.f - (matrix[10] + matrix[11]);
816 matrix[13] = matrix[14] = 0; 793 matrix[13] = matrix[14] = 0;
817 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; 794 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
818 matrix[18] = 1; 795 matrix[18] = 1;
819 skia::RefPtr<SkColorFilter> colorFilter( 796 skia::RefPtr<SkColorFilter> colorFilter(
820 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 797 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
821 skia::RefPtr<SkImageFilter> filter = 798 skia::RefPtr<SkImageFilter> filter =
822 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL)); 799 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL));
823 FilterOperations filters; 800 FilterOperations filters;
824 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 801 filters.Append(FilterOperation::CreateReferenceFilter(filter));
825 802
826 scoped_ptr<RenderPassDrawQuad> render_pass_quad = 803 RenderPassDrawQuad* render_pass_quad =
827 RenderPassDrawQuad::Create(); 804 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
828 render_pass_quad->SetNew(pass_shared_state, 805 render_pass_quad->SetNew(pass_shared_state,
829 pass_rect, 806 pass_rect,
830 pass_rect, 807 pass_rect,
831 child_pass_id, 808 child_pass_id,
832 false, 809 false,
833 0, 810 0,
834 pass_rect, 811 pass_rect,
835 gfx::RectF(), 812 gfx::RectF(),
836 filters, 813 filters,
837 FilterOperations()); 814 FilterOperations());
838 815
839 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
840
841 RenderPassList pass_list; 816 RenderPassList pass_list;
842 pass_list.push_back(child_pass.Pass()); 817 pass_list.push_back(child_pass.Pass());
843 pass_list.push_back(root_pass.Pass()); 818 pass_list.push_back(root_pass.Pass());
844 819
845 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 820 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
846 // renderer so use a fuzzy comparator. 821 // renderer so use a fuzzy comparator.
847 EXPECT_TRUE(this->RunPixelTest( 822 EXPECT_TRUE(this->RunPixelTest(
848 &pass_list, 823 &pass_list,
849 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 824 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
850 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 825 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
851 } 826 }
852 827
853 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) { 828 TYPED_TEST(RendererPixelTest, FastPassSaturateFilter) {
854 gfx::Rect viewport_rect(this->device_viewport_size_); 829 gfx::Rect viewport_rect(this->device_viewport_size_);
855 830
856 RenderPass::Id root_pass_id(1, 1); 831 RenderPass::Id root_pass_id(1, 1);
857 scoped_ptr<RenderPass> root_pass = 832 scoped_ptr<RenderPass> root_pass =
858 CreateTestRootRenderPass(root_pass_id, viewport_rect); 833 CreateTestRootRenderPass(root_pass_id, viewport_rect);
859 834
860 RenderPass::Id child_pass_id(2, 2); 835 RenderPass::Id child_pass_id(2, 2);
861 gfx::Rect pass_rect(this->device_viewport_size_); 836 gfx::Rect pass_rect(this->device_viewport_size_);
862 gfx::Transform transform_to_root; 837 gfx::Transform transform_to_root;
863 scoped_ptr<RenderPass> child_pass = 838 scoped_ptr<RenderPass> child_pass =
864 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 839 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
865 840
866 gfx::Transform content_to_target_transform; 841 gfx::Transform content_to_target_transform;
867 SharedQuadState* shared_state = CreateTestSharedQuadState( 842 SharedQuadState* shared_state = CreateTestSharedQuadState(
868 child_pass.get(), content_to_target_transform, viewport_rect); 843 content_to_target_transform, viewport_rect, child_pass.get());
869 shared_state->opacity = 0.5f; 844 shared_state->opacity = 0.5f;
870 845
871 gfx::Rect blue_rect(0, 846 gfx::Rect blue_rect(0,
872 0, 847 0,
873 this->device_viewport_size_.width(), 848 this->device_viewport_size_.width(),
874 this->device_viewport_size_.height() / 2); 849 this->device_viewport_size_.height() / 2);
875 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 850 SolidColorDrawQuad* blue =
851 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
876 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 852 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
877 gfx::Rect yellow_rect(0, 853 gfx::Rect yellow_rect(0,
878 this->device_viewport_size_.height() / 2, 854 this->device_viewport_size_.height() / 2,
879 this->device_viewport_size_.width(), 855 this->device_viewport_size_.width(),
880 this->device_viewport_size_.height() / 2); 856 this->device_viewport_size_.height() / 2);
881 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 857 SolidColorDrawQuad* yellow =
858 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
882 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 859 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
883 860
884 SharedQuadState* blank_state = CreateTestSharedQuadState( 861 SharedQuadState* blank_state = CreateTestSharedQuadState(
885 child_pass.get(), content_to_target_transform, viewport_rect); 862 content_to_target_transform, viewport_rect, child_pass.get());
886 863
887 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 864 SolidColorDrawQuad* white =
865 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
888 white->SetNew( 866 white->SetNew(
889 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 867 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
890 868
891 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
892 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
893 child_pass->quad_list.push_back(white.PassAs<DrawQuad>());
894
895 SharedQuadState* pass_shared_state = 869 SharedQuadState* pass_shared_state =
896 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 870 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
897 871
898 FilterOperations filters; 872 FilterOperations filters;
899 filters.Append(FilterOperation::CreateSaturateFilter(0.5f)); 873 filters.Append(FilterOperation::CreateSaturateFilter(0.5f));
900 874
901 scoped_ptr<RenderPassDrawQuad> render_pass_quad = 875 RenderPassDrawQuad* render_pass_quad =
902 RenderPassDrawQuad::Create(); 876 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
903 render_pass_quad->SetNew(pass_shared_state, 877 render_pass_quad->SetNew(pass_shared_state,
904 pass_rect, 878 pass_rect,
905 pass_rect, 879 pass_rect,
906 child_pass_id, 880 child_pass_id,
907 false, 881 false,
908 0, 882 0,
909 pass_rect, 883 pass_rect,
910 gfx::RectF(), 884 gfx::RectF(),
911 filters, 885 filters,
912 FilterOperations()); 886 FilterOperations());
913 887
914 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
915
916 RenderPassList pass_list; 888 RenderPassList pass_list;
917 pass_list.push_back(child_pass.Pass()); 889 pass_list.push_back(child_pass.Pass());
918 pass_list.push_back(root_pass.Pass()); 890 pass_list.push_back(root_pass.Pass());
919 891
920 EXPECT_TRUE(this->RunPixelTest( 892 EXPECT_TRUE(this->RunPixelTest(
921 &pass_list, 893 &pass_list,
922 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 894 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
923 ExactPixelComparator(true))); 895 ExactPixelComparator(true)));
924 } 896 }
925 897
926 TYPED_TEST(RendererPixelTest, FastPassFilterChain) { 898 TYPED_TEST(RendererPixelTest, FastPassFilterChain) {
927 gfx::Rect viewport_rect(this->device_viewport_size_); 899 gfx::Rect viewport_rect(this->device_viewport_size_);
928 900
929 RenderPass::Id root_pass_id(1, 1); 901 RenderPass::Id root_pass_id(1, 1);
930 scoped_ptr<RenderPass> root_pass = 902 scoped_ptr<RenderPass> root_pass =
931 CreateTestRootRenderPass(root_pass_id, viewport_rect); 903 CreateTestRootRenderPass(root_pass_id, viewport_rect);
932 904
933 RenderPass::Id child_pass_id(2, 2); 905 RenderPass::Id child_pass_id(2, 2);
934 gfx::Rect pass_rect(this->device_viewport_size_); 906 gfx::Rect pass_rect(this->device_viewport_size_);
935 gfx::Transform transform_to_root; 907 gfx::Transform transform_to_root;
936 scoped_ptr<RenderPass> child_pass = 908 scoped_ptr<RenderPass> child_pass =
937 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 909 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
938 910
939 gfx::Transform content_to_target_transform; 911 gfx::Transform content_to_target_transform;
940 SharedQuadState* shared_state = CreateTestSharedQuadState( 912 SharedQuadState* shared_state = CreateTestSharedQuadState(
941 child_pass.get(), content_to_target_transform, viewport_rect); 913 content_to_target_transform, viewport_rect, child_pass.get());
942 shared_state->opacity = 0.5f; 914 shared_state->opacity = 0.5f;
943 915
944 gfx::Rect blue_rect(0, 916 gfx::Rect blue_rect(0,
945 0, 917 0,
946 this->device_viewport_size_.width(), 918 this->device_viewport_size_.width(),
947 this->device_viewport_size_.height() / 2); 919 this->device_viewport_size_.height() / 2);
948 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 920 SolidColorDrawQuad* blue =
921 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
949 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 922 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
950 gfx::Rect yellow_rect(0, 923 gfx::Rect yellow_rect(0,
951 this->device_viewport_size_.height() / 2, 924 this->device_viewport_size_.height() / 2,
952 this->device_viewport_size_.width(), 925 this->device_viewport_size_.width(),
953 this->device_viewport_size_.height() / 2); 926 this->device_viewport_size_.height() / 2);
954 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 927 SolidColorDrawQuad* yellow =
928 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
955 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 929 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
956 930
957 SharedQuadState* blank_state = CreateTestSharedQuadState( 931 SharedQuadState* blank_state = CreateTestSharedQuadState(
958 child_pass.get(), content_to_target_transform, viewport_rect); 932 content_to_target_transform, viewport_rect, child_pass.get());
959 933
960 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 934 SolidColorDrawQuad* white =
935 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
961 white->SetNew( 936 white->SetNew(
962 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 937 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
963 938
964 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
965 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
966 child_pass->quad_list.push_back(white.PassAs<DrawQuad>());
967
968 SharedQuadState* pass_shared_state = 939 SharedQuadState* pass_shared_state =
969 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 940 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
970 941
971 FilterOperations filters; 942 FilterOperations filters;
972 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f)); 943 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f));
973 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f)); 944 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
974 945
975 scoped_ptr<RenderPassDrawQuad> render_pass_quad = 946 RenderPassDrawQuad* render_pass_quad =
976 RenderPassDrawQuad::Create(); 947 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
977 render_pass_quad->SetNew(pass_shared_state, 948 render_pass_quad->SetNew(pass_shared_state,
978 pass_rect, 949 pass_rect,
979 pass_rect, 950 pass_rect,
980 child_pass_id, 951 child_pass_id,
981 false, 952 false,
982 0, 953 0,
983 pass_rect, 954 pass_rect,
984 gfx::RectF(), 955 gfx::RectF(),
985 filters, 956 filters,
986 FilterOperations()); 957 FilterOperations());
987 958
988 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
989
990 RenderPassList pass_list; 959 RenderPassList pass_list;
991 pass_list.push_back(child_pass.Pass()); 960 pass_list.push_back(child_pass.Pass());
992 pass_list.push_back(root_pass.Pass()); 961 pass_list.push_back(root_pass.Pass());
993 962
994 EXPECT_TRUE(this->RunPixelTest( 963 EXPECT_TRUE(this->RunPixelTest(
995 &pass_list, 964 &pass_list,
996 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")), 965 base::FilePath(FILE_PATH_LITERAL("blue_yellow_filter_chain.png")),
997 ExactPixelComparator(true))); 966 ExactPixelComparator(true)));
998 } 967 }
999 968
1000 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { 969 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) {
1001 gfx::Rect viewport_rect(this->device_viewport_size_); 970 gfx::Rect viewport_rect(this->device_viewport_size_);
1002 971
1003 RenderPass::Id root_pass_id(1, 1); 972 RenderPass::Id root_pass_id(1, 1);
1004 scoped_ptr<RenderPass> root_pass = 973 scoped_ptr<RenderPass> root_pass =
1005 CreateTestRootRenderPass(root_pass_id, viewport_rect); 974 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1006 975
1007 RenderPass::Id child_pass_id(2, 2); 976 RenderPass::Id child_pass_id(2, 2);
1008 gfx::Rect pass_rect(this->device_viewport_size_); 977 gfx::Rect pass_rect(this->device_viewport_size_);
1009 gfx::Transform transform_to_root; 978 gfx::Transform transform_to_root;
1010 scoped_ptr<RenderPass> child_pass = 979 scoped_ptr<RenderPass> child_pass =
1011 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 980 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
1012 981
1013 gfx::Transform content_to_target_transform; 982 gfx::Transform content_to_target_transform;
1014 SharedQuadState* shared_state = CreateTestSharedQuadState( 983 SharedQuadState* shared_state = CreateTestSharedQuadState(
1015 child_pass.get(), content_to_target_transform, viewport_rect); 984 content_to_target_transform, viewport_rect, child_pass.get());
1016 shared_state->opacity = 0.5f; 985 shared_state->opacity = 0.5f;
1017 986
1018 gfx::Rect blue_rect(0, 987 gfx::Rect blue_rect(0,
1019 0, 988 0,
1020 this->device_viewport_size_.width(), 989 this->device_viewport_size_.width(),
1021 this->device_viewport_size_.height() / 2); 990 this->device_viewport_size_.height() / 2);
1022 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 991 SolidColorDrawQuad* blue =
992 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1023 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 993 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
1024 gfx::Rect yellow_rect(0, 994 gfx::Rect yellow_rect(0,
1025 this->device_viewport_size_.height() / 2, 995 this->device_viewport_size_.height() / 2,
1026 this->device_viewport_size_.width(), 996 this->device_viewport_size_.width(),
1027 this->device_viewport_size_.height() / 2); 997 this->device_viewport_size_.height() / 2);
1028 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 998 SolidColorDrawQuad* yellow =
999 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1029 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 1000 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
1030 1001
1031 SharedQuadState* blank_state = CreateTestSharedQuadState( 1002 SharedQuadState* blank_state = CreateTestSharedQuadState(
1032 child_pass.get(), content_to_target_transform, viewport_rect); 1003 content_to_target_transform, viewport_rect, child_pass.get());
1033 1004
1034 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 1005 SolidColorDrawQuad* white =
1006 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1035 white->SetNew( 1007 white->SetNew(
1036 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1008 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1037 1009
1038 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1039 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
1040 child_pass->quad_list.push_back(white.PassAs<DrawQuad>());
1041
1042 SharedQuadState* pass_shared_state = 1010 SharedQuadState* pass_shared_state =
1043 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 1011 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1044 1012
1045 SkScalar matrix[20]; 1013 SkScalar matrix[20];
1046 float amount = 0.5f; 1014 float amount = 0.5f;
1047 matrix[0] = 0.213f + 0.787f * amount; 1015 matrix[0] = 0.213f + 0.787f * amount;
1048 matrix[1] = 0.715f - 0.715f * amount; 1016 matrix[1] = 0.715f - 0.715f * amount;
1049 matrix[2] = 1.f - (matrix[0] + matrix[1]); 1017 matrix[2] = 1.f - (matrix[0] + matrix[1]);
1050 matrix[3] = 0; 1018 matrix[3] = 0;
1051 matrix[4] = 20.f; 1019 matrix[4] = 20.f;
1052 matrix[5] = 0.213f - 0.213f * amount; 1020 matrix[5] = 0.213f - 0.213f * amount;
1053 matrix[6] = 0.715f + 0.285f * amount; 1021 matrix[6] = 0.715f + 0.285f * amount;
1054 matrix[7] = 1.f - (matrix[5] + matrix[6]); 1022 matrix[7] = 1.f - (matrix[5] + matrix[6]);
1055 matrix[8] = 0; 1023 matrix[8] = 0;
1056 matrix[9] = 200.f; 1024 matrix[9] = 200.f;
1057 matrix[10] = 0.213f - 0.213f * amount; 1025 matrix[10] = 0.213f - 0.213f * amount;
1058 matrix[11] = 0.715f - 0.715f * amount; 1026 matrix[11] = 0.715f - 0.715f * amount;
1059 matrix[12] = 1.f - (matrix[10] + matrix[11]); 1027 matrix[12] = 1.f - (matrix[10] + matrix[11]);
1060 matrix[13] = 0; 1028 matrix[13] = 0;
1061 matrix[14] = 1.5f; 1029 matrix[14] = 1.5f;
1062 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; 1030 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1063 matrix[18] = 1; 1031 matrix[18] = 1;
1064 skia::RefPtr<SkColorFilter> colorFilter( 1032 skia::RefPtr<SkColorFilter> colorFilter(
1065 skia::AdoptRef(SkColorMatrixFilter::Create(matrix))); 1033 skia::AdoptRef(SkColorMatrixFilter::Create(matrix)));
1066 skia::RefPtr<SkImageFilter> filter = 1034 skia::RefPtr<SkImageFilter> filter =
1067 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL)); 1035 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL));
1068 FilterOperations filters; 1036 FilterOperations filters;
1069 filters.Append(FilterOperation::CreateReferenceFilter(filter)); 1037 filters.Append(FilterOperation::CreateReferenceFilter(filter));
1070 1038
1071 scoped_ptr<RenderPassDrawQuad> render_pass_quad = 1039 RenderPassDrawQuad* render_pass_quad =
1072 RenderPassDrawQuad::Create(); 1040 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1073 render_pass_quad->SetNew(pass_shared_state, 1041 render_pass_quad->SetNew(pass_shared_state,
1074 pass_rect, 1042 pass_rect,
1075 pass_rect, 1043 pass_rect,
1076 child_pass_id, 1044 child_pass_id,
1077 false, 1045 false,
1078 0, 1046 0,
1079 pass_rect, 1047 pass_rect,
1080 gfx::RectF(), 1048 gfx::RectF(),
1081 filters, 1049 filters,
1082 FilterOperations()); 1050 FilterOperations());
1083 1051
1084 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>());
1085 RenderPassList pass_list; 1052 RenderPassList pass_list;
1086 1053
1087 pass_list.push_back(child_pass.Pass()); 1054 pass_list.push_back(child_pass.Pass());
1088 pass_list.push_back(root_pass.Pass()); 1055 pass_list.push_back(root_pass.Pass());
1089 1056
1090 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 1057 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
1091 // renderer so use a fuzzy comparator. 1058 // renderer so use a fuzzy comparator.
1092 EXPECT_TRUE(this->RunPixelTest( 1059 EXPECT_TRUE(this->RunPixelTest(
1093 &pass_list, 1060 &pass_list,
1094 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), 1061 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")),
1095 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false))); 1062 FuzzyForSoftwareOnlyPixelComparator<TypeParam>(false)));
1096 } 1063 }
1097 1064
1098 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTexture) { 1065 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTexture) {
1099 gfx::Rect viewport_rect(this->device_viewport_size_); 1066 gfx::Rect viewport_rect(this->device_viewport_size_);
1100 1067
1101 RenderPass::Id root_pass_id(1, 1); 1068 RenderPass::Id root_pass_id(1, 1);
1102 scoped_ptr<RenderPass> root_pass = 1069 scoped_ptr<RenderPass> root_pass =
1103 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1070 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1104 1071
1105 RenderPass::Id child_pass_id(2, 2); 1072 RenderPass::Id child_pass_id(2, 2);
1106 gfx::Rect pass_rect(this->device_viewport_size_); 1073 gfx::Rect pass_rect(this->device_viewport_size_);
1107 gfx::Transform transform_to_root; 1074 gfx::Transform transform_to_root;
1108 scoped_ptr<RenderPass> child_pass = 1075 scoped_ptr<RenderPass> child_pass =
1109 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1076 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
1110 1077
1111 gfx::Transform content_to_target_transform; 1078 gfx::Transform content_to_target_transform;
1112 SharedQuadState* shared_state = CreateTestSharedQuadState( 1079 SharedQuadState* shared_state = CreateTestSharedQuadState(
1113 child_pass.get(), content_to_target_transform, viewport_rect); 1080 content_to_target_transform, viewport_rect, child_pass.get());
1114 1081
1115 gfx::Rect blue_rect(0, 1082 gfx::Rect blue_rect(0,
1116 0, 1083 0,
1117 this->device_viewport_size_.width(), 1084 this->device_viewport_size_.width(),
1118 this->device_viewport_size_.height() / 2); 1085 this->device_viewport_size_.height() / 2);
1119 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1086 SolidColorDrawQuad* blue =
1087 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1120 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 1088 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
1121 gfx::Rect yellow_rect(0, 1089 gfx::Rect yellow_rect(0,
1122 this->device_viewport_size_.height() / 2, 1090 this->device_viewport_size_.height() / 2,
1123 this->device_viewport_size_.width(), 1091 this->device_viewport_size_.width(),
1124 this->device_viewport_size_.height() / 2); 1092 this->device_viewport_size_.height() / 2);
1125 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 1093 SolidColorDrawQuad* yellow =
1094 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1126 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 1095 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
1127 1096
1128 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1129 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
1130
1131 SharedQuadState* pass_shared_state = 1097 SharedQuadState* pass_shared_state =
1132 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 1098 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1133 root_pass->quad_list.push_back(CreateTestRenderPassDrawQuad( 1099 CreateTestRenderPassDrawQuad(
1134 pass_shared_state, pass_rect, child_pass_id)); 1100 pass_shared_state, pass_rect, child_pass_id, root_pass.get());
1135 1101
1136 RenderPassList pass_list; 1102 RenderPassList pass_list;
1137 pass_list.push_back(child_pass.Pass()); 1103 pass_list.push_back(child_pass.Pass());
1138 pass_list.push_back(root_pass.Pass()); 1104 pass_list.push_back(root_pass.Pass());
1139 1105
1140 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); 1106 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75));
1141 1107
1142 EXPECT_TRUE(this->RunPixelTest( 1108 EXPECT_TRUE(this->RunPixelTest(
1143 &pass_list, 1109 &pass_list,
1144 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), 1110 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")),
1145 ExactPixelComparator(true))); 1111 ExactPixelComparator(true)));
1146 } 1112 }
1147 1113
1148 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTextureWithAntiAliasing) { 1114 TYPED_TEST(RendererPixelTest, EnlargedRenderPassTextureWithAntiAliasing) {
1149 gfx::Rect viewport_rect(this->device_viewport_size_); 1115 gfx::Rect viewport_rect(this->device_viewport_size_);
1150 1116
1151 RenderPass::Id root_pass_id(1, 1); 1117 RenderPass::Id root_pass_id(1, 1);
1152 scoped_ptr<RenderPass> root_pass = 1118 scoped_ptr<RenderPass> root_pass =
1153 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1119 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1154 1120
1155 RenderPass::Id child_pass_id(2, 2); 1121 RenderPass::Id child_pass_id(2, 2);
1156 gfx::Rect pass_rect(this->device_viewport_size_); 1122 gfx::Rect pass_rect(this->device_viewport_size_);
1157 gfx::Transform transform_to_root; 1123 gfx::Transform transform_to_root;
1158 scoped_ptr<RenderPass> child_pass = 1124 scoped_ptr<RenderPass> child_pass =
1159 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1125 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
1160 1126
1161 gfx::Transform content_to_target_transform; 1127 gfx::Transform content_to_target_transform;
1162 SharedQuadState* shared_state = CreateTestSharedQuadState( 1128 SharedQuadState* shared_state = CreateTestSharedQuadState(
1163 child_pass.get(), content_to_target_transform, viewport_rect); 1129 content_to_target_transform, viewport_rect, child_pass.get());
1164 1130
1165 gfx::Rect blue_rect(0, 1131 gfx::Rect blue_rect(0,
1166 0, 1132 0,
1167 this->device_viewport_size_.width(), 1133 this->device_viewport_size_.width(),
1168 this->device_viewport_size_.height() / 2); 1134 this->device_viewport_size_.height() / 2);
1169 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1135 SolidColorDrawQuad* blue =
1136 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1170 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 1137 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
1171 gfx::Rect yellow_rect(0, 1138 gfx::Rect yellow_rect(0,
1172 this->device_viewport_size_.height() / 2, 1139 this->device_viewport_size_.height() / 2,
1173 this->device_viewport_size_.width(), 1140 this->device_viewport_size_.width(),
1174 this->device_viewport_size_.height() / 2); 1141 this->device_viewport_size_.height() / 2);
1175 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 1142 SolidColorDrawQuad* yellow =
1143 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1176 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false); 1144 yellow->SetNew(shared_state, yellow_rect, yellow_rect, SK_ColorYELLOW, false);
1177 1145
1178 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1179 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
1180
1181 gfx::Transform aa_transform; 1146 gfx::Transform aa_transform;
1182 aa_transform.Translate(0.5, 0.0); 1147 aa_transform.Translate(0.5, 0.0);
1183 1148
1184 SharedQuadState* pass_shared_state = 1149 SharedQuadState* pass_shared_state =
1185 CreateTestSharedQuadState(root_pass.get(), aa_transform, pass_rect); 1150 CreateTestSharedQuadState(aa_transform, pass_rect, root_pass.get());
1186 root_pass->quad_list.push_back(CreateTestRenderPassDrawQuad( 1151 CreateTestRenderPassDrawQuad(
1187 pass_shared_state, pass_rect, child_pass_id)); 1152 pass_shared_state, pass_rect, child_pass_id, root_pass.get());
1188 1153
1189 SharedQuadState* root_shared_state = CreateTestSharedQuadState( 1154 SharedQuadState* root_shared_state = CreateTestSharedQuadState(
1190 root_pass.get(), gfx::Transform(), viewport_rect); 1155 gfx::Transform(), viewport_rect, root_pass.get());
1191 scoped_ptr<SolidColorDrawQuad> background = SolidColorDrawQuad::Create(); 1156 SolidColorDrawQuad* background =
1157 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1192 background->SetNew(root_shared_state, 1158 background->SetNew(root_shared_state,
1193 gfx::Rect(this->device_viewport_size_), 1159 gfx::Rect(this->device_viewport_size_),
1194 gfx::Rect(this->device_viewport_size_), 1160 gfx::Rect(this->device_viewport_size_),
1195 SK_ColorWHITE, 1161 SK_ColorWHITE,
1196 false); 1162 false);
1197 root_pass->quad_list.push_back(background.PassAs<DrawQuad>());
1198 1163
1199 RenderPassList pass_list; 1164 RenderPassList pass_list;
1200 pass_list.push_back(child_pass.Pass()); 1165 pass_list.push_back(child_pass.Pass());
1201 pass_list.push_back(root_pass.Pass()); 1166 pass_list.push_back(root_pass.Pass());
1202 1167
1203 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); 1168 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75));
1204 1169
1205 EXPECT_TRUE(this->RunPixelTest( 1170 EXPECT_TRUE(this->RunPixelTest(
1206 &pass_list, 1171 &pass_list,
1207 base::FilePath(FILE_PATH_LITERAL("blue_yellow_anti_aliasing.png")), 1172 base::FilePath(FILE_PATH_LITERAL("blue_yellow_anti_aliasing.png")),
1208 FuzzyPixelOffByOneComparator(true))); 1173 FuzzyPixelOffByOneComparator(true)));
1209 } 1174 }
1210 1175
1211 // This tests the case where we have a RenderPass with a mask, but the quad 1176 // This tests the case where we have a RenderPass with a mask, but the quad
1212 // for the masked surface does not include the full surface texture. 1177 // for the masked surface does not include the full surface texture.
1213 TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad) { 1178 TYPED_TEST(RendererPixelTest, RenderPassAndMaskWithPartialQuad) {
1214 gfx::Rect viewport_rect(this->device_viewport_size_); 1179 gfx::Rect viewport_rect(this->device_viewport_size_);
1215 1180
1216 RenderPass::Id root_pass_id(1, 1); 1181 RenderPass::Id root_pass_id(1, 1);
1217 scoped_ptr<RenderPass> root_pass = 1182 scoped_ptr<RenderPass> root_pass =
1218 CreateTestRootRenderPass(root_pass_id, viewport_rect); 1183 CreateTestRootRenderPass(root_pass_id, viewport_rect);
1219 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState( 1184 SharedQuadState* root_pass_shared_state = CreateTestSharedQuadState(
1220 root_pass.get(), gfx::Transform(), viewport_rect); 1185 gfx::Transform(), viewport_rect, root_pass.get());
1221 1186
1222 RenderPass::Id child_pass_id(2, 2); 1187 RenderPass::Id child_pass_id(2, 2);
1223 gfx::Transform transform_to_root; 1188 gfx::Transform transform_to_root;
1224 scoped_ptr<RenderPass> child_pass = 1189 scoped_ptr<RenderPass> child_pass =
1225 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root); 1190 CreateTestRenderPass(child_pass_id, viewport_rect, transform_to_root);
1226 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState( 1191 SharedQuadState* child_pass_shared_state = CreateTestSharedQuadState(
1227 child_pass.get(), gfx::Transform(), viewport_rect); 1192 gfx::Transform(), viewport_rect, child_pass.get());
1228 1193
1229 // The child render pass is just a green box. 1194 // The child render pass is just a green box.
1230 static const SkColor kCSSGreen = 0xff008000; 1195 static const SkColor kCSSGreen = 0xff008000;
1231 scoped_ptr<SolidColorDrawQuad> green = SolidColorDrawQuad::Create(); 1196 SolidColorDrawQuad* green =
1197 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1232 green->SetNew( 1198 green->SetNew(
1233 child_pass_shared_state, viewport_rect, viewport_rect, kCSSGreen, false); 1199 child_pass_shared_state, viewport_rect, viewport_rect, kCSSGreen, false);
1234 child_pass->quad_list.push_back(green.PassAs<DrawQuad>());
1235 1200
1236 // Make a mask. 1201 // Make a mask.
1237 gfx::Rect mask_rect = viewport_rect; 1202 gfx::Rect mask_rect = viewport_rect;
1238 SkBitmap bitmap; 1203 SkBitmap bitmap;
1239 bitmap.allocPixels( 1204 bitmap.allocPixels(
1240 SkImageInfo::MakeN32Premul(mask_rect.width(), mask_rect.height())); 1205 SkImageInfo::MakeN32Premul(mask_rect.width(), mask_rect.height()));
1241 SkCanvas canvas(bitmap); 1206 SkCanvas canvas(bitmap);
1242 SkPaint paint; 1207 SkPaint paint;
1243 paint.setStyle(SkPaint::kStroke_Style); 1208 paint.setStyle(SkPaint::kStroke_Style);
1244 paint.setStrokeWidth(SkIntToScalar(4)); 1209 paint.setStrokeWidth(SkIntToScalar(4));
(...skipping 27 matching lines...) Expand all
1272 // This RenderPassDrawQuad does not include the full |viewport_rect| which is 1237 // This RenderPassDrawQuad does not include the full |viewport_rect| which is
1273 // the size of the child render pass. 1238 // the size of the child render pass.
1274 gfx::Rect sub_rect = gfx::Rect(50, 50, 100, 100); 1239 gfx::Rect sub_rect = gfx::Rect(50, 50, 100, 100);
1275 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); 1240 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x());
1276 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); 1241 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y());
1277 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); 1242 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right());
1278 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); 1243 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom());
1279 EXPECT_TRUE(child_pass->output_rect.Contains(sub_rect)); 1244 EXPECT_TRUE(child_pass->output_rect.Contains(sub_rect));
1280 1245
1281 // Set up a mask on the RenderPassDrawQuad. 1246 // Set up a mask on the RenderPassDrawQuad.
1282 scoped_ptr<RenderPassDrawQuad> mask_quad = RenderPassDrawQuad::Create(); 1247 RenderPassDrawQuad* mask_quad =
1248 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1283 mask_quad->SetNew(root_pass_shared_state, 1249 mask_quad->SetNew(root_pass_shared_state,
1284 sub_rect, 1250 sub_rect,
1285 sub_rect, 1251 sub_rect,
1286 child_pass_id, 1252 child_pass_id,
1287 false, // is_replica 1253 false, // is_replica
1288 mask_resource_id, 1254 mask_resource_id,
1289 sub_rect, // contents_changed_since_last_frame 1255 sub_rect, // contents_changed_since_last_frame
1290 gfx::RectF(1.f, 1.f), // mask_uv_rect 1256 gfx::RectF(1.f, 1.f), // mask_uv_rect
1291 FilterOperations(), // foreground filters 1257 FilterOperations(), // foreground filters
1292 FilterOperations()); // background filters 1258 FilterOperations()); // background filters
1293 root_pass->quad_list.push_back(mask_quad.PassAs<DrawQuad>());
1294 1259
1295 // White background behind the masked render pass. 1260 // White background behind the masked render pass.
1296 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); 1261 SolidColorDrawQuad* white =
1262 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1297 white->SetNew(root_pass_shared_state, 1263 white->SetNew(root_pass_shared_state,
1298 viewport_rect, 1264 viewport_rect,
1299 viewport_rect, 1265 viewport_rect,
1300 SK_ColorWHITE, 1266 SK_ColorWHITE,
1301 false); 1267 false);
1302 root_pass->quad_list.push_back(white.PassAs<DrawQuad>());
1303 1268
1304 RenderPassList pass_list; 1269 RenderPassList pass_list;
1305 pass_list.push_back(child_pass.Pass()); 1270 pass_list.push_back(child_pass.Pass());
1306 pass_list.push_back(root_pass.Pass()); 1271 pass_list.push_back(root_pass.Pass());
1307 1272
1308 EXPECT_TRUE(this->RunPixelTest( 1273 EXPECT_TRUE(this->RunPixelTest(
1309 &pass_list, 1274 &pass_list,
1310 base::FilePath(FILE_PATH_LITERAL("image_mask_of_layer.png")), 1275 base::FilePath(FILE_PATH_LITERAL("image_mask_of_layer.png")),
1311 ExactPixelComparator(true))); 1276 ExactPixelComparator(true)));
1312 } 1277 }
(...skipping 15 matching lines...) Expand all
1328 RenderPass::Id filter_pass_id(2, 1); 1293 RenderPass::Id filter_pass_id(2, 1);
1329 gfx::Transform transform_to_root; 1294 gfx::Transform transform_to_root;
1330 scoped_ptr<RenderPass> filter_pass = 1295 scoped_ptr<RenderPass> filter_pass =
1331 CreateTestRenderPass(filter_pass_id, 1296 CreateTestRenderPass(filter_pass_id,
1332 filter_pass_content_rect_, 1297 filter_pass_content_rect_,
1333 transform_to_root); 1298 transform_to_root);
1334 1299
1335 // A non-visible quad in the filtering render pass. 1300 // A non-visible quad in the filtering render pass.
1336 { 1301 {
1337 SharedQuadState* shared_state = 1302 SharedQuadState* shared_state =
1338 CreateTestSharedQuadState(filter_pass.get(), 1303 CreateTestSharedQuadState(identity_content_to_target_transform,
1339 identity_content_to_target_transform, 1304 filter_pass_content_rect_,
1340 filter_pass_content_rect_); 1305 filter_pass.get());
1341 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 1306 SolidColorDrawQuad* color_quad =
1307 filter_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1342 color_quad->SetNew(shared_state, 1308 color_quad->SetNew(shared_state,
1343 filter_pass_content_rect_, 1309 filter_pass_content_rect_,
1344 filter_pass_content_rect_, 1310 filter_pass_content_rect_,
1345 SK_ColorTRANSPARENT, 1311 SK_ColorTRANSPARENT,
1346 false); 1312 false);
1347 filter_pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
1348 } 1313 }
1349 1314
1350 { 1315 {
1351 SharedQuadState* shared_state = 1316 SharedQuadState* shared_state =
1352 CreateTestSharedQuadState(filter_pass.get(), 1317 CreateTestSharedQuadState(filter_pass_to_target_transform_,
1353 filter_pass_to_target_transform_, 1318 filter_pass_content_rect_,
1354 filter_pass_content_rect_); 1319 filter_pass.get());
1355 scoped_ptr<RenderPassDrawQuad> filter_pass_quad = 1320 RenderPassDrawQuad* filter_pass_quad =
1356 RenderPassDrawQuad::Create(); 1321 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1357 filter_pass_quad->SetNew( 1322 filter_pass_quad->SetNew(
1358 shared_state, 1323 shared_state,
1359 filter_pass_content_rect_, 1324 filter_pass_content_rect_,
1360 filter_pass_content_rect_, 1325 filter_pass_content_rect_,
1361 filter_pass_id, 1326 filter_pass_id,
1362 false, // is_replica 1327 false, // is_replica
1363 0, // mask_resource_id 1328 0, // mask_resource_id
1364 filter_pass_content_rect_, // contents_changed_since_last_frame 1329 filter_pass_content_rect_, // contents_changed_since_last_frame
1365 gfx::RectF(), // mask_uv_rect 1330 gfx::RectF(), // mask_uv_rect
1366 FilterOperations(), // filters 1331 FilterOperations(), // filters
1367 this->background_filters_); 1332 this->background_filters_);
1368 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>());
1369 } 1333 }
1370 1334
1371 const int kColumnWidth = device_viewport_rect.width() / 3; 1335 const int kColumnWidth = device_viewport_rect.width() / 3;
1372 1336
1373 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); 1337 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20);
1374 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { 1338 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) {
1375 SharedQuadState* shared_state = CreateTestSharedQuadState( 1339 SharedQuadState* shared_state = CreateTestSharedQuadState(
1376 root_pass.get(), identity_content_to_target_transform, left_rect); 1340 identity_content_to_target_transform, left_rect, root_pass.get());
1377 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 1341 SolidColorDrawQuad* color_quad =
1342 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1378 color_quad->SetNew( 1343 color_quad->SetNew(
1379 shared_state, left_rect, left_rect, SK_ColorGREEN, false); 1344 shared_state, left_rect, left_rect, SK_ColorGREEN, false);
1380 root_pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
1381 left_rect += gfx::Vector2d(0, left_rect.height() + 1); 1345 left_rect += gfx::Vector2d(0, left_rect.height() + 1);
1382 } 1346 }
1383 1347
1384 gfx::Rect middle_rect = gfx::Rect(kColumnWidth+1, 0, kColumnWidth, 20); 1348 gfx::Rect middle_rect = gfx::Rect(kColumnWidth+1, 0, kColumnWidth, 20);
1385 for (int i = 0; middle_rect.y() < device_viewport_rect.height(); ++i) { 1349 for (int i = 0; middle_rect.y() < device_viewport_rect.height(); ++i) {
1386 SharedQuadState* shared_state = CreateTestSharedQuadState( 1350 SharedQuadState* shared_state = CreateTestSharedQuadState(
1387 root_pass.get(), identity_content_to_target_transform, middle_rect); 1351 identity_content_to_target_transform, middle_rect, root_pass.get());
1388 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 1352 SolidColorDrawQuad* color_quad =
1353 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1389 color_quad->SetNew( 1354 color_quad->SetNew(
1390 shared_state, middle_rect, middle_rect, SK_ColorRED, false); 1355 shared_state, middle_rect, middle_rect, SK_ColorRED, false);
1391 root_pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
1392 middle_rect += gfx::Vector2d(0, middle_rect.height() + 1); 1356 middle_rect += gfx::Vector2d(0, middle_rect.height() + 1);
1393 } 1357 }
1394 1358
1395 gfx::Rect right_rect = gfx::Rect((kColumnWidth+1)*2, 0, kColumnWidth, 20); 1359 gfx::Rect right_rect = gfx::Rect((kColumnWidth+1)*2, 0, kColumnWidth, 20);
1396 for (int i = 0; right_rect.y() < device_viewport_rect.height(); ++i) { 1360 for (int i = 0; right_rect.y() < device_viewport_rect.height(); ++i) {
1397 SharedQuadState* shared_state = CreateTestSharedQuadState( 1361 SharedQuadState* shared_state = CreateTestSharedQuadState(
1398 root_pass.get(), identity_content_to_target_transform, right_rect); 1362 identity_content_to_target_transform, right_rect, root_pass.get());
1399 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); 1363 SolidColorDrawQuad* color_quad =
1364 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1400 color_quad->SetNew( 1365 color_quad->SetNew(
1401 shared_state, right_rect, right_rect, SK_ColorBLUE, false); 1366 shared_state, right_rect, right_rect, SK_ColorBLUE, false);
1402 root_pass->quad_list.push_back(color_quad.PassAs<DrawQuad>());
1403 right_rect += gfx::Vector2d(0, right_rect.height() + 1); 1367 right_rect += gfx::Vector2d(0, right_rect.height() + 1);
1404 } 1368 }
1405 1369
1406 SharedQuadState* shared_state = 1370 SharedQuadState* shared_state =
1407 CreateTestSharedQuadState(root_pass.get(), 1371 CreateTestSharedQuadState(identity_content_to_target_transform,
1408 identity_content_to_target_transform, 1372 device_viewport_rect,
1409 device_viewport_rect); 1373 root_pass.get());
1410 scoped_ptr<SolidColorDrawQuad> background_quad = 1374 SolidColorDrawQuad* background_quad =
1411 SolidColorDrawQuad::Create(); 1375 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1412 background_quad->SetNew(shared_state, 1376 background_quad->SetNew(shared_state,
1413 device_viewport_rect, 1377 device_viewport_rect,
1414 device_viewport_rect, 1378 device_viewport_rect,
1415 SK_ColorWHITE, 1379 SK_ColorWHITE,
1416 false); 1380 false);
1417 root_pass->quad_list.push_back(background_quad.PassAs<DrawQuad>());
1418 1381
1419 pass_list_.push_back(filter_pass.Pass()); 1382 pass_list_.push_back(filter_pass.Pass());
1420 pass_list_.push_back(root_pass.Pass()); 1383 pass_list_.push_back(root_pass.Pass());
1421 } 1384 }
1422 1385
1423 RenderPassList pass_list_; 1386 RenderPassList pass_list_;
1424 FilterOperations background_filters_; 1387 FilterOperations background_filters_;
1425 gfx::Transform filter_pass_to_target_transform_; 1388 gfx::Transform filter_pass_to_target_transform_;
1426 gfx::Rect filter_pass_content_rect_; 1389 gfx::Rect filter_pass_content_rect_;
1427 }; 1390 };
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 ClearBackgroundToGreen(); 1448 ClearBackgroundToGreen();
1486 PopulateStencilBuffer(); 1449 PopulateStencilBuffer();
1487 this->EnableExternalStencilTest(); 1450 this->EnableExternalStencilTest();
1488 1451
1489 // Draw a blue quad that covers the entire device viewport. It should be 1452 // Draw a blue quad that covers the entire device viewport. It should be
1490 // clipped to the bottom left and top right corners by the external stencil. 1453 // clipped to the bottom left and top right corners by the external stencil.
1491 gfx::Rect rect(this->device_viewport_size_); 1454 gfx::Rect rect(this->device_viewport_size_);
1492 RenderPass::Id id(1, 1); 1455 RenderPass::Id id(1, 1);
1493 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1456 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1494 SharedQuadState* blue_shared_state = 1457 SharedQuadState* blue_shared_state =
1495 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 1458 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1496 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1459 SolidColorDrawQuad* blue =
1460 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1497 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false); 1461 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
1498 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1499 pass->has_transparent_background = false; 1462 pass->has_transparent_background = false;
1500 RenderPassList pass_list; 1463 RenderPassList pass_list;
1501 pass_list.push_back(pass.Pass()); 1464 pass_list.push_back(pass.Pass());
1502 1465
1503 EXPECT_TRUE(this->RunPixelTest( 1466 EXPECT_TRUE(this->RunPixelTest(
1504 &pass_list, 1467 &pass_list,
1505 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 1468 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
1506 ExactPixelComparator(true))); 1469 ExactPixelComparator(true)));
1507 } 1470 }
1508 1471
1509 TEST_F(ExternalStencilPixelTest, StencilTestDisabled) { 1472 TEST_F(ExternalStencilPixelTest, StencilTestDisabled) {
1510 PopulateStencilBuffer(); 1473 PopulateStencilBuffer();
1511 1474
1512 // Draw a green quad that covers the entire device viewport. The stencil 1475 // Draw a green quad that covers the entire device viewport. The stencil
1513 // buffer should be ignored. 1476 // buffer should be ignored.
1514 gfx::Rect rect(this->device_viewport_size_); 1477 gfx::Rect rect(this->device_viewport_size_);
1515 RenderPass::Id id(1, 1); 1478 RenderPass::Id id(1, 1);
1516 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1479 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1517 SharedQuadState* green_shared_state = 1480 SharedQuadState* green_shared_state =
1518 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 1481 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1519 scoped_ptr<SolidColorDrawQuad> green = SolidColorDrawQuad::Create(); 1482 SolidColorDrawQuad* green =
1483 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1520 green->SetNew(green_shared_state, rect, rect, SK_ColorGREEN, false); 1484 green->SetNew(green_shared_state, rect, rect, SK_ColorGREEN, false);
1521 pass->quad_list.push_back(green.PassAs<DrawQuad>());
1522 RenderPassList pass_list; 1485 RenderPassList pass_list;
1523 pass_list.push_back(pass.Pass()); 1486 pass_list.push_back(pass.Pass());
1524 1487
1525 EXPECT_TRUE(this->RunPixelTest( 1488 EXPECT_TRUE(this->RunPixelTest(
1526 &pass_list, 1489 &pass_list,
1527 base::FilePath(FILE_PATH_LITERAL("green.png")), 1490 base::FilePath(FILE_PATH_LITERAL("green.png")),
1528 ExactPixelComparator(true))); 1491 ExactPixelComparator(true)));
1529 } 1492 }
1530 1493
1531 TEST_F(ExternalStencilPixelTest, RenderSurfacesIgnoreStencil) { 1494 TEST_F(ExternalStencilPixelTest, RenderSurfacesIgnoreStencil) {
(...skipping 10 matching lines...) Expand all
1542 root_pass->has_transparent_background = false; 1505 root_pass->has_transparent_background = false;
1543 1506
1544 RenderPass::Id child_pass_id(2, 2); 1507 RenderPass::Id child_pass_id(2, 2);
1545 gfx::Rect pass_rect(this->device_viewport_size_); 1508 gfx::Rect pass_rect(this->device_viewport_size_);
1546 gfx::Transform transform_to_root; 1509 gfx::Transform transform_to_root;
1547 scoped_ptr<RenderPass> child_pass = 1510 scoped_ptr<RenderPass> child_pass =
1548 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); 1511 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root);
1549 1512
1550 gfx::Transform content_to_target_transform; 1513 gfx::Transform content_to_target_transform;
1551 SharedQuadState* shared_state = CreateTestSharedQuadState( 1514 SharedQuadState* shared_state = CreateTestSharedQuadState(
1552 child_pass.get(), content_to_target_transform, viewport_rect); 1515 content_to_target_transform, viewport_rect, child_pass.get());
1553 1516
1554 gfx::Rect blue_rect(0, 1517 gfx::Rect blue_rect(0,
1555 0, 1518 0,
1556 this->device_viewport_size_.width(), 1519 this->device_viewport_size_.width(),
1557 this->device_viewport_size_.height()); 1520 this->device_viewport_size_.height());
1558 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1521 SolidColorDrawQuad* blue =
1522 child_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1559 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false); 1523 blue->SetNew(shared_state, blue_rect, blue_rect, SK_ColorBLUE, false);
1560 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1561 1524
1562 SharedQuadState* pass_shared_state = 1525 SharedQuadState* pass_shared_state =
1563 CreateTestSharedQuadState(root_pass.get(), gfx::Transform(), pass_rect); 1526 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1564 root_pass->quad_list.push_back(CreateTestRenderPassDrawQuad( 1527 CreateTestRenderPassDrawQuad(
1565 pass_shared_state, pass_rect, child_pass_id)); 1528 pass_shared_state, pass_rect, child_pass_id, root_pass.get());
1566 RenderPassList pass_list; 1529 RenderPassList pass_list;
1567 pass_list.push_back(child_pass.Pass()); 1530 pass_list.push_back(child_pass.Pass());
1568 pass_list.push_back(root_pass.Pass()); 1531 pass_list.push_back(root_pass.Pass());
1569 1532
1570 EXPECT_TRUE(this->RunPixelTest( 1533 EXPECT_TRUE(this->RunPixelTest(
1571 &pass_list, 1534 &pass_list,
1572 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 1535 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
1573 ExactPixelComparator(true))); 1536 ExactPixelComparator(true)));
1574 } 1537 }
1575 1538
1576 TEST_F(ExternalStencilPixelTest, DeviceClip) { 1539 TEST_F(ExternalStencilPixelTest, DeviceClip) {
1577 ClearBackgroundToGreen(); 1540 ClearBackgroundToGreen();
1578 gfx::Rect clip_rect(gfx::Point(150, 150), gfx::Size(50, 50)); 1541 gfx::Rect clip_rect(gfx::Point(150, 150), gfx::Size(50, 50));
1579 this->ForceDeviceClip(clip_rect); 1542 this->ForceDeviceClip(clip_rect);
1580 1543
1581 // Draw a blue quad that covers the entire device viewport. It should be 1544 // Draw a blue quad that covers the entire device viewport. It should be
1582 // clipped to the bottom right corner by the device clip. 1545 // clipped to the bottom right corner by the device clip.
1583 gfx::Rect rect(this->device_viewport_size_); 1546 gfx::Rect rect(this->device_viewport_size_);
1584 RenderPass::Id id(1, 1); 1547 RenderPass::Id id(1, 1);
1585 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1548 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1586 SharedQuadState* blue_shared_state = 1549 SharedQuadState* blue_shared_state =
1587 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 1550 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1588 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1551 SolidColorDrawQuad* blue =
1552 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1589 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false); 1553 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
1590 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1591 RenderPassList pass_list; 1554 RenderPassList pass_list;
1592 pass_list.push_back(pass.Pass()); 1555 pass_list.push_back(pass.Pass());
1593 1556
1594 EXPECT_TRUE(this->RunPixelTest( 1557 EXPECT_TRUE(this->RunPixelTest(
1595 &pass_list, 1558 &pass_list,
1596 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), 1559 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")),
1597 ExactPixelComparator(true))); 1560 ExactPixelComparator(true)));
1598 } 1561 }
1599 1562
1600 // Software renderer does not support anti-aliased edges. 1563 // Software renderer does not support anti-aliased edges.
1601 TEST_F(GLRendererPixelTest, AntiAliasing) { 1564 TEST_F(GLRendererPixelTest, AntiAliasing) {
1602 gfx::Rect rect(this->device_viewport_size_); 1565 gfx::Rect rect(this->device_viewport_size_);
1603 1566
1604 RenderPass::Id id(1, 1); 1567 RenderPass::Id id(1, 1);
1605 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 1568 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
1606 1569
1607 gfx::Transform red_content_to_target_transform; 1570 gfx::Transform red_content_to_target_transform;
1608 red_content_to_target_transform.Rotate(10); 1571 red_content_to_target_transform.Rotate(10);
1609 SharedQuadState* red_shared_state = CreateTestSharedQuadState( 1572 SharedQuadState* red_shared_state = CreateTestSharedQuadState(
1610 pass.get(), red_content_to_target_transform, rect); 1573 red_content_to_target_transform, rect, pass.get());
1611 1574
1612 scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create(); 1575 SolidColorDrawQuad* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1613 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false); 1576 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false);
1614 1577
1615 pass->quad_list.push_back(red.PassAs<DrawQuad>());
1616
1617 gfx::Transform yellow_content_to_target_transform; 1578 gfx::Transform yellow_content_to_target_transform;
1618 yellow_content_to_target_transform.Rotate(5); 1579 yellow_content_to_target_transform.Rotate(5);
1619 SharedQuadState* yellow_shared_state = CreateTestSharedQuadState( 1580 SharedQuadState* yellow_shared_state = CreateTestSharedQuadState(
1620 pass.get(), yellow_content_to_target_transform, rect); 1581 yellow_content_to_target_transform, rect, pass.get());
1621 1582
1622 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 1583 SolidColorDrawQuad* yellow =
1584 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1623 yellow->SetNew(yellow_shared_state, rect, rect, SK_ColorYELLOW, false); 1585 yellow->SetNew(yellow_shared_state, rect, rect, SK_ColorYELLOW, false);
1624 1586
1625 pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
1626
1627 gfx::Transform blue_content_to_target_transform; 1587 gfx::Transform blue_content_to_target_transform;
1628 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( 1588 SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
1629 pass.get(), blue_content_to_target_transform, rect); 1589 blue_content_to_target_transform, rect, pass.get());
1630 1590
1631 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1591 SolidColorDrawQuad* blue =
1592 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1632 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false); 1593 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
1633 1594
1634 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1635
1636 RenderPassList pass_list; 1595 RenderPassList pass_list;
1637 pass_list.push_back(pass.Pass()); 1596 pass_list.push_back(pass.Pass());
1638 1597
1639 EXPECT_TRUE(this->RunPixelTest( 1598 EXPECT_TRUE(this->RunPixelTest(
1640 &pass_list, 1599 &pass_list,
1641 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), 1600 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")),
1642 FuzzyPixelOffByOneComparator(true))); 1601 FuzzyPixelOffByOneComparator(true)));
1643 } 1602 }
1644 1603
1645 // This test tests that anti-aliasing works for axis aligned quads. 1604 // This test tests that anti-aliasing works for axis aligned quads.
1646 // Anti-aliasing is only supported in the gl renderer. 1605 // Anti-aliasing is only supported in the gl renderer.
1647 TEST_F(GLRendererPixelTest, AxisAligned) { 1606 TEST_F(GLRendererPixelTest, AxisAligned) {
1648 gfx::Rect rect(this->device_viewport_size_); 1607 gfx::Rect rect(this->device_viewport_size_);
1649 1608
1650 RenderPass::Id id(1, 1); 1609 RenderPass::Id id(1, 1);
1651 gfx::Transform transform_to_root; 1610 gfx::Transform transform_to_root;
1652 scoped_ptr<RenderPass> pass = 1611 scoped_ptr<RenderPass> pass =
1653 CreateTestRenderPass(id, rect, transform_to_root); 1612 CreateTestRenderPass(id, rect, transform_to_root);
1654 1613
1655 gfx::Transform red_content_to_target_transform; 1614 gfx::Transform red_content_to_target_transform;
1656 red_content_to_target_transform.Translate(50, 50); 1615 red_content_to_target_transform.Translate(50, 50);
1657 red_content_to_target_transform.Scale( 1616 red_content_to_target_transform.Scale(
1658 0.5f + 1.0f / (rect.width() * 2.0f), 1617 0.5f + 1.0f / (rect.width() * 2.0f),
1659 0.5f + 1.0f / (rect.height() * 2.0f)); 1618 0.5f + 1.0f / (rect.height() * 2.0f));
1660 SharedQuadState* red_shared_state = CreateTestSharedQuadState( 1619 SharedQuadState* red_shared_state = CreateTestSharedQuadState(
1661 pass.get(), red_content_to_target_transform, rect); 1620 red_content_to_target_transform, rect, pass.get());
1662 1621
1663 scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create(); 1622 SolidColorDrawQuad* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1664 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false); 1623 red->SetNew(red_shared_state, rect, rect, SK_ColorRED, false);
1665 1624
1666 pass->quad_list.push_back(red.PassAs<DrawQuad>());
1667
1668 gfx::Transform yellow_content_to_target_transform; 1625 gfx::Transform yellow_content_to_target_transform;
1669 yellow_content_to_target_transform.Translate(25.5f, 25.5f); 1626 yellow_content_to_target_transform.Translate(25.5f, 25.5f);
1670 yellow_content_to_target_transform.Scale(0.5f, 0.5f); 1627 yellow_content_to_target_transform.Scale(0.5f, 0.5f);
1671 SharedQuadState* yellow_shared_state = CreateTestSharedQuadState( 1628 SharedQuadState* yellow_shared_state = CreateTestSharedQuadState(
1672 pass.get(), yellow_content_to_target_transform, rect); 1629 yellow_content_to_target_transform, rect, pass.get());
1673 1630
1674 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); 1631 SolidColorDrawQuad* yellow =
1632 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1675 yellow->SetNew(yellow_shared_state, rect, rect, SK_ColorYELLOW, false); 1633 yellow->SetNew(yellow_shared_state, rect, rect, SK_ColorYELLOW, false);
1676 1634
1677 pass->quad_list.push_back(yellow.PassAs<DrawQuad>());
1678
1679 gfx::Transform blue_content_to_target_transform; 1635 gfx::Transform blue_content_to_target_transform;
1680 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( 1636 SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
1681 pass.get(), blue_content_to_target_transform, rect); 1637 blue_content_to_target_transform, rect, pass.get());
1682 1638
1683 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1639 SolidColorDrawQuad* blue =
1640 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1684 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false); 1641 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
1685 1642
1686 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1687
1688 RenderPassList pass_list; 1643 RenderPassList pass_list;
1689 pass_list.push_back(pass.Pass()); 1644 pass_list.push_back(pass.Pass());
1690 1645
1691 EXPECT_TRUE(this->RunPixelTest( 1646 EXPECT_TRUE(this->RunPixelTest(
1692 &pass_list, 1647 &pass_list,
1693 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), 1648 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")),
1694 ExactPixelComparator(true))); 1649 ExactPixelComparator(true)));
1695 } 1650 }
1696 1651
1697 // This test tests that forcing anti-aliasing off works as expected. 1652 // This test tests that forcing anti-aliasing off works as expected.
1698 // Anti-aliasing is only supported in the gl renderer. 1653 // Anti-aliasing is only supported in the gl renderer.
1699 TEST_F(GLRendererPixelTest, ForceAntiAliasingOff) { 1654 TEST_F(GLRendererPixelTest, ForceAntiAliasingOff) {
1700 gfx::Rect rect(this->device_viewport_size_); 1655 gfx::Rect rect(this->device_viewport_size_);
1701 1656
1702 RenderPass::Id id(1, 1); 1657 RenderPass::Id id(1, 1);
1703 gfx::Transform transform_to_root; 1658 gfx::Transform transform_to_root;
1704 scoped_ptr<RenderPass> pass = 1659 scoped_ptr<RenderPass> pass =
1705 CreateTestRenderPass(id, rect, transform_to_root); 1660 CreateTestRenderPass(id, rect, transform_to_root);
1706 1661
1707 gfx::Transform hole_content_to_target_transform; 1662 gfx::Transform hole_content_to_target_transform;
1708 hole_content_to_target_transform.Translate(50, 50); 1663 hole_content_to_target_transform.Translate(50, 50);
1709 hole_content_to_target_transform.Scale( 1664 hole_content_to_target_transform.Scale(
1710 0.5f + 1.0f / (rect.width() * 2.0f), 1665 0.5f + 1.0f / (rect.width() * 2.0f),
1711 0.5f + 1.0f / (rect.height() * 2.0f)); 1666 0.5f + 1.0f / (rect.height() * 2.0f));
1712 SharedQuadState* hole_shared_state = CreateTestSharedQuadState( 1667 SharedQuadState* hole_shared_state = CreateTestSharedQuadState(
1713 pass.get(), hole_content_to_target_transform, rect); 1668 hole_content_to_target_transform, rect, pass.get());
1714 1669
1715 scoped_ptr<SolidColorDrawQuad> hole = SolidColorDrawQuad::Create(); 1670 SolidColorDrawQuad* hole =
1671 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1716 hole->SetAll( 1672 hole->SetAll(
1717 hole_shared_state, rect, rect, rect, false, SK_ColorTRANSPARENT, true); 1673 hole_shared_state, rect, rect, rect, false, SK_ColorTRANSPARENT, true);
1718 pass->quad_list.push_back(hole.PassAs<DrawQuad>());
1719 1674
1720 gfx::Transform green_content_to_target_transform; 1675 gfx::Transform green_content_to_target_transform;
1721 SharedQuadState* green_shared_state = CreateTestSharedQuadState( 1676 SharedQuadState* green_shared_state = CreateTestSharedQuadState(
1722 pass.get(), green_content_to_target_transform, rect); 1677 green_content_to_target_transform, rect, pass.get());
1723 1678
1724 scoped_ptr<SolidColorDrawQuad> green = SolidColorDrawQuad::Create(); 1679 SolidColorDrawQuad* green =
1680 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1725 green->SetNew(green_shared_state, rect, rect, SK_ColorGREEN, false); 1681 green->SetNew(green_shared_state, rect, rect, SK_ColorGREEN, false);
1726 1682
1727 pass->quad_list.push_back(green.PassAs<DrawQuad>());
1728
1729 RenderPassList pass_list; 1683 RenderPassList pass_list;
1730 pass_list.push_back(pass.Pass()); 1684 pass_list.push_back(pass.Pass());
1731 1685
1732 EXPECT_TRUE(this->RunPixelTest( 1686 EXPECT_TRUE(this->RunPixelTest(
1733 &pass_list, 1687 &pass_list,
1734 base::FilePath(FILE_PATH_LITERAL("force_anti_aliasing_off.png")), 1688 base::FilePath(FILE_PATH_LITERAL("force_anti_aliasing_off.png")),
1735 ExactPixelComparator(false))); 1689 ExactPixelComparator(false)));
1736 } 1690 }
1737 1691
1738 TEST_F(GLRendererPixelTest, AntiAliasingPerspective) { 1692 TEST_F(GLRendererPixelTest, AntiAliasingPerspective) {
1739 gfx::Rect rect(this->device_viewport_size_); 1693 gfx::Rect rect(this->device_viewport_size_);
1740 1694
1741 scoped_ptr<RenderPass> pass = 1695 scoped_ptr<RenderPass> pass =
1742 CreateTestRootRenderPass(RenderPass::Id(1, 1), rect); 1696 CreateTestRootRenderPass(RenderPass::Id(1, 1), rect);
1743 1697
1744 gfx::Rect red_rect(0, 0, 180, 500); 1698 gfx::Rect red_rect(0, 0, 180, 500);
1745 gfx::Transform red_content_to_target_transform( 1699 gfx::Transform red_content_to_target_transform(
1746 1.0f, 2.4520f, 10.6206f, 19.0f, 1700 1.0f, 2.4520f, 10.6206f, 19.0f,
1747 0.0f, 0.3528f, 5.9737f, 9.5f, 1701 0.0f, 0.3528f, 5.9737f, 9.5f,
1748 0.0f, -0.2250f, -0.9744f, 0.0f, 1702 0.0f, -0.2250f, -0.9744f, 0.0f,
1749 0.0f, 0.0225f, 0.0974f, 1.0f); 1703 0.0f, 0.0225f, 0.0974f, 1.0f);
1750 SharedQuadState* red_shared_state = CreateTestSharedQuadState( 1704 SharedQuadState* red_shared_state = CreateTestSharedQuadState(
1751 pass.get(), red_content_to_target_transform, red_rect); 1705 red_content_to_target_transform, red_rect, pass.get());
1752 scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create(); 1706 SolidColorDrawQuad* red = pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1753 red->SetNew(red_shared_state, red_rect, red_rect, SK_ColorRED, false); 1707 red->SetNew(red_shared_state, red_rect, red_rect, SK_ColorRED, false);
1754 pass->quad_list.push_back(red.PassAs<DrawQuad>());
1755 1708
1756 gfx::Rect green_rect(19, 7, 180, 10); 1709 gfx::Rect green_rect(19, 7, 180, 10);
1757 SharedQuadState* green_shared_state = 1710 SharedQuadState* green_shared_state =
1758 CreateTestSharedQuadState(pass.get(), gfx::Transform(), green_rect); 1711 CreateTestSharedQuadState(gfx::Transform(), green_rect, pass.get());
1759 scoped_ptr<SolidColorDrawQuad> green = SolidColorDrawQuad::Create(); 1712 SolidColorDrawQuad* green =
1713 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1760 green->SetNew( 1714 green->SetNew(
1761 green_shared_state, green_rect, green_rect, SK_ColorGREEN, false); 1715 green_shared_state, green_rect, green_rect, SK_ColorGREEN, false);
1762 pass->quad_list.push_back(green.PassAs<DrawQuad>());
1763 1716
1764 SharedQuadState* blue_shared_state = 1717 SharedQuadState* blue_shared_state =
1765 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 1718 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
1766 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); 1719 SolidColorDrawQuad* blue =
1720 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1767 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false); 1721 blue->SetNew(blue_shared_state, rect, rect, SK_ColorBLUE, false);
1768 pass->quad_list.push_back(blue.PassAs<DrawQuad>());
1769 1722
1770 RenderPassList pass_list; 1723 RenderPassList pass_list;
1771 pass_list.push_back(pass.Pass()); 1724 pass_list.push_back(pass.Pass());
1772 1725
1773 EXPECT_TRUE(this->RunPixelTest( 1726 EXPECT_TRUE(this->RunPixelTest(
1774 &pass_list, 1727 &pass_list,
1775 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), 1728 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")),
1776 FuzzyPixelOffByOneComparator(true))); 1729 FuzzyPixelOffByOneComparator(true)));
1777 } 1730 }
1778 1731
(...skipping 21 matching lines...) Expand all
1800 blue_paint.setColor(SK_ColorBLUE); 1753 blue_paint.setColor(SK_ColorBLUE);
1801 blue_pile->add_draw_rect_with_paint(blue_clip_rect, blue_paint); 1754 blue_pile->add_draw_rect_with_paint(blue_clip_rect, blue_paint);
1802 blue_pile->RerecordPile(); 1755 blue_pile->RerecordPile();
1803 1756
1804 gfx::Transform blue_content_to_target_transform; 1757 gfx::Transform blue_content_to_target_transform;
1805 gfx::Vector2d offset(viewport.bottom_right() - blue_rect.bottom_right()); 1758 gfx::Vector2d offset(viewport.bottom_right() - blue_rect.bottom_right());
1806 blue_content_to_target_transform.Translate(offset.x(), offset.y()); 1759 blue_content_to_target_transform.Translate(offset.x(), offset.y());
1807 gfx::RectF blue_scissor_rect = blue_clip_rect; 1760 gfx::RectF blue_scissor_rect = blue_clip_rect;
1808 blue_content_to_target_transform.TransformRect(&blue_scissor_rect); 1761 blue_content_to_target_transform.TransformRect(&blue_scissor_rect);
1809 SharedQuadState* blue_shared_state = 1762 SharedQuadState* blue_shared_state =
1810 CreateTestSharedQuadStateClipped(pass.get(), 1763 CreateTestSharedQuadStateClipped(blue_content_to_target_transform,
1811 blue_content_to_target_transform,
1812 blue_rect, 1764 blue_rect,
1813 gfx::ToEnclosingRect(blue_scissor_rect)); 1765 gfx::ToEnclosingRect(blue_scissor_rect),
1766 pass.get());
1814 1767
1815 scoped_ptr<PictureDrawQuad> blue_quad = PictureDrawQuad::Create(); 1768 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
1816 1769
1817 blue_quad->SetNew(blue_shared_state, 1770 blue_quad->SetNew(blue_shared_state,
1818 viewport, // Intentionally bigger than clip. 1771 viewport, // Intentionally bigger than clip.
1819 gfx::Rect(), 1772 gfx::Rect(),
1820 viewport, 1773 viewport,
1821 gfx::RectF(viewport), 1774 gfx::RectF(viewport),
1822 viewport.size(), 1775 viewport.size(),
1823 texture_format, 1776 texture_format,
1824 viewport, 1777 viewport,
1825 1.f, 1778 1.f,
1826 PicturePileImpl::CreateFromOther(blue_pile)); 1779 PicturePileImpl::CreateFromOther(blue_pile));
1827 pass->quad_list.push_back(blue_quad.PassAs<DrawQuad>());
1828 1780
1829 // One viewport-filling green quad. 1781 // One viewport-filling green quad.
1830 scoped_refptr<FakePicturePileImpl> green_pile = 1782 scoped_refptr<FakePicturePileImpl> green_pile =
1831 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size()); 1783 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size());
1832 SkPaint green_paint; 1784 SkPaint green_paint;
1833 green_paint.setColor(SK_ColorGREEN); 1785 green_paint.setColor(SK_ColorGREEN);
1834 green_pile->add_draw_rect_with_paint(viewport, green_paint); 1786 green_pile->add_draw_rect_with_paint(viewport, green_paint);
1835 green_pile->RerecordPile(); 1787 green_pile->RerecordPile();
1836 1788
1837 gfx::Transform green_content_to_target_transform; 1789 gfx::Transform green_content_to_target_transform;
1838 SharedQuadState* green_shared_state = CreateTestSharedQuadState( 1790 SharedQuadState* green_shared_state = CreateTestSharedQuadState(
1839 pass.get(), green_content_to_target_transform, viewport); 1791 green_content_to_target_transform, viewport, pass.get());
1840 1792
1841 scoped_ptr<PictureDrawQuad> green_quad = PictureDrawQuad::Create(); 1793 PictureDrawQuad* green_quad =
1794 pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
1842 green_quad->SetNew(green_shared_state, 1795 green_quad->SetNew(green_shared_state,
1843 viewport, 1796 viewport,
1844 gfx::Rect(), 1797 gfx::Rect(),
1845 viewport, 1798 viewport,
1846 gfx::RectF(0.f, 0.f, 1.f, 1.f), 1799 gfx::RectF(0.f, 0.f, 1.f, 1.f),
1847 viewport.size(), 1800 viewport.size(),
1848 texture_format, 1801 texture_format,
1849 viewport, 1802 viewport,
1850 1.f, 1803 1.f,
1851 PicturePileImpl::CreateFromOther(green_pile)); 1804 PicturePileImpl::CreateFromOther(green_pile));
1852 pass->quad_list.push_back(green_quad.PassAs<DrawQuad>());
1853 1805
1854 RenderPassList pass_list; 1806 RenderPassList pass_list;
1855 pass_list.push_back(pass.Pass()); 1807 pass_list.push_back(pass.Pass());
1856 1808
1857 EXPECT_TRUE(this->RunPixelTest( 1809 EXPECT_TRUE(this->RunPixelTest(
1858 &pass_list, 1810 &pass_list,
1859 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), 1811 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")),
1860 ExactPixelComparator(true))); 1812 ExactPixelComparator(true)));
1861 } 1813 }
1862 1814
(...skipping 11 matching lines...) Expand all
1874 // One viewport-filling 0.5-opacity green quad. 1826 // One viewport-filling 0.5-opacity green quad.
1875 scoped_refptr<FakePicturePileImpl> green_pile = 1827 scoped_refptr<FakePicturePileImpl> green_pile =
1876 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size()); 1828 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size());
1877 SkPaint green_paint; 1829 SkPaint green_paint;
1878 green_paint.setColor(SK_ColorGREEN); 1830 green_paint.setColor(SK_ColorGREEN);
1879 green_pile->add_draw_rect_with_paint(viewport, green_paint); 1831 green_pile->add_draw_rect_with_paint(viewport, green_paint);
1880 green_pile->RerecordPile(); 1832 green_pile->RerecordPile();
1881 1833
1882 gfx::Transform green_content_to_target_transform; 1834 gfx::Transform green_content_to_target_transform;
1883 SharedQuadState* green_shared_state = CreateTestSharedQuadState( 1835 SharedQuadState* green_shared_state = CreateTestSharedQuadState(
1884 pass.get(), green_content_to_target_transform, viewport); 1836 green_content_to_target_transform, viewport, pass.get());
1885 green_shared_state->opacity = 0.5f; 1837 green_shared_state->opacity = 0.5f;
1886 1838
1887 scoped_ptr<PictureDrawQuad> green_quad = PictureDrawQuad::Create(); 1839 PictureDrawQuad* green_quad =
1840 pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
1888 green_quad->SetNew(green_shared_state, 1841 green_quad->SetNew(green_shared_state,
1889 viewport, 1842 viewport,
1890 gfx::Rect(), 1843 gfx::Rect(),
1891 viewport, 1844 viewport,
1892 gfx::RectF(0, 0, 1, 1), 1845 gfx::RectF(0, 0, 1, 1),
1893 viewport.size(), 1846 viewport.size(),
1894 texture_format, 1847 texture_format,
1895 viewport, 1848 viewport,
1896 1.f, 1849 1.f,
1897 PicturePileImpl::CreateFromOther(green_pile)); 1850 PicturePileImpl::CreateFromOther(green_pile));
1898 pass->quad_list.push_back(green_quad.PassAs<DrawQuad>());
1899 1851
1900 // One viewport-filling white quad. 1852 // One viewport-filling white quad.
1901 scoped_refptr<FakePicturePileImpl> white_pile = 1853 scoped_refptr<FakePicturePileImpl> white_pile =
1902 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size()); 1854 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size());
1903 SkPaint white_paint; 1855 SkPaint white_paint;
1904 white_paint.setColor(SK_ColorWHITE); 1856 white_paint.setColor(SK_ColorWHITE);
1905 white_pile->add_draw_rect_with_paint(viewport, white_paint); 1857 white_pile->add_draw_rect_with_paint(viewport, white_paint);
1906 white_pile->RerecordPile(); 1858 white_pile->RerecordPile();
1907 1859
1908 gfx::Transform white_content_to_target_transform; 1860 gfx::Transform white_content_to_target_transform;
1909 SharedQuadState* white_shared_state = CreateTestSharedQuadState( 1861 SharedQuadState* white_shared_state = CreateTestSharedQuadState(
1910 pass.get(), white_content_to_target_transform, viewport); 1862 white_content_to_target_transform, viewport, pass.get());
1911 1863
1912 scoped_ptr<PictureDrawQuad> white_quad = PictureDrawQuad::Create(); 1864 PictureDrawQuad* white_quad =
1865 pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
1913 white_quad->SetNew(white_shared_state, 1866 white_quad->SetNew(white_shared_state,
1914 viewport, 1867 viewport,
1915 gfx::Rect(), 1868 gfx::Rect(),
1916 viewport, 1869 viewport,
1917 gfx::RectF(0, 0, 1, 1), 1870 gfx::RectF(0, 0, 1, 1),
1918 viewport.size(), 1871 viewport.size(),
1919 texture_format, 1872 texture_format,
1920 viewport, 1873 viewport,
1921 1.f, 1874 1.f,
1922 PicturePileImpl::CreateFromOther(white_pile)); 1875 PicturePileImpl::CreateFromOther(white_pile));
1923 pass->quad_list.push_back(white_quad.PassAs<DrawQuad>());
1924 1876
1925 RenderPassList pass_list; 1877 RenderPassList pass_list;
1926 pass_list.push_back(pass.Pass()); 1878 pass_list.push_back(pass.Pass());
1927 1879
1928 EXPECT_TRUE(this->RunPixelTest( 1880 EXPECT_TRUE(this->RunPixelTest(
1929 &pass_list, 1881 &pass_list,
1930 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), 1882 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")),
1931 FuzzyPixelOffByOneComparator(true))); 1883 FuzzyPixelOffByOneComparator(true)));
1932 } 1884 }
1933 1885
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 1927
1976 scoped_refptr<FakePicturePileImpl> pile = 1928 scoped_refptr<FakePicturePileImpl> pile =
1977 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size()); 1929 FakePicturePileImpl::CreateFilledPile(pile_tile_size, viewport.size());
1978 SkPaint paint; 1930 SkPaint paint;
1979 paint.setFilterLevel(SkPaint::kLow_FilterLevel); 1931 paint.setFilterLevel(SkPaint::kLow_FilterLevel);
1980 pile->add_draw_bitmap_with_paint(bitmap, gfx::Point(), paint); 1932 pile->add_draw_bitmap_with_paint(bitmap, gfx::Point(), paint);
1981 pile->RerecordPile(); 1933 pile->RerecordPile();
1982 1934
1983 gfx::Transform content_to_target_transform; 1935 gfx::Transform content_to_target_transform;
1984 SharedQuadState* shared_state = CreateTestSharedQuadState( 1936 SharedQuadState* shared_state = CreateTestSharedQuadState(
1985 pass.get(), content_to_target_transform, viewport); 1937 content_to_target_transform, viewport, pass.get());
1986 1938
1987 scoped_ptr<PictureDrawQuad> quad = PictureDrawQuad::Create(); 1939 PictureDrawQuad* quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
1988 quad->SetNew(shared_state, 1940 quad->SetNew(shared_state,
1989 viewport, 1941 viewport,
1990 gfx::Rect(), 1942 gfx::Rect(),
1991 viewport, 1943 viewport,
1992 gfx::RectF(0, 0, 2, 2), 1944 gfx::RectF(0, 0, 2, 2),
1993 viewport.size(), 1945 viewport.size(),
1994 texture_format, 1946 texture_format,
1995 viewport, 1947 viewport,
1996 1.f, 1948 1.f,
1997 PicturePileImpl::CreateFromOther(pile)); 1949 PicturePileImpl::CreateFromOther(pile));
1998 pass->quad_list.push_back(quad.PassAs<DrawQuad>());
1999 1950
2000 RenderPassList pass_list; 1951 RenderPassList pass_list;
2001 pass_list.push_back(pass.Pass()); 1952 pass_list.push_back(pass.Pass());
2002 1953
2003 this->disable_picture_quad_image_filtering_ = true; 1954 this->disable_picture_quad_image_filtering_ = true;
2004 1955
2005 EXPECT_TRUE(this->RunPixelTest( 1956 EXPECT_TRUE(this->RunPixelTest(
2006 &pass_list, 1957 &pass_list,
2007 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 1958 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
2008 ExactPixelComparator(true))); 1959 ExactPixelComparator(true)));
(...skipping 23 matching lines...) Expand all
2032 red_paint.setColor(SK_ColorRED); 1983 red_paint.setColor(SK_ColorRED);
2033 green_pile->add_draw_rect_with_paint(viewport, red_paint); 1984 green_pile->add_draw_rect_with_paint(viewport, red_paint);
2034 SkPaint green_paint; 1985 SkPaint green_paint;
2035 green_paint.setColor(SK_ColorGREEN); 1986 green_paint.setColor(SK_ColorGREEN);
2036 green_pile->add_draw_rect_with_paint(green_rect1, green_paint); 1987 green_pile->add_draw_rect_with_paint(green_rect1, green_paint);
2037 green_pile->add_draw_rect_with_paint(green_rect2, green_paint); 1988 green_pile->add_draw_rect_with_paint(green_rect2, green_paint);
2038 green_pile->RerecordPile(); 1989 green_pile->RerecordPile();
2039 1990
2040 SharedQuadState* top_right_green_shared_quad_state = 1991 SharedQuadState* top_right_green_shared_quad_state =
2041 CreateTestSharedQuadState( 1992 CreateTestSharedQuadState(
2042 pass.get(), green_content_to_target_transform, viewport); 1993 green_content_to_target_transform, viewport, pass.get());
2043 1994
2044 scoped_ptr<PictureDrawQuad> green_quad1 = PictureDrawQuad::Create(); 1995 PictureDrawQuad* green_quad1 =
1996 pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
2045 green_quad1->SetNew(top_right_green_shared_quad_state, 1997 green_quad1->SetNew(top_right_green_shared_quad_state,
2046 green_rect1, 1998 green_rect1,
2047 gfx::Rect(), 1999 gfx::Rect(),
2048 green_rect1, 2000 green_rect1,
2049 gfx::RectF(green_rect1.size()), 2001 gfx::RectF(green_rect1.size()),
2050 green_rect1.size(), 2002 green_rect1.size(),
2051 texture_format, 2003 texture_format,
2052 green_rect1, 2004 green_rect1,
2053 1.f, 2005 1.f,
2054 PicturePileImpl::CreateFromOther(green_pile)); 2006 PicturePileImpl::CreateFromOther(green_pile));
2055 pass->quad_list.push_back(green_quad1.PassAs<DrawQuad>());
2056 2007
2057 scoped_ptr<PictureDrawQuad> green_quad2 = PictureDrawQuad::Create(); 2008 PictureDrawQuad* green_quad2 =
2009 pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
2058 green_quad2->SetNew(top_right_green_shared_quad_state, 2010 green_quad2->SetNew(top_right_green_shared_quad_state,
2059 green_rect2, 2011 green_rect2,
2060 gfx::Rect(), 2012 gfx::Rect(),
2061 green_rect2, 2013 green_rect2,
2062 gfx::RectF(green_rect2.size()), 2014 gfx::RectF(green_rect2.size()),
2063 green_rect2.size(), 2015 green_rect2.size(),
2064 texture_format, 2016 texture_format,
2065 green_rect2, 2017 green_rect2,
2066 1.f, 2018 1.f,
2067 PicturePileImpl::CreateFromOther(green_pile)); 2019 PicturePileImpl::CreateFromOther(green_pile));
2068 pass->quad_list.push_back(green_quad2.PassAs<DrawQuad>());
2069 2020
2070 // Add a green clipped checkerboard in the bottom right to help test 2021 // Add a green clipped checkerboard in the bottom right to help test
2071 // interleaving picture quad content and solid color content. 2022 // interleaving picture quad content and solid color content.
2072 gfx::Rect bottom_right_rect( 2023 gfx::Rect bottom_right_rect(
2073 gfx::Point(viewport.width() / 2, viewport.height() / 2), 2024 gfx::Point(viewport.width() / 2, viewport.height() / 2),
2074 gfx::Size(viewport.width() / 2, viewport.height() / 2)); 2025 gfx::Size(viewport.width() / 2, viewport.height() / 2));
2075 SharedQuadState* bottom_right_green_shared_state = 2026 SharedQuadState* bottom_right_green_shared_state =
2076 CreateTestSharedQuadStateClipped(pass.get(), 2027 CreateTestSharedQuadStateClipped(green_content_to_target_transform,
2077 green_content_to_target_transform,
2078 viewport, 2028 viewport,
2079 bottom_right_rect); 2029 bottom_right_rect,
2080 scoped_ptr<SolidColorDrawQuad> bottom_right_color_quad = 2030 pass.get());
2081 SolidColorDrawQuad::Create(); 2031 SolidColorDrawQuad* bottom_right_color_quad =
2032 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2082 bottom_right_color_quad->SetNew(bottom_right_green_shared_state, 2033 bottom_right_color_quad->SetNew(bottom_right_green_shared_state,
2083 viewport, 2034 viewport,
2084 viewport, 2035 viewport,
2085 SK_ColorGREEN, 2036 SK_ColorGREEN,
2086 false); 2037 false);
2087 pass->quad_list.push_back(bottom_right_color_quad.PassAs<DrawQuad>());
2088 2038
2089 // Add two blue checkerboards taking up the bottom left and top right, 2039 // Add two blue checkerboards taking up the bottom left and top right,
2090 // but use content scales as content rects to make this happen. 2040 // but use content scales as content rects to make this happen.
2091 // The content is at a 4x content scale. 2041 // The content is at a 4x content scale.
2092 gfx::Rect layer_rect(gfx::Size(20, 30)); 2042 gfx::Rect layer_rect(gfx::Size(20, 30));
2093 float contents_scale = 4.f; 2043 float contents_scale = 4.f;
2094 // Two rects that touch at their corners, arbitrarily placed in the layer. 2044 // Two rects that touch at their corners, arbitrarily placed in the layer.
2095 gfx::RectF blue_layer_rect1(gfx::PointF(5.5f, 9.0f), gfx::SizeF(2.5f, 2.5f)); 2045 gfx::RectF blue_layer_rect1(gfx::PointF(5.5f, 9.0f), gfx::SizeF(2.5f, 2.5f));
2096 gfx::RectF blue_layer_rect2(gfx::PointF(8.0f, 6.5f), gfx::SizeF(2.5f, 2.5f)); 2046 gfx::RectF blue_layer_rect2(gfx::PointF(8.0f, 6.5f), gfx::SizeF(2.5f, 2.5f));
2097 gfx::RectF union_layer_rect = blue_layer_rect1; 2047 gfx::RectF union_layer_rect = blue_layer_rect1;
(...skipping 24 matching lines...) Expand all
2122 gfx::ScaleToEnclosingRect(layer_rect, contents_scale)); 2072 gfx::ScaleToEnclosingRect(layer_rect, contents_scale));
2123 gfx::Rect content_union_rect( 2073 gfx::Rect content_union_rect(
2124 gfx::ToEnclosingRect(gfx::ScaleRect(union_layer_rect, contents_scale))); 2074 gfx::ToEnclosingRect(gfx::ScaleRect(union_layer_rect, contents_scale)));
2125 2075
2126 // At a scale of 4x the rectangles with a width of 2.5 will take up 10 pixels, 2076 // At a scale of 4x the rectangles with a width of 2.5 will take up 10 pixels,
2127 // so scale an additional 10x to make them 100x100. 2077 // so scale an additional 10x to make them 100x100.
2128 gfx::Transform content_to_target_transform; 2078 gfx::Transform content_to_target_transform;
2129 content_to_target_transform.Scale(10.0, 10.0); 2079 content_to_target_transform.Scale(10.0, 10.0);
2130 gfx::Rect quad_content_rect(gfx::Size(20, 20)); 2080 gfx::Rect quad_content_rect(gfx::Size(20, 20));
2131 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( 2081 SharedQuadState* blue_shared_state = CreateTestSharedQuadState(
2132 pass.get(), content_to_target_transform, quad_content_rect); 2082 content_to_target_transform, quad_content_rect, pass.get());
2133 2083
2134 scoped_ptr<PictureDrawQuad> blue_quad = PictureDrawQuad::Create(); 2084 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>();
2135 blue_quad->SetNew(blue_shared_state, 2085 blue_quad->SetNew(blue_shared_state,
2136 quad_content_rect, 2086 quad_content_rect,
2137 gfx::Rect(), 2087 gfx::Rect(),
2138 quad_content_rect, 2088 quad_content_rect,
2139 gfx::RectF(quad_content_rect), 2089 gfx::RectF(quad_content_rect),
2140 content_union_rect.size(), 2090 content_union_rect.size(),
2141 texture_format, 2091 texture_format,
2142 content_union_rect, 2092 content_union_rect,
2143 contents_scale, 2093 contents_scale,
2144 PicturePileImpl::CreateFromOther(pile)); 2094 PicturePileImpl::CreateFromOther(pile));
2145 pass->quad_list.push_back(blue_quad.PassAs<DrawQuad>());
2146 2095
2147 // Fill left half of viewport with green. 2096 // Fill left half of viewport with green.
2148 gfx::Transform half_green_content_to_target_transform; 2097 gfx::Transform half_green_content_to_target_transform;
2149 gfx::Rect half_green_rect(gfx::Size(viewport.width() / 2, viewport.height())); 2098 gfx::Rect half_green_rect(gfx::Size(viewport.width() / 2, viewport.height()));
2150 SharedQuadState* half_green_shared_state = CreateTestSharedQuadState( 2099 SharedQuadState* half_green_shared_state = CreateTestSharedQuadState(
2151 pass.get(), half_green_content_to_target_transform, half_green_rect); 2100 half_green_content_to_target_transform, half_green_rect, pass.get());
2152 scoped_ptr<SolidColorDrawQuad> half_color_quad = SolidColorDrawQuad::Create(); 2101 SolidColorDrawQuad* half_color_quad =
2102 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
2153 half_color_quad->SetNew(half_green_shared_state, 2103 half_color_quad->SetNew(half_green_shared_state,
2154 half_green_rect, 2104 half_green_rect,
2155 half_green_rect, 2105 half_green_rect,
2156 SK_ColorGREEN, 2106 SK_ColorGREEN,
2157 false); 2107 false);
2158 pass->quad_list.push_back(half_color_quad.PassAs<DrawQuad>());
2159 2108
2160 RenderPassList pass_list; 2109 RenderPassList pass_list;
2161 pass_list.push_back(pass.Pass()); 2110 pass_list.push_back(pass.Pass());
2162 2111
2163 EXPECT_TRUE(this->RunPixelTest( 2112 EXPECT_TRUE(this->RunPixelTest(
2164 &pass_list, 2113 &pass_list,
2165 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 2114 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
2166 ExactPixelComparator(true))); 2115 ExactPixelComparator(true)));
2167 } 2116 }
2168 2117
2169 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { 2118 TYPED_TEST(RendererPixelTest, WrapModeRepeat) {
2170 gfx::Rect rect(this->device_viewport_size_); 2119 gfx::Rect rect(this->device_viewport_size_);
2171 2120
2172 RenderPass::Id id(1, 1); 2121 RenderPass::Id id(1, 1);
2173 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); 2122 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect);
2174 2123
2175 SharedQuadState* shared_state = 2124 SharedQuadState* shared_state =
2176 CreateTestSharedQuadState(pass.get(), gfx::Transform(), rect); 2125 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get());
2177 2126
2178 gfx::Rect texture_rect(4, 4); 2127 gfx::Rect texture_rect(4, 4);
2179 SkPMColor colors[4] = { 2128 SkPMColor colors[4] = {
2180 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), 2129 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)),
2181 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), 2130 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)),
2182 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), 2131 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)),
2183 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), 2132 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)),
2184 }; 2133 };
2185 uint32_t pixels[16] = { 2134 uint32_t pixels[16] = {
2186 colors[0], colors[0], colors[1], colors[1], 2135 colors[0], colors[0], colors[1], colors[1],
2187 colors[0], colors[0], colors[1], colors[1], 2136 colors[0], colors[0], colors[1], colors[1],
2188 colors[2], colors[2], colors[3], colors[3], 2137 colors[2], colors[2], colors[3], colors[3],
2189 colors[2], colors[2], colors[3], colors[3], 2138 colors[2], colors[2], colors[3], colors[3],
2190 }; 2139 };
2191 ResourceProvider::ResourceId resource = 2140 ResourceProvider::ResourceId resource =
2192 this->resource_provider_->CreateResource( 2141 this->resource_provider_->CreateResource(
2193 texture_rect.size(), 2142 texture_rect.size(),
2194 GL_REPEAT, 2143 GL_REPEAT,
2195 ResourceProvider::TextureUsageAny, 2144 ResourceProvider::TextureUsageAny,
2196 RGBA_8888); 2145 RGBA_8888);
2197 this->resource_provider_->SetPixels( 2146 this->resource_provider_->SetPixels(
2198 resource, 2147 resource,
2199 reinterpret_cast<uint8_t*>(pixels), 2148 reinterpret_cast<uint8_t*>(pixels),
2200 texture_rect, 2149 texture_rect,
2201 texture_rect, 2150 texture_rect,
2202 gfx::Vector2d()); 2151 gfx::Vector2d());
2203 2152
2204 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; 2153 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2205 scoped_ptr<TextureDrawQuad> texture_quad = TextureDrawQuad::Create(); 2154 TextureDrawQuad* texture_quad =
2155 pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
2206 texture_quad->SetNew( 2156 texture_quad->SetNew(
2207 shared_state, 2157 shared_state,
2208 gfx::Rect(this->device_viewport_size_), 2158 gfx::Rect(this->device_viewport_size_),
2209 gfx::Rect(), 2159 gfx::Rect(),
2210 gfx::Rect(this->device_viewport_size_), 2160 gfx::Rect(this->device_viewport_size_),
2211 resource, 2161 resource,
2212 true, // premultiplied_alpha 2162 true, // premultiplied_alpha
2213 gfx::PointF(0.0f, 0.0f), // uv_top_left 2163 gfx::PointF(0.0f, 0.0f), // uv_top_left
2214 gfx::PointF( // uv_bottom_right 2164 gfx::PointF( // uv_bottom_right
2215 this->device_viewport_size_.width() / texture_rect.width(), 2165 this->device_viewport_size_.width() / texture_rect.width(),
2216 this->device_viewport_size_.height() / texture_rect.height()), 2166 this->device_viewport_size_.height() / texture_rect.height()),
2217 SK_ColorWHITE, 2167 SK_ColorWHITE,
2218 vertex_opacity, 2168 vertex_opacity,
2219 false); // flipped 2169 false); // flipped
2220 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>());
2221 2170
2222 RenderPassList pass_list; 2171 RenderPassList pass_list;
2223 pass_list.push_back(pass.Pass()); 2172 pass_list.push_back(pass.Pass());
2224 2173
2225 EXPECT_TRUE(this->RunPixelTest( 2174 EXPECT_TRUE(this->RunPixelTest(
2226 &pass_list, 2175 &pass_list,
2227 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), 2176 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")),
2228 FuzzyPixelOffByOneComparator(true))); 2177 FuzzyPixelOffByOneComparator(true)));
2229 } 2178 }
2230 2179
2231 #endif // !defined(OS_ANDROID) 2180 #endif // !defined(OS_ANDROID)
2232 2181
2233 } // namespace 2182 } // namespace
2234 } // namespace cc 2183 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_unittest.cc ('k') | cc/output/software_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698