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.
5 #include "cc/test/render_pass_test_common.h"
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"
22 void TestRenderPass::AppendQuad(scoped_ptr
<DrawQuad
> quad
) {
23 quad_list
.push_back(quad
.Pass());
26 void TestRenderPass::AppendSharedQuadState(scoped_ptr
<SharedQuadState
> state
) {
27 shared_quad_state_list
.push_back(state
.Pass());
30 void TestRenderPass::AppendOneOfEveryQuadType(
31 ResourceProvider
* resource_provider
,
32 RenderPass::Id child_pass
) {
33 gfx::Rect
rect(0, 0, 100, 100);
34 gfx::Rect
opaque_rect(10, 10, 80, 80);
35 gfx::Rect
visible_rect(0, 0, 100, 100);
36 const float vertex_opacity
[] = {1.0f
, 1.0f
, 1.0f
, 1.0f
};
37 ResourceProvider::ResourceId resource1
= resource_provider
->CreateResource(
40 ResourceProvider::TextureUsageAny
,
41 resource_provider
->best_texture_format());
42 resource_provider
->AllocateForTesting(resource1
);
43 ResourceProvider::ResourceId resource2
= resource_provider
->CreateResource(
46 ResourceProvider::TextureUsageAny
,
47 resource_provider
->best_texture_format());
48 resource_provider
->AllocateForTesting(resource2
);
49 ResourceProvider::ResourceId resource3
= resource_provider
->CreateResource(
52 ResourceProvider::TextureUsageAny
,
53 resource_provider
->best_texture_format());
54 resource_provider
->AllocateForTesting(resource3
);
55 ResourceProvider::ResourceId resource4
= resource_provider
->CreateResource(
58 ResourceProvider::TextureUsageAny
,
59 resource_provider
->best_texture_format());
60 resource_provider
->AllocateForTesting(resource4
);
61 ResourceProvider::ResourceId resource5
= resource_provider
->CreateResource(
64 ResourceProvider::TextureUsageAny
,
65 resource_provider
->best_texture_format());
66 resource_provider
->AllocateForTesting(resource5
);
67 ResourceProvider::ResourceId resource6
= resource_provider
->CreateResource(
70 ResourceProvider::TextureUsageAny
,
71 resource_provider
->best_texture_format());
72 resource_provider
->AllocateForTesting(resource6
);
73 ResourceProvider::ResourceId resource7
= resource_provider
->CreateResource(
76 ResourceProvider::TextureUsageAny
,
77 resource_provider
->best_texture_format());
78 resource_provider
->AllocateForTesting(resource7
);
80 scoped_ptr
<SharedQuadState
> shared_state
= SharedQuadState::Create();
81 shared_state
->SetAll(gfx::Transform(),
87 SkXfermode::kSrcOver_Mode
);
89 scoped_ptr
<CheckerboardDrawQuad
> checkerboard_quad
=
90 CheckerboardDrawQuad::Create();
91 checkerboard_quad
->SetNew(
92 shared_state
.get(), rect
, visible_rect
, SK_ColorRED
);
93 AppendQuad(checkerboard_quad
.PassAs
<DrawQuad
>());
95 scoped_ptr
<DebugBorderDrawQuad
> debug_border_quad
=
96 DebugBorderDrawQuad::Create();
97 debug_border_quad
->SetNew(
98 shared_state
.get(), rect
, visible_rect
, SK_ColorRED
, 1);
99 AppendQuad(debug_border_quad
.PassAs
<DrawQuad
>());
101 scoped_ptr
<IOSurfaceDrawQuad
> io_surface_quad
= IOSurfaceDrawQuad::Create();
102 io_surface_quad
->SetNew(shared_state
.get(),
108 IOSurfaceDrawQuad::FLIPPED
);
109 AppendQuad(io_surface_quad
.PassAs
<DrawQuad
>());
111 if (child_pass
.layer_id
) {
112 scoped_ptr
<RenderPassDrawQuad
> render_pass_quad
=
113 RenderPassDrawQuad::Create();
114 render_pass_quad
->SetNew(shared_state
.get(),
124 AppendQuad(render_pass_quad
.PassAs
<DrawQuad
>());
126 scoped_ptr
<RenderPassDrawQuad
> render_pass_replica_quad
=
127 RenderPassDrawQuad::Create();
128 render_pass_replica_quad
->SetNew(shared_state
.get(),
138 AppendQuad(render_pass_replica_quad
.PassAs
<DrawQuad
>());
141 scoped_ptr
<SolidColorDrawQuad
> solid_color_quad
=
142 SolidColorDrawQuad::Create();
143 solid_color_quad
->SetNew(
144 shared_state
.get(), rect
, visible_rect
, SK_ColorRED
, false);
145 AppendQuad(solid_color_quad
.PassAs
<DrawQuad
>());
147 scoped_ptr
<StreamVideoDrawQuad
> stream_video_quad
=
148 StreamVideoDrawQuad::Create();
149 stream_video_quad
->SetNew(shared_state
.get(),
155 AppendQuad(stream_video_quad
.PassAs
<DrawQuad
>());
157 scoped_ptr
<TextureDrawQuad
> texture_quad
= TextureDrawQuad::Create();
158 texture_quad
->SetNew(shared_state
.get(),
164 gfx::PointF(0.f
, 0.f
),
165 gfx::PointF(1.f
, 1.f
),
169 AppendQuad(texture_quad
.PassAs
<DrawQuad
>());
171 scoped_ptr
<TileDrawQuad
> scaled_tile_quad
= TileDrawQuad::Create();
172 scaled_tile_quad
->SetNew(shared_state
.get(),
177 gfx::RectF(0, 0, 50, 50),
180 AppendQuad(scaled_tile_quad
.PassAs
<DrawQuad
>());
182 scoped_ptr
<SharedQuadState
> transformed_state
= shared_state
->Copy();
183 gfx::Transform rotation
;
185 transformed_state
->content_to_target_transform
=
186 transformed_state
->content_to_target_transform
* rotation
;
187 scoped_ptr
<TileDrawQuad
> transformed_tile_quad
= TileDrawQuad::Create();
188 transformed_tile_quad
->SetNew(transformed_state
.get(),
193 gfx::RectF(0, 0, 100, 100),
196 AppendQuad(transformed_tile_quad
.PassAs
<DrawQuad
>());
198 scoped_ptr
<SharedQuadState
> shared_state2
= SharedQuadState::Create();
199 shared_state
->SetAll(gfx::Transform(),
205 SkXfermode::kSrcOver_Mode
);
207 scoped_ptr
<TileDrawQuad
> tile_quad
= TileDrawQuad::Create();
208 tile_quad
->SetNew(shared_state2
.get(),
213 gfx::RectF(0, 0, 100, 100),
216 AppendQuad(tile_quad
.PassAs
<DrawQuad
>());
218 ResourceProvider::ResourceId plane_resources
[4];
219 for (int i
= 0; i
< 4; ++i
) {
221 resource_provider
->CreateResource(
224 ResourceProvider::TextureUsageAny
,
225 resource_provider
->best_texture_format());
226 resource_provider
->AllocateForTesting(plane_resources
[i
]);
228 YUVVideoDrawQuad::ColorSpace color_space
= YUVVideoDrawQuad::REC_601
;
229 scoped_ptr
<YUVVideoDrawQuad
> yuv_quad
= YUVVideoDrawQuad::Create();
230 yuv_quad
->SetNew(shared_state2
.get(),
234 gfx::RectF(0, 0, 100, 100),
240 AppendQuad(yuv_quad
.PassAs
<DrawQuad
>());
242 AppendSharedQuadState(shared_state
.Pass());
243 AppendSharedQuadState(transformed_state
.Pass());
244 AppendSharedQuadState(shared_state2
.Pass());