Commit 64b0fac5 authored by Tom Stellard's avatar Tom Stellard
Browse files

clover: Fix bug when binary programs are passed to clBuildProgram() v2

This was a regression introduced by
611d66fe



Passing a binary program to clBuildProgram() is legal, but passing one
to clCompileProgram() is not.

v2:
  - Code cleanups.
Reviewed-by: Francisco Jerez's avatarFrancisco Jerez <currojerez@riseup.net>
parent e5468dfa
......@@ -171,12 +171,20 @@ CLOVER_API cl_int
clBuildProgram(cl_program d_prog, cl_uint num_devs,
const cl_device_id *d_devs, const char *p_opts,
void (*pfn_notify)(cl_program, void *),
void *user_data) {
cl_int ret = clCompileProgram(d_prog, num_devs, d_devs, p_opts,
0, NULL, NULL, pfn_notify, user_data);
void *user_data) try {
auto &prog = obj(d_prog);
auto devs = (d_devs ? objs(d_devs, num_devs) :
ref_vector<device>(prog.context().devices()));
auto opts = (p_opts ? p_opts : "");
return (ret == CL_COMPILE_PROGRAM_FAILURE ?
CL_BUILD_PROGRAM_FAILURE : ret);
validate_build_program_common(prog, num_devs, devs, pfn_notify, user_data);
prog.build(devs, opts);
return CL_SUCCESS;
} catch (error &e) {
if (e.get() == CL_COMPILE_PROGRAM_FAILURE)
return CL_BUILD_PROGRAM_FAILURE;
return e.get();
}
CLOVER_API cl_int
......
......@@ -48,7 +48,7 @@ namespace clover {
operator=(const program &prog) = delete;
void build(const ref_vector<device> &devs, const char *opts,
const header_map &headers);
const header_map &headers = {});
const bool has_source;
const std::string &source() const;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment