#ifndef VulkanRaster_hpp #define VulkanRaster_hpp #include "VulkanBasicExecution.hpp" #include "VulkanImageConverter.hpp" namespace MNN { class VulkanRaster : public VulkanBasicExecution { public: VulkanRaster(Backend *bn) : VulkanBasicExecution(bn) { //Do nothing } virtual ~VulkanRaster() = default; virtual ErrorCode onEncode(const std::vector &inputs, const std::vector &outputs, const VulkanCommandPool::Buffer *cmdBuffer) override; void onEncodeFast(const Tensor* input, const Tensor* output, const VulkanCommandPool::Buffer *cmdBuffer, bool zero); private: struct ConvertInfo { const VulkanPipeline* pipeline = nullptr; std::shared_ptr convert; std::shared_ptr buffer; }; std::map mInputBuffers; ConvertInfo mOutputBuffer; struct BlitInfo { const VulkanPipeline* pipeline = nullptr; std::shared_ptr describe; std::shared_ptr uniform; VkBuffer srcBuffer; int srcBufferSize; VkBuffer dstBuffer; int dstBufferSize; ivec3 workGroup; }; struct BlitImageInfo { std::shared_ptr describe; std::shared_ptr uniform; }; std::vector mBlits; std::vector mBlitImages; struct FillInfo { VkBuffer dstBuffer; int dstBufferSize; }; FillInfo mZero; std::vector> mExtraDescribes; std::vector> mExtraUniform; }; }; #endif