void LoadSource(string file) { this.Log($"Loading Source..", DebugChannel.Log, 8); Dictionary <string, bool> defs = new Dictionary <string, bool>(); for (int i = 0; i < channelCount; i++) { defs.Add("channel" + i, true); } List <string> lines = PPAPI.PreprocessLines(file, defs).ToList(); for (var i = lines.Count - 1; i >= 0; i--) { var line = lines[i].Trim(); if (line.StartsWith("//")) { lines.RemoveAt(i);//Remove otherwise emtpty lines after removing comments } else { lines[i] = line.Split("//")[0]; } } source = lines; }
public void LoadKernel(string filepath) { this.Log("Loading File: " + filepath, DebugChannel.Log, 8); string path = Path.GetFullPath(filepath); string source = PPAPI.PreprocessSource(path, null); string[] kernelNames = FindKernelNames(source); foreach (var kernelName in kernelNames) { this.Log("Trying to Load Kernel: " + kernelName, DebugChannel.Log, 8); if (_kernels.ContainsKey(kernelName)) { this.Log("Kernel " + kernelName + " was already cached.", DebugChannel.Log, 7); return; } this.Log("Building Program from source..", DebugChannel.Log, 8); CLProgram p = c.CreateAndBuildProgramFromString(source); int kernelNameIndex = source.IndexOf(" " + kernelName + " "); kernelNameIndex = (kernelNameIndex == -1) ? source.IndexOf(" " + kernelName + "(") : kernelNameIndex; _kernels.Add(kernelName, new CLFilter(kernelName, p.CreateKernel(kernelName), KernelParameter.CreateKernelParametersFromKernelCode(source, kernelNameIndex, source.Substring(kernelNameIndex, source.Length - kernelNameIndex).IndexOf(')') + 1))); } }