Jan Vesely <jan.ves...@rutgers.edu> writes: > On Sat, 2014-01-18 at 13:34 +0100, Francisco Jerez wrote: >> Jan Vesely <jan.ves...@rutgers.edu> 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 <jan.ves...@rutgers.edu> >> >> Looks OK to me, >> >> Reviewed-by: Francisco Jerez <curroje...@riseup.net> > > 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 <jan.ves...@rutgers.edu> > > -- > Jan Vesely <jan.ves...@rutgers.edu>
pgp8TA8dLconv.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev