| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- // Tencent is pleased to support the open source community by making ncnn available.
- //
- // Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
- //
- // Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
- // in compliance with the License. You may obtain a copy of the License at
- //
- // https://opensource.org/licenses/BSD-3-Clause
- //
- // Unless required by applicable law or agreed to in writing, software distributed
- // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- // CONDITIONS OF ANY KIND, either express or implied. See the License for the
- // specific language governing permissions and limitations under the License.
- #ifndef NCNN_COMMAND_H
- #define NCNN_COMMAND_H
- #include "platform.h"
- #if NCNN_VULKAN
- #include "mat.h"
- #include <vulkan/vulkan.h>
- namespace ncnn {
- class Pipeline;
- #if NCNN_PLATFORM_API
- #if __ANDROID_API__ >= 26
- class ImportAndroidHardwareBufferPipeline;
- #endif // __ANDROID_API__ >= 26
- #endif // NCNN_PLATFORM_API
- class VkComputePrivate;
- class NCNN_EXPORT VkCompute
- {
- public:
- explicit VkCompute(const VulkanDevice* vkdev);
- virtual ~VkCompute();
- public:
- void record_upload(const Mat& src, VkMat& dst, const Option& opt);
- void record_upload(const Mat& src, VkImageMat& dst, const Option& opt);
- void record_download(const VkMat& src, Mat& dst, const Option& opt);
- void record_download(const VkImageMat& src, Mat& dst, const Option& opt);
- void record_buffer_to_image(const VkMat& src, VkImageMat& dst, const Option& opt);
- void record_image_to_buffer(const VkImageMat& src, VkMat& dst, const Option& opt);
- void record_clone(const Mat& src, VkMat& dst, const Option& opt);
- void record_clone(const Mat& src, VkImageMat& dst, const Option& opt);
- void record_clone(const VkMat& src, Mat& dst, const Option& opt);
- void record_clone(const VkImageMat& src, Mat& dst, const Option& opt);
- void record_clone(const VkMat& src, VkMat& dst, const Option& opt);
- void record_clone(const VkImageMat& src, VkImageMat& dst, const Option& opt);
- void record_clone(const VkMat& src, VkImageMat& dst, const Option& opt);
- void record_clone(const VkImageMat& src, VkMat& dst, const Option& opt);
- void record_pipeline(const Pipeline* pipeline, const std::vector<VkMat>& bindings, const std::vector<vk_constant_type>& constants, const VkMat& dispatcher);
- void record_pipeline(const Pipeline* pipeline, const std::vector<VkImageMat>& bindings, const std::vector<vk_constant_type>& constants, const VkImageMat& dispatcher);
- void record_pipeline(const Pipeline* pipeline, const std::vector<VkMat>& buffer_bindings, const std::vector<VkImageMat>& image_bindings, const std::vector<vk_constant_type>& constants, const VkMat& dispatcher);
- void record_pipeline(const Pipeline* pipeline, const std::vector<VkMat>& buffer_bindings, const std::vector<VkImageMat>& image_bindings, const std::vector<vk_constant_type>& constants, const VkImageMat& dispatcher);
- void record_pipeline(const Pipeline* pipeline, const std::vector<VkMat>& buffer_bindings, const std::vector<VkImageMat>& image_bindings, const std::vector<vk_constant_type>& constants, const Mat& dispatcher);
- #if NCNN_BENCHMARK
- void record_write_timestamp(uint32_t query);
- #endif // NCNN_BENCHMARK
- #if NCNN_PLATFORM_API
- #if __ANDROID_API__ >= 26
- void record_import_android_hardware_buffer(const ImportAndroidHardwareBufferPipeline* pipeline, const VkImageMat& src, const VkMat& dst);
- void record_import_android_hardware_buffer(const ImportAndroidHardwareBufferPipeline* pipeline, const VkImageMat& src, const VkImageMat& dst);
- #endif // __ANDROID_API__ >= 26
- #endif // NCNN_PLATFORM_API
- int submit_and_wait();
- int reset();
- #if NCNN_BENCHMARK
- int create_query_pool(uint32_t query_count);
- int get_query_pool_results(uint32_t first_query, uint32_t query_count, std::vector<uint64_t>& results);
- #endif // NCNN_BENCHMARK
- protected:
- const VulkanDevice* vkdev;
- void barrier_readwrite(const VkMat& binding);
- void barrier_readwrite(const VkImageMat& binding);
- void barrier_readonly(const VkImageMat& binding);
- private:
- VkComputePrivate* const d;
- };
- class VkTransferPrivate;
- class NCNN_EXPORT VkTransfer
- {
- public:
- explicit VkTransfer(const VulkanDevice* vkdev);
- virtual ~VkTransfer();
- public:
- void record_upload(const Mat& src, VkMat& dst, const Option& opt, bool flatten = true);
- void record_upload(const Mat& src, VkImageMat& dst, const Option& opt);
- int submit_and_wait();
- protected:
- const VulkanDevice* vkdev;
- private:
- VkTransferPrivate* const d;
- };
- } // namespace ncnn
- #endif // NCNN_VULKAN
- #endif // NCNN_COMMAND_H
|