render_pass_test_common.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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
3// found in the LICENSE file.
4
5#include "cc/test/render_pass_test_common.h"
6
7#include "cc/quads/checkerboard_draw_quad.h"
8#include "cc/quads/debug_border_draw_quad.h"
9#include "cc/quads/io_surface_draw_quad.h"
10#include "cc/quads/render_pass_draw_quad.h"
11#include "cc/quads/shared_quad_state.h"
12#include "cc/quads/solid_color_draw_quad.h"
13#include "cc/quads/stream_video_draw_quad.h"
14#include "cc/quads/texture_draw_quad.h"
15#include "cc/quads/tile_draw_quad.h"
16#include "cc/quads/yuv_video_draw_quad.h"
17#include "cc/resources/resource_provider.h"
18#include "ui/gfx/transform.h"
19
20namespace cc {
21
22void TestRenderPass::AppendOneOfEveryQuadType(
23    ResourceProvider* resource_provider,
24    RenderPass::Id child_pass) {
25  gfx::Rect rect(0, 0, 100, 100);
26  gfx::Rect opaque_rect(10, 10, 80, 80);
27  gfx::Rect visible_rect(0, 0, 100, 100);
28  const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
29  ResourceProvider::ResourceId resource1 = resource_provider->CreateResource(
30      gfx::Size(45, 5),
31      GL_CLAMP_TO_EDGE,
32      ResourceProvider::TextureUsageAny,
33      resource_provider->best_texture_format());
34  resource_provider->AllocateForTesting(resource1);
35  ResourceProvider::ResourceId resource2 = resource_provider->CreateResource(
36      gfx::Size(346, 61),
37      GL_CLAMP_TO_EDGE,
38      ResourceProvider::TextureUsageAny,
39      resource_provider->best_texture_format());
40  resource_provider->AllocateForTesting(resource2);
41  ResourceProvider::ResourceId resource3 = resource_provider->CreateResource(
42      gfx::Size(12, 134),
43      GL_CLAMP_TO_EDGE,
44      ResourceProvider::TextureUsageAny,
45      resource_provider->best_texture_format());
46  resource_provider->AllocateForTesting(resource3);
47  ResourceProvider::ResourceId resource4 = resource_provider->CreateResource(
48      gfx::Size(56, 12),
49      GL_CLAMP_TO_EDGE,
50      ResourceProvider::TextureUsageAny,
51      resource_provider->best_texture_format());
52  resource_provider->AllocateForTesting(resource4);
53  ResourceProvider::ResourceId resource5 = resource_provider->CreateResource(
54      gfx::Size(73, 26),
55      GL_CLAMP_TO_EDGE,
56      ResourceProvider::TextureUsageAny,
57      resource_provider->best_texture_format());
58  resource_provider->AllocateForTesting(resource5);
59  ResourceProvider::ResourceId resource6 = resource_provider->CreateResource(
60      gfx::Size(64, 92),
61      GL_CLAMP_TO_EDGE,
62      ResourceProvider::TextureUsageAny,
63      resource_provider->best_texture_format());
64  resource_provider->AllocateForTesting(resource6);
65  ResourceProvider::ResourceId resource7 = resource_provider->CreateResource(
66      gfx::Size(9, 14),
67      GL_CLAMP_TO_EDGE,
68      ResourceProvider::TextureUsageAny,
69      resource_provider->best_texture_format());
70  resource_provider->AllocateForTesting(resource7);
71
72  SharedQuadState* shared_state = this->CreateAndAppendSharedQuadState();
73  shared_state->SetAll(gfx::Transform(),
74                       rect.size(),
75                       rect,
76                       rect,
77                       false,
78                       1,
79                       SkXfermode::kSrcOver_Mode,
80                       0);
81
82  CheckerboardDrawQuad* checkerboard_quad =
83      this->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
84  checkerboard_quad->SetNew(shared_state, rect, visible_rect, SK_ColorRED);
85
86  DebugBorderDrawQuad* debug_border_quad =
87      this->CreateAndAppendDrawQuad<DebugBorderDrawQuad>();
88  debug_border_quad->SetNew(shared_state, rect, visible_rect, SK_ColorRED, 1);
89
90  IOSurfaceDrawQuad* io_surface_quad =
91      this->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>();
92  io_surface_quad->SetNew(shared_state,
93                          rect,
94                          opaque_rect,
95                          visible_rect,
96                          gfx::Size(50, 50),
97                          resource7,
98                          IOSurfaceDrawQuad::FLIPPED);
99
100  if (child_pass.layer_id) {
101    RenderPassDrawQuad* render_pass_quad =
102        this->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
103    render_pass_quad->SetNew(shared_state,
104                             rect,
105                             visible_rect,
106                             child_pass,
107                             resource5,
108                             gfx::RectF(),
109                             FilterOperations(),
110                             gfx::Vector2dF(),
111                             FilterOperations());
112
113    RenderPassDrawQuad* render_pass_replica_quad =
114        this->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
115    render_pass_replica_quad->SetNew(shared_state,
116                                     rect,
117                                     visible_rect,
118                                     child_pass,
119                                     resource5,
120                                     gfx::RectF(),
121                                     FilterOperations(),
122                                     gfx::Vector2dF(),
123                                     FilterOperations());
124  }
125
126  SolidColorDrawQuad* solid_color_quad =
127      this->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
128  solid_color_quad->SetNew(
129      shared_state, rect, visible_rect, SK_ColorRED, false);
130
131  StreamVideoDrawQuad* stream_video_quad =
132      this->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
133  stream_video_quad->SetNew(shared_state,
134                            rect,
135                            opaque_rect,
136                            visible_rect,
137                            resource6,
138                            gfx::Transform());
139
140  TextureDrawQuad* texture_quad =
141      this->CreateAndAppendDrawQuad<TextureDrawQuad>();
142  texture_quad->SetNew(shared_state,
143                       rect,
144                       opaque_rect,
145                       visible_rect,
146                       resource1,
147                       false,
148                       gfx::PointF(0.f, 0.f),
149                       gfx::PointF(1.f, 1.f),
150                       SK_ColorTRANSPARENT,
151                       vertex_opacity,
152                       false);
153
154  TileDrawQuad* scaled_tile_quad =
155      this->CreateAndAppendDrawQuad<TileDrawQuad>();
156  scaled_tile_quad->SetNew(shared_state,
157                           rect,
158                           opaque_rect,
159                           visible_rect,
160                           resource2,
161                           gfx::RectF(0, 0, 50, 50),
162                           gfx::Size(50, 50),
163                           false);
164
165  SharedQuadState* transformed_state = this->CreateAndAppendSharedQuadState();
166  transformed_state->CopyFrom(shared_state);
167  gfx::Transform rotation;
168  rotation.Rotate(45);
169  transformed_state->content_to_target_transform =
170      transformed_state->content_to_target_transform * rotation;
171  TileDrawQuad* transformed_tile_quad =
172      this->CreateAndAppendDrawQuad<TileDrawQuad>();
173  transformed_tile_quad->SetNew(transformed_state,
174                                rect,
175                                opaque_rect,
176                                visible_rect,
177                                resource3,
178                                gfx::RectF(0, 0, 100, 100),
179                                gfx::Size(100, 100),
180                                false);
181
182  SharedQuadState* shared_state2 = this->CreateAndAppendSharedQuadState();
183  shared_state->SetAll(gfx::Transform(),
184                       rect.size(),
185                       rect,
186                       rect,
187                       false,
188                       1,
189                       SkXfermode::kSrcOver_Mode,
190                       0);
191
192  TileDrawQuad* tile_quad = this->CreateAndAppendDrawQuad<TileDrawQuad>();
193  tile_quad->SetNew(shared_state2,
194                    rect,
195                    opaque_rect,
196                    visible_rect,
197                    resource4,
198                    gfx::RectF(0, 0, 100, 100),
199                    gfx::Size(100, 100),
200                    false);
201
202  ResourceProvider::ResourceId plane_resources[4];
203  for (int i = 0; i < 4; ++i) {
204    plane_resources[i] =
205        resource_provider->CreateResource(
206            gfx::Size(20, 12),
207            GL_CLAMP_TO_EDGE,
208            ResourceProvider::TextureUsageAny,
209            resource_provider->best_texture_format());
210    resource_provider->AllocateForTesting(plane_resources[i]);
211  }
212  YUVVideoDrawQuad::ColorSpace color_space = YUVVideoDrawQuad::REC_601;
213  YUVVideoDrawQuad* yuv_quad =
214      this->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
215  yuv_quad->SetNew(shared_state2,
216                   rect,
217                   opaque_rect,
218                   visible_rect,
219                   gfx::RectF(0, 0, 100, 100),
220                   plane_resources[0],
221                   plane_resources[1],
222                   plane_resources[2],
223                   plane_resources[3],
224                   color_space);
225}
226
227}  // namespace cc
228