/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_graphite_compute_DispatchGroup_DEFINED #define skgpu_graphite_compute_DispatchGroup_DEFINED #include "include/core/SkRefCnt.h" #include "include/private/base/SkTArray.h" #include "src/gpu/graphite/ComputePipelineDesc.h" #include "src/gpu/graphite/ComputeTypes.h" #include "src/gpu/graphite/ResourceTypes.h" #include "src/gpu/graphite/Sampler.h" #include "src/gpu/graphite/TextureProxy.h" #include "src/gpu/graphite/compute/ComputeStep.h" #include <variant> namespace skgpu::graphite { class CommandBuffer; class ComputePipeline; class Recorder; class ResourceProvider; BindingIndex; struct TextureIndex { … }; struct SamplerIndex { … }; DispatchResource; DispatchResourceOptional; struct ResourceBinding { … }; /** * DispatchGroup groups a series of compute pipeline dispatches that need to execute sequentially * (i.e. with a barrier). Dispatches are stored in the order that they will be encoded * in the eventual command buffer. * * A DispatchGroup can be constructed from a series of ComputeSteps using a Builder. The Builder * verifies that the data flow specification between successive ComputeSteps are compatible. * The resources required by a ComputeStep (such as Buffers and TextureProxies) are created by * the Builder as they get added. * * Once a DispatchGroup is finalized, it is immutable. It contains the complete ResourceBinding list * for each dispatch. A list of finalized DispatchGroups can be submitted to the command buffer in a * ComputeTask. */ class DispatchGroup final { … }; class DispatchGroup::Builder final { … }; } // namespace skgpu::graphite #endif // skgpu_graphite_compute_DispatchGroup_DEFINED