Beispiel #1
0
        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)));
            }
        }