#ifndef VulkanGaussianRender_hpp #define VulkanGaussianRender_hpp #include "VulkanBasicExecution.hpp" namespace MNN { class VulkanRadixSort { public: struct Content; VulkanRadixSort(Backend* bn, int needBit); ~VulkanRadixSort(); ErrorCode onExcute(std::pair srcIndex, std::pair dstIndex, const VulkanCommandPool::Buffer *cmdBuffer, int numberPoint, std::shared_ptr sortNumber); void autoTune(std::pair srcIndex, std::pair dstIndex, int numberPoint, std::shared_ptr sortNumber); private: Content* mContent; Backend* mBackend; int mNeedBits; int mPerSortBit = 4; int mLocalSize = 256; int mGroupSize = 16; }; class VulkanRasterSort : public VulkanBasicExecution { public: struct Content; VulkanRasterSort(Backend* bn); virtual ~ VulkanRasterSort(); virtual ErrorCode onEncode(const std::vector &inputs, const std::vector &outputs, const VulkanCommandPool::Buffer *cmdBuffer) override; void autoTune(const std::vector &inputs, const std::vector &outputs); private: Content* mContent; std::shared_ptr mRadixSort; int mLocalSize = 1024; int mGroupSize = 1024; }; }; #endif