1 // 2 // VulkanImage.hpp 3 // MNN 4 // 5 // Created by MNN on 2019/01/31. 6 // Copyright © 2018, Alibaba Group Holding Limited 7 // 8 9 #ifndef VulkanImage_hpp 10 #define VulkanImage_hpp 11 #include <MNN/Tensor.hpp> 12 #include "backend/vulkan/component/VulkanBuffer.hpp" 13 #include "backend/vulkan/component/VulkanMemoryPool.hpp" 14 namespace MNN { 15 class VulkanSampler : public NonCopyable { 16 public: 17 VulkanSampler(const VulkanDevice& dev, VkFilter filter = VK_FILTER_NEAREST, 18 VkSamplerAddressMode mode = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); 19 virtual ~VulkanSampler(); 20 get() const21 VkSampler get() const { 22 return mSampler; 23 } 24 private: 25 VkSampler mSampler; 26 const VulkanDevice& mDevice; 27 }; 28 29 class VulkanImage : public NonCopyable { 30 public: 31 VulkanImage(const VulkanMemoryPool& pool, bool seperate, const std::vector<int>& dims, 32 halide_type_t type = halide_type_of<float>()); VulkanImage(const VulkanMemoryPool & pool,bool seperate,int w,int h)33 VulkanImage(const VulkanMemoryPool& pool, bool seperate, int w, int h) 34 : VulkanImage(pool, seperate, std::vector<int>{w, h}) { 35 } 36 virtual ~VulkanImage(); 37 width() const38 inline int width() const { 39 return std::get<1>(mInfo); 40 } height() const41 inline int height() const { 42 return std::get<2>(mInfo); 43 } depth() const44 inline int depth() const { 45 return std::get<3>(mInfo); 46 } dims() const47 inline std::vector<int> dims() const { 48 return mDims; 49 } get() const50 inline VkImage get() const { 51 return mImage.first; 52 } view() const53 inline VkImageView view() const { 54 return mImage.second; 55 } format() const56 inline VkFormat format() const { 57 return std::get<4>(mInfo); 58 } 59 void release(); layout() const60 inline VkImageLayout layout() const { 61 return mLayout; 62 } setLayout(VkImageLayout layout)63 inline void setLayout(VkImageLayout layout) { 64 mLayout = layout; 65 } 66 private: 67 std::tuple<VkImageType, uint32_t, uint32_t, uint32_t, VkFormat> mInfo; 68 std::pair<VkImage, VkImageView> mImage; 69 const VulkanDevice& mDevice; 70 std::vector<int> mDims; 71 const VulkanMemoryPool& mPool; 72 std::pair<void*, int> mMemory; 73 VkImageLayout mLayout; 74 }; 75 } // namespace MNN 76 77 #endif /* VulkanImage_hpp */ 78