Beispiel #1
0
        public override IEnumerator ExportBuildReport()
        {
            m_Report = new ShaderBuildReport();

            var c = kernels.Count;

            for (var i = 0; i < c; i++)
            {
                var kernel  = kernels[i];
                var program = m_Report.AddGPUProgram(
                    kernel.name,
                    sourceCode,
                    kernel.defines.ToArray(),
                    new ShaderBuildReport.DefineSet[0],
                    new ShaderBuildReport.DefineSet[0]);

                var unit = GetCompileUnitAt(i);
                program.AddCompileUnit(
                    -1,
                    unit.compileOptions.defines.ToArray(),
                    unit.warnings.ToArray(),
                    unit.errors.ToArray(),
                    ShaderProfile.ComputeProgram,
                    unit.compileOptions.entry
                    );

                var perf = GetPerfReportAt(i);
                program.AddPerformanceReport(-1, perf.rawReport, perf.parsedReport);
            }

            yield break;
        }
Beispiel #2
0
            internal PerformanceUnit(ShaderBuildReport owner, int programIndex, int multicompileIndex, string rawReport, ProgramPerformanceMetrics parsedReport)
            {
                this.owner = owner;

                m_GPUProgramIndex   = programIndex;
                m_MultiCompileIndex = multicompileIndex;
                m_RawReport         = rawReport;
                m_ParsedReport      = parsedReport;
            }
Beispiel #3
0
            internal CompileUnit(ShaderBuildReport owner, int programIndex, int multicompileIndex, string[] defines, LogItem[] warnings, LogItem[] errors, ShaderProfile profile, string entry)
            {
                m_GPUProgramIndex   = programIndex;
                m_MultiCompileIndex = multicompileIndex;
                m_Defines           = defines;
                m_Warnings          = warnings;
                m_Errors            = errors;
                m_Profile           = profile;
                m_Entry             = entry;

                this.owner = owner;
            }
        public override IEnumerator ExportBuildReport()
        {
            m_Report = new ShaderBuildReport();

#if UNITY_2018_1_OR_NEWER
            foreach (var skippedPassIndex in m_SkippedPassesFromFilter)
            {
                var pass = shaderData.ActiveSubshader.GetPass(skippedPassIndex);
                m_Report.AddSkippedPass(skippedPassIndex, pass.Name);
            }
#endif

            var c = passes.Count;
            for (var i = 0; i < c; i++)
            {
                var pass    = passes[i];
                var program = m_Report.AddGPUProgram(
                    pass.name,
                    pass.sourceCode,
                    m_ShaderKeywords.ToArray(),
                    DefineSetFromHashSets(pass.multicompiles),
                    DefineSetFromHashSets(pass.combinedMulticompiles));

                var unitIndices = m_CompileUnitPerPass[i];
                for (var j = 0; j < unitIndices.Count; j++)
                {
                    var unit = GetCompileUnitAt(unitIndices[j]);
                    program.AddCompileUnit(j, unit.compileOptions.defines.ToArray(), unit.warnings.ToArray(), unit.errors.ToArray(), ShaderProfile.PixelProgram, unit.compileOptions.entry);
                }

                for (var j = 0; j < unitIndices.Count; j++)
                {
                    var indice = unitIndices[j];
                    if (indice >= perfReportCount)
                    {
                        continue;
                    }

                    var perf = GetPerfReportAt(unitIndices[j]);
                    program.AddPerformanceReport(j, perf.rawReport, perf.parsedReport);
                }
            }

            yield break;
        }
 /// <summary>Set the report.</summary>
 /// <param name="report">The report to set.</param>
 /// <exception cref="ArgumentNullException">for <paramref name="report"/></exception>
 protected void SetReport(ShaderBuildReport report)
 {
     m_BuildReport = report ?? throw new ArgumentNullException(nameof(report));
     m_HasReport   = true;
 }