public IEnumerator ParseComputeShaderKernels() { var sourceFilePath = AssetDatabase.GetAssetPath(compute); var sourceFile = new FileInfo(sourceFilePath); var computeBody = File.ReadAllText(sourceFile.FullName); Dictionary <string, HashSet <string> > parsedKernels = new Dictionary <string, HashSet <string> >(); ShaderAnalysisUtils.ParseComputeShaderKernels(computeBody, parsedKernels); kernels.Clear(); foreach (var parsedKernel in parsedKernels) { var kernel = new Kernel(parsedKernel.Key, parsedKernel.Value); kernels.Add(kernel); } yield break; }
protected IEnumerator BuildCompileUnits_Internal(BuildTarget target, DirectoryInfo sourceDir, List <KeywordSet> keywords) { ClearCompileUnits(); var c = kernels.Count; var s = 1f / Mathf.Max(1, c - 1); for (var i = 0; i < c; i++) { var kernel = kernels[i]; progress.SetNormalizedProgress(s * i, "Building compile units {0:D3} / {1:D3}", i + 1, c); var compileOptions = ShaderAnalysisUtils.DefaultCompileOptions(kernel.defines, kernel.name, sourceDir); foreach (var keywordSet in keywords) { foreach (var keyword in (HashSet <string>)keywordSet) { compileOptions.defines.Add(keyword); } } compileOptions.defines.Add(ShaderAnalysisUtils.DefineCompute); var unit = new CompileUnit { sourceCodeFile = sourceCodeFile, compileOptions = compileOptions, compileProfile = ShaderProfile.ComputeProgram, compileTarget = ShaderTarget.CS_5, compiledFile = ShaderAnalysisUtils.GetTemporaryProgramCompiledFile(sourceCodeFile, temporaryDirectory, kernel.name) }; AddCompileUnit(unit); yield return(null); } }
/// <summary>Tick this enumerator to build the performance units.</summary> public IEnumerator BuildPerformanceUnits() { perfReports.Clear(); var c = compileUnits.Count; var s = 1f / Mathf.Max(1, c - 1); for (var i = 0; i < c; i++) { var unit = compileUnits[i]; progress.SetNormalizedProgress(s * i, "Building performance unit {0:D3} / {1:D3}", i + 1, c); var perf = new PerfReport { compiledfile = unit.compiledFile, rawReportFile = ShaderAnalysisUtils.GetTemporaryPerformanceReportFile(unit.compiledFile) }; perfReports.Add(perf); yield return(null); } }