| /* | |
| * Copyright 2021 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrRenderTaskCluster_DEFINED | |
| #define GrRenderTaskCluster_DEFINED | |
| #include "include/core/SkRefCnt.h" // IWYU pragma: keep | |
| #include "include/core/SkSpan.h" | |
| #include "src/base/SkTInternalLList.h" // IWYU pragma: keep | |
| class GrRenderTask; | |
| // Take a topologically-sorted DAG and cluster the tasks together while maintaining the | |
| // dependencies. | |
| // | |
| // If no clustering is possible the llist is populated with the nodes in the original order and | |
| // false is returned. | |
| // Otherwise, returns true and populates the provided llist as such: | |
| // - Contains the same set of tasks as `input`. | |
| // - Obeys the dependency rules in `input`. | |
| // - Places tasks with the same target adjacent to each other. | |
| // - Tasks with multiple targets act as reordering barriers for all their targets. | |
| bool GrClusterRenderTasks(SkSpan<const sk_sp<GrRenderTask>> input, | |
| SkTInternalLList<GrRenderTask>* llist); | |
| #endif |