render_pass_test_utils.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/render_pass_test_utils.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/quad_sink.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass_draw_quad.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/shared_quad_state.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/solid_color_draw_quad.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/resources/resource_provider.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/mock_quad_culler.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/render_pass_test_common.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestRenderPass* AddRenderPass(RenderPassList* pass_list,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              RenderPass::Id id,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              const gfx::Rect& output_rect,
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              const gfx::Transform& root_transform) {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestRenderPass> pass(TestRenderPass::Create());
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pass->SetNew(id, output_rect, output_rect, root_transform);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestRenderPass* saved = pass.get();
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  pass_list->push_back(pass.PassAs<RenderPass>());
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return saved;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddQuad(TestRenderPass* pass,
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            const gfx::Rect& rect,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            SkColor color) {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockQuadCuller quad_sink(&pass->quad_list, &pass->shared_quad_state_list);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SharedQuadState* shared_state =
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quad_sink.UseSharedQuadState(SharedQuadState::Create());
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SolidColorDrawQuad* AddClippedQuad(TestRenderPass* pass,
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                   const gfx::Rect& rect,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   SkColor color) {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockQuadCuller quad_sink(&pass->quad_list, &pass->shared_quad_state_list);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SharedQuadState* shared_state =
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quad_sink.UseSharedQuadState(SharedQuadState::Create());
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect.size(),
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       rect,
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       true,
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return quad_ptr;
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)SolidColorDrawQuad* AddTransformedQuad(TestRenderPass* pass,
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                       const gfx::Rect& rect,
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       SkColor color,
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const gfx::Transform& transform) {
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockQuadCuller quad_sink(&pass->quad_list, &pass->shared_quad_state_list);
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SharedQuadState* shared_state =
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      quad_sink.UseSharedQuadState(SharedQuadState::Create());
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      transform, rect.size(), rect, rect, false, 1, SkXfermode::kSrcOver_Mode);
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state, rect, rect, color, false);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SolidColorDrawQuad* quad_ptr = quad.get();
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return quad_ptr;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       TestRenderPass* contributing_pass) {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockQuadCuller quad_sink(&to_pass->quad_list,
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           &to_pass->shared_quad_state_list);
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SharedQuadState* shared_state =
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      quad_sink.UseSharedQuadState(SharedQuadState::Create());
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(gfx::Transform(),
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               0,
108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               FilterOperations(),
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AddRenderPassQuad(TestRenderPass* to_pass,
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       TestRenderPass* contributing_pass,
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       ResourceProvider::ResourceId mask_resource_id,
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                       const FilterOperations& filters,
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       gfx::Transform transform) {
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockQuadCuller quad_sink(&to_pass->quad_list,
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           &to_pass->shared_quad_state_list);
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect output_rect = contributing_pass->output_rect;
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SharedQuadState* shared_state =
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      quad_sink.UseSharedQuadState(SharedQuadState::Create());
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  shared_state->SetAll(transform,
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect.size(),
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       output_rect,
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       false,
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       1,
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       SkXfermode::kSrcOver_Mode);
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad->SetNew(shared_state,
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               contributing_pass->id,
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               false,
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               mask_resource_id,
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               output_rect,
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               gfx::RectF(),
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               filters,
14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)               FilterOperations());
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  quad_sink.MaybeAppend(quad.PassAs<DrawQuad>());
144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
147