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. > > 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>
signature.asc
Description: This is a digitally signed message part
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev