// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_IMPELLER_RENDERER_COMPUTE_PASS_H_ #define FLUTTER_IMPELLER_RENDERER_COMPUTE_PASS_H_ #include #include "fml/status.h" #include "impeller/core/resource_binder.h" #include "impeller/renderer/compute_pipeline_descriptor.h" #include "impeller/renderer/pipeline_descriptor.h" namespace impeller { //------------------------------------------------------------------------------ /// @brief Compute passes encode compute shader into the underlying command /// buffer. /// /// @see `CommandBuffer` /// class ComputePass : public ResourceBinder { public: virtual ~ComputePass(); virtual bool IsValid() const = 0; void SetLabel(const std::string& label); virtual void SetCommandLabel(std::string_view label) = 0; virtual void SetPipeline( const std::shared_ptr>& pipeline) = 0; virtual fml::Status Compute(const ISize& grid_size) = 0; /// @brief Ensures all previously encoded compute command's buffer writes are /// visible to any subsequent compute commands. /// /// On Vulkan, it does not matter if the compute command is in a /// different command buffer, only that it is executed later in queue /// order. virtual void AddBufferMemoryBarrier() = 0; /// @brief Ensures all previously encoded compute command's texture writes are /// visible to any subsequent compute commands. /// /// On Vulkan, it does not matter if the compute command is in a /// different command buffer, only that it is executed later in queue /// order. virtual void AddTextureMemoryBarrier() = 0; //---------------------------------------------------------------------------- /// @brief Encode the recorded commands to the underlying command buffer. /// /// @return If the commands were encoded to the underlying command /// buffer. /// virtual bool EncodeCommands() const = 0; const Context& GetContext() const { return *context_; } protected: const std::shared_ptr context_; explicit ComputePass(std::shared_ptr context); virtual void OnSetLabel(const std::string& label) = 0; private: ComputePass(const ComputePass&) = delete; ComputePass& operator=(const ComputePass&) = delete; }; } // namespace impeller #endif // FLUTTER_IMPELLER_RENDERER_COMPUTE_PASS_H_