diff options
Diffstat (limited to 'src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java')
-rw-r--r-- | src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java b/src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java index e8bd0124..a1d376ab 100644 --- a/src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java +++ b/src/com/jogamp/opencl/util/concurrent/CLCommandQueuePool.java @@ -31,12 +31,12 @@ public class CLCommandQueuePool<C extends CLQueueContext> implements CLResource private FinishAction finishAction = FinishAction.DO_NOTHING; private boolean released; - private CLCommandQueuePool(CLQueueContextFactory factory, Collection<CLCommandQueue> queues) { + private CLCommandQueuePool(CLQueueContextFactory<C> factory, Collection<CLCommandQueue> queues) { this.contexts = initContexts(queues, factory); initExecutor(); } - private List<CLQueueContext> initContexts(Collection<CLCommandQueue> queues, CLQueueContextFactory factory) { + private List<CLQueueContext> initContexts(Collection<CLCommandQueue> queues, CLQueueContextFactory<C> factory) { List<CLQueueContext> newContexts = new ArrayList<CLQueueContext>(queues.size()); int index = 0; @@ -69,8 +69,8 @@ public class CLCommandQueuePool<C extends CLQueueContext> implements CLResource return create(factory, queues); } - public static <C extends CLQueueContext> CLCommandQueuePool create(CLQueueContextFactory<C> factory, Collection<CLCommandQueue> queues) { - return new CLCommandQueuePool(factory, queues); + public static <C extends CLQueueContext> CLCommandQueuePool<C> create(CLQueueContextFactory<C> factory, Collection<CLCommandQueue> queues) { + return new CLCommandQueuePool<C>(factory, queues); } /** @@ -78,7 +78,7 @@ public class CLCommandQueuePool<C extends CLQueueContext> implements CLResource * @see ExecutorService#submit(java.util.concurrent.Callable) */ public <R> Future<R> submit(CLTask<? super C, R> task) { - return excecutor.submit(new TaskWrapper(task, finishAction)); + return excecutor.submit(new TaskWrapper<C,R>(task, finishAction)); } /** @@ -127,7 +127,7 @@ public class CLCommandQueuePool<C extends CLQueueContext> implements CLResource * Blocks until all tasks finish and sets up a new context for all queues. * @return this */ - public <C extends CLQueueContext> CLCommandQueuePool switchContext(CLQueueContextFactory<C> factory) { + public CLCommandQueuePool<C> switchContext(CLQueueContextFactory<C> factory) { excecutor.shutdown(); finishQueues(); // just to be sure @@ -255,6 +255,9 @@ public class CLCommandQueuePool<C extends CLQueueContext> implements CLResource public R call() throws Exception { CLQueueContext context = ((QueueThread)Thread.currentThread()).context; + // we make sure to only wrap tasks on the correct kind of thread, so this + // shouldn't fail (trying to genericize QueueThread properly becomes tricky) + @SuppressWarnings("unchecked") R result = task.execute((C)context); if(mode.equals(FinishAction.FLUSH)) { context.queue.flush(); |