diff options
author | Timothy Gu <timothygu99@gmail.com> | 2015-10-12 02:41:15 -0700 |
---|---|---|
committer | Timothy Gu <timothygu99@gmail.com> | 2015-10-17 01:16:50 -0700 |
commit | 893a648182e4d6f5b93a7627229bac7492a184ab (patch) | |
tree | 6177d40f36c47ca5dccddc71b7144eea9caa743e /libavutil | |
parent | d2a1029724f525fec2510b24a095b36f93194abc (diff) | |
download | ffmpeg-893a648182e4d6f5b93a7627229bac7492a184ab.tar.gz |
opencl: Print compilation log
Useful when debugging.
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/opencl.c | 33 |
1 files changed, 30 insertions, 3 deletions
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; } |