1 // This file is part of OpenCV project.
2 // It is subject to the license terms in the LICENSE file found in the top-level directory
3 // of this distribution and at http://opencv.org/license.html.
4 //
5 // Copyright (C) 2018, Intel Corporation, all rights reserved.
6 // Third party copyrights are property of their respective owners.
7 
8 #ifndef OPENCV_DNN_VKCOM_OP_PERMUTE_HPP
9 #define OPENCV_DNN_VKCOM_OP_PERMUTE_HPP
10 
11 #include "vkcom.hpp"
12 #include "op_base.hpp"
13 
14 namespace cv { namespace dnn { namespace vkcom {
15 
16 #ifdef HAVE_VULKAN
17 
18 class OpPermute: public OpBase
19 {
20 public:
21     OpPermute(std::vector<size_t>& order);
22     bool forward(std::vector<Tensor>& ins, std::vector<Tensor>& outs);
23     void reshapeOutTensor(std::vector<Tensor *>& in, std::vector<Tensor>& outs);
24     virtual bool forward(std::vector<Tensor>& ins,
25                          std::vector<Tensor>& blobs,
26                          std::vector<Tensor>& outs) CV_OVERRIDE;
27 
28 private:
29     void prepareStrides(const Shape &shape_before, const Shape &shape_after);
30     bool computeGroupCount();
31 
32     std::vector<int> order_;
33     bool need_permute_;
34     int global_size_;
35     int nthreads_;
36     int dims_;
37     Tensor tensor_order_;
38     Tensor tensor_old_stride_;
39     Tensor tensor_new_stride_;
40     std::vector<int> old_stride_;
41     std::vector<int> new_stride_;
42     Shape in_shape_;
43     Shape out_shape_;
44 };
45 
46 #endif // HAVE_VULKAN
47 
48 }}} // namespace cv::dnn::vkcom
49 
50 #endif // OPENCV_DNN_VKCOM_OP_PERMUTE_HPP
51