Some preparation steps makes the Ocl Kernel throw compilation errors when running "KnnMatch"
---- log file
[ INFO:0@1.952] global ocl.cpp:1012 cv::ocl::OpenCLExecutionContext::Impl::getInitializedExecutionContext OpenCL: device=Intel(R) Iris(R) Xe Graphics
[ INFO:0@2.907] global ocl.cpp:5370 cv::ocl::Context::Impl::init_buffer_pools OpenCL: Initializing buffer pool for context@0 with max capacity: poolSize=134217728 poolSizeHostPtr=134217728
[ INFO:0@2.908] global ocl.cpp:410 cv::ocl::OpenCLBinaryCacheConfigurator::OpenCLBinaryCacheConfigurator Successfully initialized OpenCL cache directory: C:\Users\dsum\AppData\Local\Temp\opencv\4.x\opencl_cache\
[ INFO:0@2.909] global ocl.cpp:434 cv::ocl::OpenCLBinaryCacheConfigurator::prepareCacheDirectoryForContext Preparing OpenCL cache configuration for context: Intel_RCorporation--Intel_R__Iris_R__Xe_Graphics--31_0_101_4575
OpenCL program build log: features2d/brute_force_match
Status -11: CL_BUILD_PROGRAM_FAILURE
-D T=float -D TN=float4 -D kercn=4 -D T_FLOAT -D DIST_TYPE=6 -D BLOCK_SIZE=16 -D MAX_DESC_LEN=16 -D INTEL_DEVICE
1:86:1: error: assigning to 'result_type' (aka 'int') from incompatible type 'int4' (vector of 4 'int' values)
DIST(s_query[lidy BLOCK_SIZE_ODD + j], s_train[j BLOCK_SIZE_ODD + lidx]);
^~~~~~~~~~~~~~~~
1:72:30: note: expanded from macro 'DIST'
define DIST(x, y) result += popcount( (x) ^ (y) )
^ ~~~~~~~~~~~~~~~~~~~~~
1:101:1: error: assigning to 'result_type' (aka 'int') from incompatible type 'int4' (vector of 4 'int' values)
DIST(s_query[lidy BLOCK_SIZE_ODD + j], s_train[j BLOCK_SIZE_ODD + lidx]);
^~~~~~~~~~~~~~~~
1:72:30: note: expanded from macro 'DIST'
define DIST(x, y) result += popcount( (x) ^ (y) )
Steps to reproduce
include "gtest/gtest.h"
include <opencv2/core/core.hpp>
include <opencv2/videoio.hpp>
include <opencv2/imgproc/imgproc.hpp>
include <opencv2/highgui/highgui.hpp>
include <opencv2/stitching.hpp>
include <opencv2\core\ocl.hpp>
include "CameraModel.h"
include "RealWorldMapper.h"
using namespace cv;
TEST(OclCompatibility, BruteForceMatcher) {
int dim = 2;
int queryDescCount;
int countFactor;
UMat uquery, utrain;
queryDescCount = 3000; // must be even number because we split train data in some cases in two
countFactor = 4; // do not change it
cv::Mat queryBuf, trainBuf;
cv::Mat image;
queryBuf.create(queryDescCount, 4, CV_32FC1);
cv::RNG rng(0);
rng.fill(queryBuf, cv::RNG::UNIFORM, cv::Scalar::all(0), cv::Scalar::all(3));
queryBuf.convertTo(queryBuf, CV_32FC1);
trainBuf.create(queryBuf.size(), queryBuf.type());
uquery = queryBuf.getUMat(cv::ACCESS_FAST);
utrain = trainBuf.getUMat(cv::ACCESS_FAST);
const int knn = 2;
cv::BFMatcher matcher(cv::NORM_HAMMING, false);
std::vector< std::vector<cv::DMatch> > matches;
ASSERT_NO_THROW(matcher.knnMatch(uquery, utrain, matches, knn));
ASSERT_EQ(static_cast<size_t>(queryDescCount), matches.size());
}
Issue submission checklist
[X] I report the issue, it's not a question
[X] I checked the problem with documentation, FAQ, open issues, forum.opencv.org, Stack Overflow, etc and have not found any solution
[X] I updated to the latest OpenCV version and the issue is still there
[X] There is reproducer code and related data files (videos, images, onnx, etc)
System Information
GPU: Intel Iris Xe Graphics OpenCV 4.8 and 4.9
Detailed description
Some preparation steps makes the Ocl Kernel throw compilation errors when running "KnnMatch"
---- log file [ INFO:0@1.952] global ocl.cpp:1012 cv::ocl::OpenCLExecutionContext::Impl::getInitializedExecutionContext OpenCL: device=Intel(R) Iris(R) Xe Graphics [ INFO:0@2.907] global ocl.cpp:5370 cv::ocl::Context::Impl::init_buffer_pools OpenCL: Initializing buffer pool for context@0 with max capacity: poolSize=134217728 poolSizeHostPtr=134217728 [ INFO:0@2.908] global ocl.cpp:410 cv::ocl::OpenCLBinaryCacheConfigurator::OpenCLBinaryCacheConfigurator Successfully initialized OpenCL cache directory: C:\Users\dsum\AppData\Local\Temp\opencv\4.x\opencl_cache\ [ INFO:0@2.909] global ocl.cpp:434 cv::ocl::OpenCLBinaryCacheConfigurator::prepareCacheDirectoryForContext Preparing OpenCL cache configuration for context: Intel_RCorporation--Intel_R__Iris_R__Xe_Graphics--31_0_101_4575 OpenCL program build log: features2d/brute_force_match Status -11: CL_BUILD_PROGRAM_FAILURE -D T=float -D TN=float4 -D kercn=4 -D T_FLOAT -D DIST_TYPE=6 -D BLOCK_SIZE=16 -D MAX_DESC_LEN=16 -D INTEL_DEVICE 1:86:1: error: assigning to 'result_type' (aka 'int') from incompatible type 'int4' (vector of 4 'int' values) DIST(s_query[lidy BLOCK_SIZE_ODD + j], s_train[j BLOCK_SIZE_ODD + lidx]); ^
~~~~~~~~~~~~~~~1:72:30: note: expanded from macro 'DIST'define DIST(x, y) result += popcount( (x) ^ (y) )
1:101:1: error: assigning to 'result_type' (aka 'int') from incompatible type 'int4' (vector of 4 'int' values) DIST(s_query[lidy BLOCK_SIZE_ODD + j], s_train[j BLOCK_SIZE_ODD + lidx]); ^
~~~~~~~~~~~~~~~1:72:30: note: expanded from macro 'DIST'define DIST(x, y) result += popcount( (x) ^ (y) )
Steps to reproduce
include "gtest/gtest.h"
include <opencv2/core/core.hpp>
include <opencv2/videoio.hpp>
include <opencv2/imgproc/imgproc.hpp>
include <opencv2/highgui/highgui.hpp>
include <opencv2/stitching.hpp>
include <opencv2\core\ocl.hpp>
include "CameraModel.h"
include "RealWorldMapper.h"
using namespace cv;
TEST(OclCompatibility, BruteForceMatcher) { int dim = 2;
}
Issue submission checklist