/// <summary> /// Loads the source and initializes the CLProgram /// </summary> private void Initialize(CLAPI instance) { int vnum = GetVectorNum(genType); string source = TextProcessorAPI.PreprocessSource(filePath, new Dictionary <string, bool>()); string[] kernelNames = FindKernelNames(source); ClProgramHandle = CLAPI.CreateClProgramFromSource(instance, source); foreach (string kernelName in kernelNames) { Kernel k = CLAPI.CreateKernelFromName(ClProgramHandle, kernelName); int kernelNameIndex = source.IndexOf(" " + kernelName + " ", StringComparison.InvariantCulture); kernelNameIndex = kernelNameIndex == -1 ? source.IndexOf(" " + kernelName + "(", StringComparison.InvariantCulture) : kernelNameIndex; KernelParameter[] parameter = KernelParameter.CreateKernelParametersFromKernelCode(source, kernelNameIndex, source.Substring(kernelNameIndex, source.Length - kernelNameIndex).IndexOf(')') + 1); if (k == null) { ContainedKernels.Add(kernelName, new CLKernel(instance, null, kernelName, parameter)); } else { ContainedKernels.Add(kernelName, new CLKernel(instance, k, kernelName, parameter)); } } }
/// <summary> /// Loads the source and initializes the CLProgram /// </summary> private void Initialize() { int vnum = GetVectorNum(_genType); string[] lines = TextProcessorAPI.GenericIncludeToSource(".cl", _filePath, _genType, vnum == 0 || vnum == 1 ? "float" : "float" + vnum); Dictionary <string, bool> defs = new Dictionary <string, bool> { { "V_" + vnum, true } }; string source = TextProcessorAPI.PreprocessSource(lines, _filePath, defs); string[] kernelNames = FindKernelNames(source); ClProgramHandle = CLAPI.CreateCLProgramFromSource(source); foreach (string kernelName in kernelNames) { Kernel k = CLAPI.CreateKernelFromName(ClProgramHandle, kernelName); int kernelNameIndex = source.IndexOf(" " + kernelName + " ", StringComparison.InvariantCulture); kernelNameIndex = kernelNameIndex == -1 ? source.IndexOf(" " + kernelName + "(", StringComparison.InvariantCulture) : kernelNameIndex; KernelParameter[] parameter = KernelParameter.CreateKernelParametersFromKernelCode(source, kernelNameIndex, source.Substring(kernelNameIndex, source.Length - kernelNameIndex).IndexOf(')') + 1); if (k == null) { ContainedKernels.Add(kernelName, new CLKernel(null, kernelName, parameter)); } else { ContainedKernels.Add(kernelName, new CLKernel(k, kernelName, parameter)); } } }