Exemple #1
0
        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;
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        /// <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);
            }
        }