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 #ifndef CC_TEST_RENDER_PASS_TEST_UTILS_H_
6 #define CC_TEST_RENDER_PASS_TEST_UTILS_H_
7
8 #include <stdint.h>
9
10 #include <vector>
11
12 #include "cc/paint/filter_operations.h"
13 #include "components/viz/common/quads/aggregated_render_pass.h"
14 #include "components/viz/common/quads/compositor_render_pass.h"
15 #include "third_party/skia/include/core/SkColor.h"
16
17 namespace gfx {
18 class Rect;
19 class Transform;
20 }
21
22 namespace gpu {
23 struct SyncToken;
24 }
25
26 namespace viz {
27 class ClientResourceProvider;
28 class ContextProvider;
29 class DisplayResourceProvider;
30 class CompositorRenderPass;
31 class SolidColorDrawQuad;
32 } // namespace viz
33
34 namespace cc {
35
36 // Adds a new render pass with the provided properties to the given
37 // render pass list.
38 viz::CompositorRenderPass* AddRenderPass(
39 viz::CompositorRenderPassList* pass_list,
40 viz::CompositorRenderPassId render_pass_id,
41 const gfx::Rect& output_rect,
42 const gfx::Transform& root_transform,
43 const FilterOperations& filters);
44
45 viz::AggregatedRenderPass* AddRenderPass(
46 viz::AggregatedRenderPassList* pass_list,
47 viz::AggregatedRenderPassId render_pass_id,
48 const gfx::Rect& output_rect,
49 const gfx::Transform& root_transform,
50 const FilterOperations& filters);
51
52 // Adds a new render pass with the provided properties to the given
53 // render pass list.
54 viz::CompositorRenderPass* AddRenderPassWithDamage(
55 viz::CompositorRenderPassList* pass_list,
56 viz::CompositorRenderPassId render_pass_id,
57 const gfx::Rect& output_rect,
58 const gfx::Rect& damage_rect,
59 const gfx::Transform& root_transform,
60 const FilterOperations& filters);
61 viz::AggregatedRenderPass* AddRenderPassWithDamage(
62 viz::AggregatedRenderPassList* pass_list,
63 viz::AggregatedRenderPassId render_pass_id,
64 const gfx::Rect& output_rect,
65 const gfx::Rect& damage_rect,
66 const gfx::Transform& root_transform,
67 const FilterOperations& filters);
68
69 // Adds a solid quad to a given render pass.
70 template <typename RenderPassType>
AddQuad(RenderPassType * pass,const gfx::Rect & rect,SkColor color)71 inline viz::SolidColorDrawQuad* AddQuad(RenderPassType* pass,
72 const gfx::Rect& rect,
73 SkColor color) {
74 viz::SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState();
75 shared_state->SetAll(gfx::Transform(), rect, rect, gfx::MaskFilterInfo(),
76 rect, false, false, 1, SkBlendMode::kSrcOver, 0);
77 auto* quad =
78 pass->template CreateAndAppendDrawQuad<viz::SolidColorDrawQuad>();
79 quad->SetNew(shared_state, rect, rect, color, false);
80 return quad;
81 }
82
83 // Adds a solid quad to a given render pass and sets is_clipped=true.
84 viz::SolidColorDrawQuad* AddClippedQuad(viz::AggregatedRenderPass* pass,
85 const gfx::Rect& rect,
86 SkColor color);
87
88 // Adds a solid quad with a transform to a given render pass.
89 viz::SolidColorDrawQuad* AddTransformedQuad(viz::AggregatedRenderPass* pass,
90 const gfx::Rect& rect,
91 SkColor color,
92 const gfx::Transform& transform);
93
94 // Adds a render pass quad to an existing render pass.
95 viz::CompositorRenderPassDrawQuad* AddRenderPassQuad(
96 viz::CompositorRenderPass* to_pass,
97 viz::CompositorRenderPass* contributing_pass);
98 viz::AggregatedRenderPassDrawQuad* AddRenderPassQuad(
99 viz::AggregatedRenderPass* to_pass,
100 viz::AggregatedRenderPass* contributing_pass);
101
102 // Adds a render pass quad with the given mask resource, filter, and transform.
103 void AddRenderPassQuad(viz::AggregatedRenderPass* to_pass,
104 viz::AggregatedRenderPass* contributing_pass,
105 viz::ResourceId mask_resource_id,
106 gfx::Transform transform,
107 SkBlendMode blend_mode);
108
109 std::vector<viz::ResourceId> AddOneOfEveryQuadType(
110 viz::CompositorRenderPass* to_pass,
111 viz::ClientResourceProvider* resource_provider,
112 viz::CompositorRenderPassId child_pass_id);
113
114 // Adds a render pass quad with the given mask resource, filter, and transform.
115 // The resource used in render pass is created by viz::ClientResourceProvider,
116 // then transferred to viz::DisplayResourceProvider.
117 void AddOneOfEveryQuadTypeInDisplayResourceProvider(
118 viz::AggregatedRenderPass* to_pass,
119 viz::DisplayResourceProvider* resource_provider,
120 viz::ClientResourceProvider* child_resource_provider,
121 viz::ContextProvider* child_context_provider,
122 viz::AggregatedRenderPassId child_pass_id,
123 gpu::SyncToken* sync_token_for_mailbox_texture);
124
125 } // namespace cc
126
127 #endif // CC_TEST_RENDER_PASS_TEST_UTILS_H_
128