public static int Flush( this IDiagnosticsCollection collection, System.IO.TextWriter writer) { int errorCount = collection.Dump(writer); collection.Clear(); return(errorCount); }
public SharedContextHLSL( IdentifierFactory identifiers, IDiagnosticsCollection diagnostics) { _identifiers = identifiers; _diagnostics = diagnostics; }
public void FormatDiagnostics( string hlslMessage, IDiagnosticsCollection diagnostics, string profile) { DumpedShaderInfo dumpedShader = null; DumpedFileInfo dumpedFile = null; var lines = hlslMessage.Split(new string[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { string rangeEndStr = "): "; int rangeEndIdx = line.IndexOf(rangeEndStr); int hlslLineNumber = 1; int hlslLineIdx = 0; int hlslColNumber = 0; string messageStr = line; if (rangeEndIdx >= 0) { var rangeStr = line.Substring(0, rangeEndIdx); rangeStr = rangeStr.Substring(rangeStr.LastIndexOf('(') + 1); var lineStr = rangeStr.Substring(0, rangeStr.IndexOf(',')); hlslLineNumber = int.Parse(lineStr); hlslLineIdx = hlslLineNumber - 1; var hlslColStr = rangeStr.Substring(rangeStr.IndexOf(',') + 1); hlslColNumber = int.Parse(hlslColStr); messageStr = line.Substring(rangeEndIdx + rangeEndStr.Length); } var severityEndStr = " "; int severityEndIdx = messageStr.IndexOf(severityEndStr); var severityStr = messageStr.Substring(0, severityEndIdx); Severity severity = Severity.Error; switch (severityStr) { case "error": severity = Severity.Error; break; case "warning": severity = Severity.Warning; break; default: break; } messageStr = messageStr.Substring(severityEndIdx + severityEndStr.Length); int errorCodeSplitIdx = messageStr.IndexOf(':'); var errorCodeStr = messageStr.Substring(0, errorCodeSplitIdx); messageStr = messageStr.Substring(errorCodeSplitIdx + 1); if (dumpedShader == null) { dumpedShader = DumpShader(); } var action = ActionForHLSLDiagnostic(errorCodeStr, dumpedShader.lineErrorMasks[hlslLineIdx]); if (action >= DiagnosticAction.Report) { var sparkRange = dumpedShader.sparkLineRanges[hlslLineIdx]; diagnostics.Add( severity, sparkRange, string.Format("HLSL compiler {0} {1}:{2}", severityStr, errorCodeStr, messageStr)); } if (action >= DiagnosticAction.DumpAndReport && dumpedFile == null) { dumpedFile = DumpFile(dumpedShader, profile); var hlslRemappedLineNumber = dumpedShader.hlslLineRemap[hlslLineIdx]; var hlslRange = new SourceRange( dumpedFile.path, new SourcePos(hlslRemappedLineNumber, hlslColNumber)); diagnostics.Add( severity, hlslRange, string.Format("{0}:{1}", errorCodeStr, messageStr)); } } }