public static MemoryBuffer Copy <T>(CLAPI instance, MemoryBuffer input) where T : struct { CLKernel k = null; if (CopyKernels.ContainsKey(instance)) { k = CopyKernels[instance]; } else { string clt = KernelParameter.GetDataString(KernelParameter.GetEnumFromType(typeof(T))); string src = COPY_KERNEL_SOURCE.Replace("__TYPE__", clt); CLProgram.TryBuildProgram(instance, src, "internal_copy_kernel.cl", out CLProgram prog); k = prog.ContainedKernels["copy"]; CopyKernels[instance] = k; } MemoryBuffer mb = CreateEmpty <T>( instance, ( int )input.Size, input.Flags, "CopyOf:" + input, true ); k.SetBuffer(0, mb); k.SetBuffer(1, input); Run(instance, k, ( int )mb.Size); return(mb); }
public CLProgram AddProgram(CLAPI instance, string file, bool throwEx, out CLProgramBuildResult ex) { ex = new CLProgramBuildResult(file, "", new List <CLProgramBuildError>()); if (!File.Exists(file)) { Exception e = new FileNotFoundException("File not found: " + file); if (throwEx) { throw e; } ex.BuildErrors.Add(new CLProgramBuildError(ErrorType.ProgramBuild, e)); } string path = file; Logger.Log(LogType.Log, "Creating CLProgram from file: " + file, 3); CLProgramBuildResult br = CLProgram.TryBuildProgram(instance, path, out CLProgram program); ex.Source = br.Source; if (!br) { if (throwEx) { throw br.GetAggregateException(); } ex.BuildErrors.AddRange(br.BuildErrors); return(null); } loadedPrograms.Add(program); foreach (KeyValuePair <string, CLKernel> containedKernel in program.ContainedKernels) { if (!loadedKernels.ContainsKey(containedKernel.Key)) { Logger.Log(LogType.Log, "Adding Kernel: " + containedKernel.Key, 4); loadedKernels.Add(containedKernel.Key, containedKernel.Value); } else { Logger.Log( LogType.Log, "Kernel with name: " + containedKernel.Key + " is already loaded. Skipping...", 5 ); } } return(program); }
public CLProgram AddProgram( CLAPI instance, string source, string filePath, bool throwEx, out CLProgramBuildResult ex) { ex = new CLProgramBuildResult(filePath, "", new List <CLProgramBuildError>()); CLProgramBuildResult br = CLProgram.TryBuildProgram(instance, source, filePath, out CLProgram program); ex.Source = br.Source; if (!br) { if (throwEx) { throw br.GetAggregateException(); } ex.BuildErrors.AddRange(br.BuildErrors); return(null); } loadedPrograms.Add(program); foreach (KeyValuePair <string, CLKernel> containedKernel in program.ContainedKernels) { if (!loadedKernels.ContainsKey(containedKernel.Key)) { Logger.Log(LogType.Log, "Adding Kernel: " + containedKernel.Key, 4); loadedKernels.Add(containedKernel.Key, containedKernel.Value); } else { Logger.Log( LogType.Log, "Kernel with name: " + containedKernel.Key + " is already loaded. Skipping...", 5 ); } } return(program); }