From: Timothy Gu Date: Mon, 12 Oct 2015 09:41:15 +0000 (-0700) Subject: opencl: Print compilation log X-Git-Tag: android-x86-7.1-r1~8456 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=893a648182e4d6f5b93a7627229bac7492a184ab;p=android-x86%2Fexternal-ffmpeg.git opencl: Print compilation log Useful when debugging. --- diff --git a/libavutil/opencl.c b/libavutil/opencl.c index c2956fda9b..f720ce0eba 100644 --- a/libavutil/opencl.c +++ b/libavutil/opencl.c @@ -449,12 +449,14 @@ end: cl_program av_opencl_compile(const char *program_name, const char *build_opts) { int i; - cl_int status; + cl_int status, build_status; int kernel_code_idx = 0; const char *kernel_source; size_t kernel_code_len; char* ptr = NULL; cl_program program = NULL; + size_t log_size; + char *log = NULL; LOCK_OPENCL; for (i = 0; i < opencl_ctx.kernel_code_count; i++) { @@ -481,11 +483,36 @@ cl_program av_opencl_compile(const char *program_name, const char *build_opts) program = NULL; goto end; } - status = clBuildProgram(program, 1, &(opencl_ctx.device_id), build_opts, NULL, NULL); + + build_status = clBuildProgram(program, 1, &(opencl_ctx.device_id), build_opts, NULL, NULL); + status = clGetProgramBuildInfo(program, opencl_ctx.device_id, + CL_PROGRAM_BUILD_LOG, 0, NULL, &log_size); if (status != CL_SUCCESS) { + av_log(&opencl_ctx, AV_LOG_WARNING, + "Failed to get compilation log: %s\n", + av_opencl_errstr(status)); + } else { + log = av_malloc(log_size); + if (log) { + status = clGetProgramBuildInfo(program, opencl_ctx.device_id, + CL_PROGRAM_BUILD_LOG, log_size, + log, NULL); + if (status != CL_SUCCESS) { + av_log(&opencl_ctx, AV_LOG_WARNING, + "Failed to get compilation log: %s\n", + av_opencl_errstr(status)); + } else { + int level = build_status == CL_SUCCESS ? AV_LOG_DEBUG : + AV_LOG_ERROR; + av_log(&opencl_ctx, level, "Compilation log:\n%s\n", log); + } + } + av_freep(&log); + } + if (build_status != CL_SUCCESS) { av_log(&opencl_ctx, AV_LOG_ERROR, "Compilation failed with OpenCL program '%s': %s\n", - program_name, av_opencl_errstr(status)); + program_name, av_opencl_errstr(build_status)); program = NULL; goto end; }