Skip to content

Commit

Permalink
CLKernel short setters, setArgs(Object... values) for convenient init…
Browse files Browse the repository at this point in the history
…ialization.
  • Loading branch information
mbien committed Jun 19, 2011
1 parent 826dacf commit 3016f4f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
40 changes: 40 additions & 0 deletions src/com/jogamp/opencl/CLKernel.java
Expand Up @@ -110,6 +110,12 @@ public CLKernel putArg(CLMemory<?> value) {
return this;
}

public CLKernel putArg(short value) {
setArg(argIndex, value);
argIndex++;
return this;
}

public CLKernel putArg(int value) {
setArg(argIndex, value);
argIndex++;
Expand Down Expand Up @@ -171,6 +177,11 @@ public CLKernel setArg(int argumentIndex, CLMemory<?> value) {
return this;
}

public CLKernel setArg(int argumentIndex, short value) {
setArgument(argumentIndex, 2, wrap(value));
return this;
}

public CLKernel setArg(int argumentIndex, int value) {
setArgument(argumentIndex, 4, wrap(value));
return this;
Expand Down Expand Up @@ -209,6 +220,31 @@ public CLKernel setArgs(CLMemory<?>... values) {
return this;
}

public CLKernel setArgs(Object... values) {
if(values == null || values.length == 0) {
throw new IllegalArgumentException("values array was empty or null.");
}
for (int i = 0; i < values.length; i++) {
Object value = values[i];
if(value instanceof CLMemory<?>) {
setArg(i, (CLMemory<?>)value);
}else if(value instanceof Short) {
setArg(i, (Short)value);
}else if(value instanceof Integer) {
setArg(i, (Integer)value);
}else if(value instanceof Long) {
setArg(i, (Long)value);
}else if(value instanceof Float) {
setArg(i, (Float)value);
}else if(value instanceof Double) {
setArg(i, (Double)value);
}else{
throw new IllegalArgumentException(value + " is not a valid argument.");
}
}
return this;
}

private void setArgs(int startIndex, CLMemory<?>... values) {
for (int i = 0; i < values.length; i++) {
setArg(i+startIndex, values[i]);
Expand Down Expand Up @@ -259,6 +295,10 @@ private Buffer wrap(double value) {
return buffer.putDouble(0, value);
}

private Buffer wrap(short value) {
return buffer.putShort(0, value);
}

private Buffer wrap(int value) {
return buffer.putInt(0, value);
}
Expand Down
7 changes: 5 additions & 2 deletions test/com/jogamp/opencl/CLProgramTest.java
Expand Up @@ -270,7 +270,7 @@ public void buildFinished(CLProgram program) {
@Test
public void kernelTest() {

String source = "__attribute__((reqd_work_group_size(1, 1, 1))) kernel void foo(float a, int b) { }\n";
String source = "__attribute__((reqd_work_group_size(1, 1, 1))) kernel void foo(float a, int b, short c) { }\n";

CLContext context = CLContext.create();

Expand All @@ -297,13 +297,16 @@ public void kernelTest() {

kernel.putArg(2);
assertEquals(2, kernel.position());

kernel.putArg((short)3);
assertEquals(3, kernel.position());

try{
kernel.putArg(3);
fail("exception not thrown");
}catch (IndexOutOfBoundsException expected){ }

assertEquals(2, kernel.position());
assertEquals(3, kernel.position());
assertEquals(0, kernel.rewind().position());

}finally{
Expand Down

0 comments on commit 3016f4f

Please sign in to comment.