[Mesa-dev] [PATCH 2/2] clover: Fix bug when binary programs are passed to clBuildProgram()

Tom Stellard thomas.stellard at amd.com
Tue Oct 21 08:20:22 PDT 2014


This was a regression introduced by
611d66fe4513e53bde052dd2bab95d448c909a2a

Passing a binary program to clBuildProgram() is legal, but passing one
to clCompileProgram() is not.
---
 src/gallium/state_trackers/clover/api/program.cpp | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp
index bf32543..3ea9fe3 100644
--- a/src/gallium/state_trackers/clover/api/program.cpp
+++ b/src/gallium/state_trackers/clover/api/program.cpp
@@ -173,12 +173,23 @@ 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 : "");
+   header_map headers;
+
+   validate_build_program_common(num_devs, d_devs, (void*)pfn_notify,
+                                 user_data, prog, devs);
 
-   return (ret == CL_COMPILE_PROGRAM_FAILURE ?
-           CL_BUILD_PROGRAM_FAILURE : ret);
+   // FIXME: We should overload this function so we don't need to pass headers.
+   prog.build(devs, opts, headers);
+   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
-- 
1.8.5.5



More information about the mesa-dev mailing list