You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
opencl: Print compilation log
Useful when debugging.
This commit is contained in:
@@ -449,12 +449,14 @@ end:
|
|||||||
cl_program av_opencl_compile(const char *program_name, const char *build_opts)
|
cl_program av_opencl_compile(const char *program_name, const char *build_opts)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
cl_int status;
|
cl_int status, build_status;
|
||||||
int kernel_code_idx = 0;
|
int kernel_code_idx = 0;
|
||||||
const char *kernel_source;
|
const char *kernel_source;
|
||||||
size_t kernel_code_len;
|
size_t kernel_code_len;
|
||||||
char* ptr = NULL;
|
char* ptr = NULL;
|
||||||
cl_program program = NULL;
|
cl_program program = NULL;
|
||||||
|
size_t log_size;
|
||||||
|
char *log = NULL;
|
||||||
|
|
||||||
LOCK_OPENCL;
|
LOCK_OPENCL;
|
||||||
for (i = 0; i < opencl_ctx.kernel_code_count; i++) {
|
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;
|
program = NULL;
|
||||||
goto end;
|
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) {
|
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,
|
av_log(&opencl_ctx, AV_LOG_ERROR,
|
||||||
"Compilation failed with OpenCL program '%s': %s\n",
|
"Compilation failed with OpenCL program '%s': %s\n",
|
||||||
program_name, av_opencl_errstr(status));
|
program_name, av_opencl_errstr(build_status));
|
||||||
program = NULL;
|
program = NULL;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user