// 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_COMMAND_QUEUE_H_ #define FLUTTER_IMPELLER_RENDERER_COMMAND_QUEUE_H_ #include #include "fml/status.h" #include "impeller/renderer/command_buffer.h" namespace impeller { /// @brief An interface for submitting command buffers to the GPU for /// encoding and execution. class CommandQueue { public: using CompletionCallback = std::function; CommandQueue(); virtual ~CommandQueue(); /// @brief Submit one or more command buffer objects to be encoded and /// executed on the GPU. /// /// The order of the provided buffers determines the ordering in which /// they are submitted. /// /// The returned status only indicates if the command buffer was /// successfully submitted. Successful completion of the command buffer /// can only be checked in the optional completion callback. /// /// Only the Metal and Vulkan backends can give a status beyond /// successful encoding. This callback may be called more than once and /// potentially on a different thread. virtual fml::Status Submit( const std::vector>& buffers, const CompletionCallback& completion_callback = {}); private: CommandQueue(const CommandQueue&) = delete; CommandQueue& operator=(const CommandQueue&) = delete; }; } // namespace impeller #endif // FLUTTER_IMPELLER_RENDERER_COMMAND_QUEUE_H_