Esempio n. 1
0
        public static Program CreateProgramWithBinary(Context context, Device[] deviceList, byte[][] binaries)
        {
            if (deviceList.Length != binaries.Length)
            {
                throw new ArgumentException(String.Format("Invalid number of binaries: expected {0}, found {1}.", deviceList.Length, binaries.Length));
            }
            ErrorCode error;
            var       dev = Device.ToIntPtr(deviceList);

            IntPtr[] lengths = ((IEnumerable <byte[]>)binaries).Select(b => (IntPtr)b.Length).ToArray();
            var      handle  = IntPtr.Zero;

            GCHandle[] hbins = binaries.Select(b => GCHandle.Alloc(b, GCHandleType.Pinned)).ToArray();
            try {
                handle = NativeMethods.clCreateProgramWithBinary(context.handle, (uint)deviceList.Length, dev, lengths, hbins.Select(h => h.AddrOfPinnedObject()).ToArray(), null, out error);
            } finally {
                foreach (var h in hbins)
                {
                    h.Free();
                }
            }
            if (error != ErrorCode.Success)
            {
                throw new OpenClException(error);
            }
            return(new Program(handle));
        }
Esempio n. 2
0
 // Program methods
 public void BuildProgram(Device[] deviceList, string options, ProgramNotify callback, object userData)
 {
     var dev = Device.ToIntPtr(deviceList);
     var pfn = (ProgramNotifyData)null;
     var pcb = (ProgramNotifyInternal)null;
     var ptr = IntPtr.Zero;
     if (callback != null) {
         pfn = new ProgramNotifyData(callback, userData);
         pcb = ProgramNotifyData.Callback;
         ptr = GCHandle.ToIntPtr(pfn.Handle);
     }
     var err = NativeMethods.clBuildProgram(this.handle, (uint)dev.Length, dev, options, pcb, ptr);
     if (err != ErrorCode.Success) {
         throw new OpenClException(err);
     }
 }
Esempio n. 3
0
        public static Program CreateProgramWithBinary(Context context, Device device, byte[] binary)
        {
            ErrorCode error;
            var       dev = Device.ToIntPtr(device);

            IntPtr[] lengths = new IntPtr[] { (IntPtr)binary.Length };
            var      handle  = IntPtr.Zero;
            GCHandle hbin    = GCHandle.Alloc(binary, GCHandleType.Pinned);

            try {
                handle = NativeMethods.clCreateProgramWithBinary(context.handle, 1, dev, lengths, new IntPtr[] { hbin.AddrOfPinnedObject() }, null, out error);
            } finally {
                hbin.Free();
            }
            if (error != ErrorCode.Success)
            {
                throw new OpenClException(error);
            }
            return(new Program(handle));
        }