// // VulkanConvolutionWinograd.hpp // MNN // // Created by MNN on 2019/01/31. // Copyright © 2018, Alibaba Group Holding Limited // #ifndef VulkanConvolutionWinograd_hpp #define VulkanConvolutionWinograd_hpp #include "VulkanConvolutionImpl.hpp" #include "VulkanMatrixMultier4x4.hpp" namespace MNN { class VulkanConvolutionWinograd : public VulkanBasicExecution { public: VulkanConvolutionWinograd(VulkanBackend* backend, const Convolution2DCommon* convOption, const float* weightPtr, const float* biasPtr, int ci, int co); virtual ~VulkanConvolutionWinograd(); virtual ErrorCode onEncode(const std::vector& inputs, const std::vector& outputs, const VulkanCommandPool::Buffer* cmdBuffer) override; static bool support(const Convolution2DCommon* convOption); private: std::shared_ptr mMultier; std::shared_ptr mBias; VulkanBackend* mBackend = nullptr; const VulkanPipeline* mSourceTransform = nullptr; const VulkanPipeline* mDestTransform = nullptr; const VulkanSampler* mSampler = nullptr; std::vector> mSourceTransformSet; std::vector> mDestTransformSet; std::shared_ptr mWinogradConst; ivec3 mTransformLocalSize; const Convolution2DCommon* mCommon; std::vector> mOffsetsBuffer; int mUnit = 0; }; } // namespace MNN #endif /* VulkanConvolutionWinograd_hpp */