On 2018-01-23 — 15:09, Francisco Jerez wrote:
> Pierre Moreau <pierre.mor...@free.fr> writes:
> 
> > On 2018-01-23 — 14:03, Francisco Jerez wrote:
> >> Pierre Moreau <pierre.mor...@free.fr> writes:
> >> 
> >> > From the OpenCL 1.2 Specification, Section 5.6.2 (about clBuildProgram:
> >> >
> >> >> If program is created with clCreateProgramWithBinary, then the
> >> >> program binary must be an executable binary (not a compiled binary or
> >> >> library).
> >> >
> >> > Signed-off-by: Pierre Moreau <pierre.mor...@free.fr>
> >> > ---
> >> >  src/gallium/state_trackers/clover/api/program.cpp | 8 ++++++++
> >> >  1 file changed, 8 insertions(+)
> >> >
> >> > diff --git a/src/gallium/state_trackers/clover/api/program.cpp 
> >> > b/src/gallium/state_trackers/clover/api/program.cpp
> >> > index 9d59668f8f..6044179587 100644
> >> > --- a/src/gallium/state_trackers/clover/api/program.cpp
> >> > +++ b/src/gallium/state_trackers/clover/api/program.cpp
> >> > @@ -186,6 +186,14 @@ clBuildProgram(cl_program d_prog, cl_uint num_devs,
> >> >     if (prog.has_source) {
> >> >        prog.compile(devs, opts);
> >> >        prog.link(devs, opts, { prog });
> >> > +   } else if (any_of([&](const device &dev){
> >> > +         return prog.build(dev).binary_type() != 
> >> > CL_PROGRAM_BINARY_TYPE_EXECUTABLE;
> >> > +         }, objs<allow_empty_tag>(d_devs, num_devs))) {
> >> 
> >> Shouldn't this be using the range of devices the application requested
> >> to build for (which might be the whole set of devices associated with
> >> prog if d_devs was null) instead of the objs expression?
> >
> > I had missed that part of the specification, when d_devs is null. I’ll fix 
> > the
> > code, and reformat the specification extract as suggested further down.
> >
> 
> I think this could just use the "devs" variable defined above, but from
> the look of it the current definition probably has a bug, it should be
> using prog.devices() instead of prog.context().devices() in cases where
> d_devs is specified as NULL.

Indeed! I reworked the code to also check for invalid combinations of num_devs
and d_devs, as well as num_progs and d_progs for clLinkProgram; I’ll put those
changes and the `prog.context().devices()` -> `prog.devices()` fix into a
separate patch.
> 
> >> 
> >> > +      // OpenCL 1.2 Specification, Section 5.6.2:
> >> > +      // > If program is created with clCreateProgramWithBinary, then 
> >> > the
> >> > +      // > program binary must be an executable binary (not a compiled 
> >> > binary or
> >> > +      // > library).
> >> 
> >> I'd format this like:
> >> 
> >> |      // According to the OpenCL 1.2 specification, "if program is 
> >> created with
> >> |      // clCreateProgramWithBinary, then the program binary must be an 
> >> executable
> >> |      // binary (not a compiled binary or library)."
> >> 
> >> > +      throw error(CL_INVALID_BINARY);
> >> >     }
> >> >  
> >> >     return CL_SUCCESS;
> >> > -- 
> >> > 2.16.0



Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to