Exemplo n.º 1
0
        public Event EnqueueNDRangeKernel(Kernel kernel, int[] globalWorkOffset, int[] globalWorkSize, int[] localWorkSize, Event[] eventWaitList)
        {
            var workDim = globalWorkSize.Length;

            if (globalWorkOffset != null && globalWorkOffset.Length != workDim)
            {
                throw new ArgumentException(String.Format("Invalid length of globalWorkOffset array: expected {0}, found {1}.", workDim, globalWorkOffset.Length));
            }
            if (localWorkSize != null && localWorkSize.Length != workDim)
            {
                throw new ArgumentException(String.Format("Invalid length of localWorkSize array: expected {0}, found {1}.", workDim, localWorkSize.Length));
            }
            var numEvents = 0;

            IntPtr[] events = null;
            if (eventWaitList != null)
            {
                numEvents = eventWaitList.Length;
                events    = Event.ToIntPtr(eventWaitList);
            }
            IntPtr result;
            var    error = NativeMethods.clEnqueueNDRangeKernel(this.handle, kernel.handle, workDim, globalWorkOffset, globalWorkSize, localWorkSize, numEvents, events, out result);

            if (error != ErrorCode.Success)
            {
                throw new OpenClException(error);
            }
            return(new Event(result));
        }