Querying the program binaries won't be supported by the Jocl binding.
See the comments inside JoclProgram.getBinary for the reason.
This commit is contained in:
parent
22307257e0
commit
efef3d54e1
@ -222,6 +222,12 @@ public class JoclContext extends Context {
|
|||||||
return new JoclProgram(p, this);
|
return new JoclProgram(p, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Program createProgramFromBinary(ByteBuffer binaries, Device device) {
|
||||||
|
//Not supported because JoclProgram.getBinaries is also not supported.
|
||||||
|
throw new UnsupportedOperationException("No supported by Jocl");
|
||||||
|
}
|
||||||
|
|
||||||
private static class ReleaserImpl implements ObjectReleaser {
|
private static class ReleaserImpl implements ObjectReleaser {
|
||||||
private long id;
|
private long id;
|
||||||
private final List<JoclDevice> devices;
|
private final List<JoclDevice> devices;
|
||||||
|
@ -31,12 +31,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.opencl.jocl;
|
package com.jme3.opencl.jocl;
|
||||||
|
|
||||||
import com.jme3.opencl.Kernel;
|
import com.jme3.opencl.*;
|
||||||
import com.jme3.opencl.KernelCompilationException;
|
|
||||||
import com.jme3.opencl.OpenCLObjectManager;
|
|
||||||
import com.jme3.opencl.Program;
|
|
||||||
import com.jogamp.common.nio.PointerBuffer;
|
import com.jogamp.common.nio.PointerBuffer;
|
||||||
import com.jogamp.opencl.CLPlatform;
|
import com.jogamp.opencl.CLPlatform;
|
||||||
|
import com.jogamp.opencl.CLProgram;
|
||||||
import com.jogamp.opencl.llb.CL;
|
import com.jogamp.opencl.llb.CL;
|
||||||
import com.jogamp.opencl.util.CLUtil;
|
import com.jogamp.opencl.util.CLUtil;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -44,8 +42,6 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import static com.jogamp.common.nio.Buffers.newDirectByteBuffer;
|
import static com.jogamp.common.nio.Buffers.newDirectByteBuffer;
|
||||||
import static com.jogamp.opencl.CLException.newException;
|
|
||||||
import static com.jogamp.opencl.llb.CL.CL_SUCCESS;
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author shaman
|
* @author shaman
|
||||||
@ -65,8 +61,18 @@ public class JoclProgram extends Program {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(String args) throws KernelCompilationException {
|
public void build(String args, Device... devices) throws KernelCompilationException {
|
||||||
int ret = cl.clBuildProgram(program, 0, null, args, null);
|
PointerBuffer deviceList = null;
|
||||||
|
int deviceCount = 0;
|
||||||
|
if (devices != null) {
|
||||||
|
deviceList = PointerBuffer.allocateDirect(devices.length);
|
||||||
|
for (Device d : devices) {
|
||||||
|
deviceList.put(((JoclDevice) d).id);
|
||||||
|
}
|
||||||
|
deviceCount = devices.length;
|
||||||
|
deviceList.rewind();
|
||||||
|
}
|
||||||
|
int ret = cl.clBuildProgram(program, deviceCount, deviceList, args, null);
|
||||||
if (ret != CL.CL_SUCCESS) {
|
if (ret != CL.CL_SUCCESS) {
|
||||||
String log = Log();
|
String log = Log();
|
||||||
LOG.log(Level.WARNING, "Unable to compile program:\n{0}", log);
|
LOG.log(Level.WARNING, "Unable to compile program:\n{0}", log);
|
||||||
@ -126,6 +132,19 @@ public class JoclProgram extends Program {
|
|||||||
return kx;
|
return kx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer getBinary(Device device) {
|
||||||
|
//There is no way to do this in Jocl:
|
||||||
|
//The low-level bindings need a buffer of adresses to buffers. For that
|
||||||
|
//the class InternalBufferUtil is used, but this class is not public.
|
||||||
|
//I also can't create a temporal instance of CLProgram because the constructor
|
||||||
|
//that takes only the native pointer is private.
|
||||||
|
//So the only way would be to create the CLProgram directly from the beginning.
|
||||||
|
//I don't want to do this because then I would have to use the whole
|
||||||
|
//bunch of garbage the CLProgram class is doing in background.
|
||||||
|
throw new UnsupportedOperationException("Jocl does not expose this operation");
|
||||||
|
}
|
||||||
|
|
||||||
private static class ReleaserImpl implements ObjectReleaser {
|
private static class ReleaserImpl implements ObjectReleaser {
|
||||||
private long program;
|
private long program;
|
||||||
private ReleaserImpl(long program) {
|
private ReleaserImpl(long program) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user