xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrRenderTaskCluster.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2021 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrRenderTaskCluster_DEFINED
9 #define GrRenderTaskCluster_DEFINED
10 
11 #include "include/core/SkRefCnt.h"  // IWYU pragma: keep
12 #include "include/core/SkSpan.h"
13 #include "src/base/SkTInternalLList.h"  // IWYU pragma: keep
14 
15 class GrRenderTask;
16 
17 // Take a topologically-sorted DAG and cluster the tasks together while maintaining the
18 // dependencies.
19 //
20 // If no clustering is possible the llist is populated with the nodes in the original order and
21 // false is returned.
22 // Otherwise, returns true and populates the provided llist as such:
23 //   - Contains the same set of tasks as `input`.
24 //   - Obeys the dependency rules in `input`.
25 //   - Places tasks with the same target adjacent to each other.
26 //   - Tasks with multiple targets act as reordering barriers for all their targets.
27 bool GrClusterRenderTasks(SkSpan<const sk_sp<GrRenderTask>> input,
28                           SkTInternalLList<GrRenderTask>* llist);
29 
30 #endif
31