mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
// This file is part of OpenCV project. |
|
// It is subject to the license terms in the LICENSE file found in the top-level directory |
|
// of this distribution and at http://opencv.org/license.html. |
|
// |
|
// Copyright (C) 2018, Intel Corporation, all rights reserved. |
|
// Third party copyrights are property of their respective owners. |
|
|
|
#ifndef OPENCV_DNN_OP_VKCOM_HPP |
|
#define OPENCV_DNN_OP_VKCOM_HPP |
|
|
|
#include <opencv2/dnn/shape_utils.hpp> |
|
#ifdef HAVE_VULKAN |
|
#include "vkcom/include/vkcom.hpp" |
|
#endif // HAVE_VULKAN |
|
|
|
namespace cv |
|
{ |
|
namespace dnn |
|
{ |
|
#ifdef HAVE_VULKAN |
|
std::vector<vkcom::Tensor> VkComTensors(const std::vector<Ptr<BackendWrapper> >& ptrs); |
|
|
|
vkcom::Tensor VkComTensor(const Ptr<BackendWrapper>& ptr); |
|
|
|
// the input is the OpenCV activation layer, and the output is the activation in Vulkan backend. |
|
int transFusedActivType(Ptr<ActivationLayer> &actLayer); |
|
|
|
// Data copied from/to Mat to/from Tensor. Change the shape of dst if |
|
// needed to make it the same shape as src |
|
void copyToMat(Mat &dst, const vkcom::Tensor &src); |
|
void copyToTensor(vkcom::Tensor &dst, const Mat &src); |
|
|
|
void printTensor(vkcom::Tensor &dst); |
|
|
|
// VkComBackendNode contains the input and output of a layer/op. |
|
// And the specific weight and the parameter information of the layer will be saved in the Op instance. |
|
class VkComBackendNode : public BackendNode |
|
{ |
|
public: |
|
VkComBackendNode(const std::vector<Ptr<BackendWrapper> >& inputsWrapper, |
|
const Ptr<vkcom::OpBase>& op, |
|
const std::vector<Ptr<BackendWrapper> >& outputsWrapper); |
|
bool forward(); |
|
|
|
private: |
|
std::vector<vkcom::Tensor> ins; |
|
std::vector<vkcom::Tensor> outs; |
|
std::vector<Ptr<BackendWrapper> > inputsWrapper_; |
|
std::vector<Ptr<BackendWrapper> > outputsWrapper_; |
|
Ptr<vkcom::OpBase> operation; |
|
}; |
|
|
|
class VkComBackendWrapper : public BackendWrapper |
|
{ |
|
public: |
|
VkComBackendWrapper(Mat& m); |
|
VkComBackendWrapper(const Ptr<BackendWrapper>& baseBuffer, Mat& m); |
|
|
|
virtual void copyToHost() CV_OVERRIDE; |
|
virtual void setHostDirty() CV_OVERRIDE; |
|
void setDeviceDirty(); |
|
void copyToDevice(); |
|
vkcom::Tensor getTensor(); |
|
Mat* getMat(); |
|
|
|
private: |
|
vkcom::Tensor tensor; |
|
Mat* host; |
|
bool hostDirty; |
|
bool deviceDirty; |
|
}; |
|
|
|
#endif // HAVE_VULKAN |
|
|
|
void forwardVkCom(std::vector<Ptr<BackendWrapper> > &outputs, const Ptr<BackendNode>& node); |
|
|
|
bool haveVulkan(); |
|
} // namespace dnn |
|
} // namespace cv |
|
|
|
#endif // OPENCV_DNN_OP_VKCOM_HPP
|
|
|