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