@@ -182,11 +182,40 @@ class ReshapeLayerImpl : public ReshapeLayer
182
182
return true ;
183
183
}
184
184
185
+ bool forward_ocl (InputArrayOfArrays inps, OutputArrayOfArrays outs, OutputArrayOfArrays internals)
186
+ {
187
+ std::vector<UMat> inputs;
188
+ std::vector<UMat> outputs;
189
+
190
+ inps.getUMatVector (inputs);
191
+ outs.getUMatVector (outputs);
192
+
193
+ for (size_t i = 0 ; i < inputs.size (); i++)
194
+ {
195
+ UMat srcBlob = inputs[i];
196
+ void *src_handle = inputs[i].handle (ACCESS_READ);
197
+ void *dst_handle = outputs[i].handle (ACCESS_WRITE);
198
+ if (src_handle != dst_handle)
199
+ {
200
+ MatShape outShape = shape (outputs[i]);
201
+ UMat umat = srcBlob.reshape (1 , (int )outShape.size (), &outShape[0 ]);
202
+ umat.copyTo (outputs[i]);
203
+ }
204
+ }
205
+ outs.assign (outputs);
206
+
207
+ return true ;
208
+ }
209
+
185
210
void forward (InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr)
186
211
{
187
212
CV_TRACE_FUNCTION ();
188
213
CV_TRACE_ARG_VALUE (name, " name" , name.c_str ());
189
214
215
+ CV_OCL_RUN ((preferableTarget == DNN_TARGET_OPENCL) &&
216
+ OCL_PERFORMANCE_CHECK (ocl::Device::getDefault ().isIntel ()),
217
+ forward_ocl (inputs_arr, outputs_arr, internals_arr))
218
+
190
219
Layer::forward_fallback (inputs_arr, outputs_arr, internals_arr);
191
220
}
192
221
0 commit comments