summaryrefslogtreecommitdiff
path: root/libavutil/opencl.c
diff options
context:
space:
mode:
authorTimothy Gu <timothygu99@gmail.com>2015-10-12 02:41:15 -0700
committerTimothy Gu <timothygu99@gmail.com>2015-10-17 01:16:50 -0700
commit893a648182e4d6f5b93a7627229bac7492a184ab (patch)
tree6177d40f36c47ca5dccddc71b7144eea9caa743e /libavutil/opencl.c
parentd2a1029724f525fec2510b24a095b36f93194abc (diff)
opencl: Print compilation log
Useful when debugging.
Diffstat (limited to 'libavutil/opencl.c')
-rw-r--r--libavutil/opencl.c33
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;
}