From c5a86c22a4b5035e270bdb0df917977fb5b08e63 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Tue, 28 Dec 2021 12:43:42 +0000 Subject: [PATCH] core(ocl): add option to abort on OpenCL kernel build failure - exceptions are catched by fallback CPU path - OPENCV_OPENCL_ABORT_ON_BUILD_ERROR (disabled by default) --- modules/core/src/ocl.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index e93e3094be..91661270a2 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -153,6 +153,17 @@ static bool isRaiseError() } #endif +static void onOpenCLKernelBuildError() +{ + // NB: no need to cache this value + bool value = cv::utils::getConfigurationParameterBool("OPENCV_OPENCL_ABORT_ON_BUILD_ERROR", false); + if (value) + { + fprintf(stderr, "Abort on OpenCL kernel build failure!\n"); + abort(); + } +} + #if CV_OPENCL_TRACE_CHECK static inline void traceOpenCLCheck(cl_int status, const char* message) @@ -3881,6 +3892,12 @@ struct Program::Impl CV_OCL_DBG_CHECK(clReleaseProgram(handle)); handle = NULL; } + if (retval != CL_SUCCESS && + sourceName_ != "dummy" // used for testing of compilation flags + ) + { + onOpenCLKernelBuildError(); + } } #if CV_OPENCL_VALIDATE_BINARY_PROGRAMS if (handle && CV_OPENCL_VALIDATE_BINARY_PROGRAMS_VALUE) -- GitLab