Added clSetKernelArg support for CLObject and __local arguments.

This commit is contained in:
Ioannis Tsakpinis 2010-12-06 15:58:11 +00:00
parent 1b6a2e866c
commit c7152449c2
3 changed files with 45 additions and 12 deletions

View File

@ -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<CLProgram> {
*
* @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<CLProgram> {
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);

View File

@ -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) {

View File

@ -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,