private DumpedShaderInfo DumpShader()
{
DumpedShaderInfo result = new DumpedShaderInfo();
string text = Span.ToString();
var lines = text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
var lineCount = lines.Length;
var sparkLineRanges = new SourceRange[lineCount];
var lineErrorMasks = new string[lineCount][];
var hlslLineRemap = new int[lineCount];
var rangeStack = new Stack<SourceRange>();
rangeStack.Push(_defaultRange);
var writer = new System.IO.StringWriter();
var maskedErrors = new Stack<string>();
int remapLineNumber = 1;
for (int ii = 0; ii < lineCount; ++ii)
{
var line = lines[ii];
var lineNumber = ii + 1;
hlslLineRemap[ii] = remapLineNumber;
if (line.StartsWith(startSourceRange))
{
var rangeStr = line.Substring(startSourceRange.Length);
SourceRange range = SourceRange.Parse(rangeStr);
rangeStack.Push(range);
}
else if (line.StartsWith(endSourceRange))
{
rangeStack.Pop();
}
else if (line.StartsWith(PushErrorMaskString))
{
var errorStr = line.Substring(PushErrorMaskString.Length);
maskedErrors.Push(errorStr.Trim());
}
else if (line.StartsWith(PopErrorMaskString))
{
maskedErrors.Pop();
}
else
{
if (writer != null)
writer.WriteLine(lines[ii]);
remapLineNumber++;
}
sparkLineRanges[ii] = rangeStack.Peek();
lineErrorMasks[ii] = maskedErrors.ToArray();
}
result.hlslLineRemap = hlslLineRemap;
result.sparkLineRanges = sparkLineRanges;
result.strippedText = writer.ToString();
result.lineErrorMasks = lineErrorMasks;
return result;
}