Jan Vesely <[email protected]> writes: > On Sat, 2014-01-18 at 13:34 +0100, Francisco Jerez wrote: >> Jan Vesely <[email protected]> writes: >> >> > Specs say "If the argument is a buffer object, the arg_value >> > pointer can be NULL or point to a NULL value in which case a NULL >> > value will be used as the value for the argument declared as a >> > pointer to __global or __constant memory in the kernel." >> > >> > So don't crash when somebody does that. >> > >> > v2: Insert NULL into input buffer instead of buffer handle pair >> > Fix constant_argument too >> > Drop r600 driver changes >> > >> > v3: Fix inserting NULL pointer >> > >> > Signed-off-by: Jan Vesely <[email protected]> >> >> Looks OK to me, >> >> Reviewed-by: Francisco Jerez <[email protected]> > > Thank you, can you push it as well? I don't have commit access.
Done. Thank you.
>
>>
>> Thanks.
>>
>> > ---
>> > src/gallium/state_trackers/clover/core/kernel.cpp | 34
>> > +++++++++++++++--------
>> > 1 file changed, 23 insertions(+), 11 deletions(-)
>> >
>> > diff --git a/src/gallium/state_trackers/clover/core/kernel.cpp
>> > b/src/gallium/state_trackers/clover/core/kernel.cpp
>> > index 58780d6..fb826c1 100644
>> > --- a/src/gallium/state_trackers/clover/core/kernel.cpp
>> > +++ b/src/gallium/state_trackers/clover/core/kernel.cpp
>> > @@ -327,7 +327,7 @@ kernel::global_argument::set(size_t size, const void
>> > *value) {
>> > if (size != sizeof(cl_mem))
>> > throw error(CL_INVALID_ARG_SIZE);
>> >
>> > - buf = &obj<buffer>(*(cl_mem *)value);
>> > + buf = pobj<buffer>(value ? *(cl_mem *)value : NULL);
>> > _set = true;
>> > }
>> >
>> > @@ -335,8 +335,14 @@ void
>> > kernel::global_argument::bind(exec_context &ctx,
>> > const module::argument &marg) {
>> > align(ctx.input, marg.target_align);
>> > - ctx.g_handles.push_back(allocate(ctx.input, marg.target_size));
>> > - ctx.g_buffers.push_back(buf->resource(*ctx.q).pipe);
>> > +
>> > + if (buf) {
>> > + ctx.g_handles.push_back(allocate(ctx.input, marg.target_size));
>> > + ctx.g_buffers.push_back(buf->resource(*ctx.q).pipe);
>> > + } else {
>> > + //NULL pointer
>> > + allocate(ctx.input, marg.target_size);
>> > + }
>> > }
>> >
>> > void
>> > @@ -379,22 +385,28 @@ kernel::constant_argument::set(size_t size, const
>> > void *value) {
>> > if (size != sizeof(cl_mem))
>> > throw error(CL_INVALID_ARG_SIZE);
>> >
>> > - buf = &obj<buffer>(*(cl_mem *)value);
>> > + buf = pobj<buffer>(value ? *(cl_mem *)value : NULL);
>> > _set = true;
>> > }
>> >
>> > void
>> > kernel::constant_argument::bind(exec_context &ctx,
>> > const module::argument &marg) {
>> > - auto v = bytes(ctx.resources.size() << 24);
>> > -
>> > - extend(v, module::argument::zero_ext, marg.target_size);
>> > - byteswap(v, ctx.q->dev.endianness());
>> > align(ctx.input, marg.target_align);
>> > - insert(ctx.input, v);
>> >
>> > - st = buf->resource(*ctx.q).bind_surface(*ctx.q, false);
>> > - ctx.resources.push_back(st);
>> > + if (buf) {
>> > + auto v = bytes(ctx.resources.size() << 24);
>> > +
>> > + extend(v, module::argument::zero_ext, marg.target_size);
>> > + byteswap(v, ctx.q->dev.endianness());
>> > + insert(ctx.input, v);
>> > +
>> > + st = buf->resource(*ctx.q).bind_surface(*ctx.q, false);
>> > + ctx.resources.push_back(st);
>> > + } else {
>> > + //NULL pointer
>> > + allocate(ctx.input, marg.target_size);
>> > + }
>> > }
>> >
>> > void
>> > --
>> > 1.8.4.2
>
> --
> Jan Vesely <[email protected]>
>
> --
> Jan Vesely <[email protected]>
pgp8TA8dLconv.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
