diff --git a/src/java/org/lwjgl/opencl/CLKernel.java b/src/java/org/lwjgl/opencl/CLKernel.java index 83525f61..39fcb9e5 100644 --- a/src/java/org/lwjgl/opencl/CLKernel.java +++ b/src/java/org/lwjgl/opencl/CLKernel.java @@ -31,8 +31,6 @@ */ package org.lwjgl.opencl; -import org.lwjgl.PointerWrapper; - /** * This class is a wrapper around a cl_kernel pointer. * @@ -145,11 +143,24 @@ public final class CLKernel extends CLObjectChild { * * @return this CLKernel object */ - public CLKernel setArg(final int index, final PointerWrapper value) { + public CLKernel setArg(final int index, final CLObject value) { util.setArg(this, index, value); return this; } + /** + * Sets the size of a __local kernel argument at the specified index. + * + * @param index the argument index + * @param size the argument size + * + * @return this CLKernel object + */ + public CLKernel setArgSize(final int index, final long size) { + util.setArgSize(this, index, size); + return this; + } + // clGetKernelInfo methods /** @@ -225,7 +236,9 @@ public final class CLKernel extends CLObjectChild { void setArg(CLKernel kernel, int index, double value); - void setArg(CLKernel kernel, int index, PointerWrapper pointer); + void setArg(CLKernel kernel, int index, CLObject pointer); + + void setArgSize(CLKernel kernel, int index, long size); long getWorkGroupInfoSize(CLKernel kernel, CLDevice device, int param_name); diff --git a/src/java/org/lwjgl/opencl/InfoUtilFactory.java b/src/java/org/lwjgl/opencl/InfoUtilFactory.java index 282d14b8..c633ae7e 100644 --- a/src/java/org/lwjgl/opencl/InfoUtilFactory.java +++ b/src/java/org/lwjgl/opencl/InfoUtilFactory.java @@ -230,8 +230,12 @@ final class InfoUtilFactory { clSetKernelArg(kernel, index, 8, APIUtil.getBufferDouble().put(0, value)); } - public void setArg(final CLKernel kernel, final int index, final PointerWrapper pointer) { - clSetKernelArg(kernel, index, PointerBuffer.getPointerSize(), APIUtil.getBufferPointer().put(0, pointer).getBuffer()); + public void setArg(final CLKernel kernel, final int index, final CLObject value) { + clSetKernelArg(kernel, index, value); + } + + public void setArgSize(final CLKernel kernel, final int index, final long size) { + clSetKernelArg(kernel, index, size); } protected int getInfo(final CLKernel kernel, final int param_name, final ByteBuffer param_value, final PointerBuffer param_value_size_ret) { diff --git a/src/templates/org/lwjgl/opencl/CL10.java b/src/templates/org/lwjgl/opencl/CL10.java index 1fef2d93..c331a695 100644 --- a/src/templates/org/lwjgl/opencl/CL10.java +++ b/src/templates/org/lwjgl/opencl/CL10.java @@ -979,8 +979,8 @@ public interface CL10 { @cl_int int clSetKernelArg(@PointerWrapper("cl_kernel") CLKernel kernel, @cl_uint int arg_index, - @AutoSize(value = "arg_value", canBeNull = true) @size_t long arg_size, - @Check(canBeNull = true) @Const + @AutoSize("arg_value") @size_t long arg_size, + @Const @cl_byte @cl_short @cl_int @@ -988,15 +988,31 @@ public interface CL10 { @cl_float @cl_double Buffer arg_value); - // This is used by CLKernelImpl. Assumes arg_value.position() == 0. - @Alternate("clSetKernelArg") - @Private + @cl_int + int clSetKernelArg(@PointerWrapper("cl_kernel") CLKernel kernel, + @cl_uint int arg_index, + @Constant("PointerBuffer.getPointerSize()") @size_t long arg_size, + @Check(canBeNull = true) @Const + @Constant(value = "APIUtil.getBufferPointer().put(0, arg_value == null ? 0 : arg_value.getPointer()).getBuffer(), 0", keepParam = true) CLObject arg_value); + + /** Sets the size of a __local kernel argument at the specified index. */ + @Alternate("clSetKernelArg") @cl_int int clSetKernelArg2(@PointerWrapper("cl_kernel") CLKernel kernel, @cl_uint int arg_index, @size_t long arg_size, - @Check(value = "1") @Const Buffer arg_value); + @Constant("null, 0") Buffer arg_value); + + // This is used by CLKernelUtil. Assumes arg_value.position() == 0. + + @Alternate("clSetKernelArg") + @Private + @cl_int + int clSetKernelArg3(@PointerWrapper("cl_kernel") CLKernel kernel, + @cl_uint int arg_index, + @size_t long arg_size, + @Constant(value = "arg_value, 0", keepParam = true) Buffer arg_value); @cl_int int clGetKernelInfo(@PointerWrapper("cl_kernel") CLKernel kernel,