public DebugBytecodeContainer(DebugBytecodeReader reader) { try { Chunks = new List <DebugBytecodeChunk>(); _reader = reader; var magicNumber = reader.PeekUint32(); if (magicNumber == 0xFEFF2001) { Chunks.Add(DebugEffectChunk.Parse(reader, (uint)reader.Count)); return; } Header = DebugBytecodeContainerHeader.Parse(reader); for (uint i = 0; i < Header.ChunkCount; i++) { uint chunkOffset = reader.ReadUInt32("chunkOffset"); var fourCC = DebugUtil.ToReadable(reader.PeekUInt32At((int)chunkOffset).ToFourCcString()); var chunkReader = reader.CopyAtOffset($"Chunk{fourCC}", reader, (int)chunkOffset); var chunk = DebugBytecodeChunk.ParseChunk(chunkReader, this); if (chunk != null) { Chunks.Add(chunk); } } } catch (Exception ex) { Exception = ex; Error = ex.ToString(); } }
public DebugBytecodeContainer(byte[] rawBytes) { try { _rawBytes = rawBytes; var reader = new DebugBytecodeReader(rawBytes, 0, rawBytes.Length); Chunks = new List <DebugBytecodeChunk>(); _reader = reader; var magicNumber = reader.PeekUint32(); if (magicNumber == 0xFEFF2001) { Chunks.Add(DebugEffectChunk.Parse(reader, (uint)rawBytes.Length)); return; } Header = DebugBytecodeContainerHeader.Parse(reader); for (uint i = 0; i < Header.ChunkCount; i++) { uint chunkOffset = reader.ReadUInt32("chunkOffset"); var fourCC = DebugUtil.ToReadable(reader.PeekUInt32At((int)chunkOffset).ToFourCcString()); var chunkReader = reader.CopyAtOffset($"Chunk{fourCC}", reader, (int)chunkOffset); var chunk = DebugBytecodeChunk.ParseChunk(chunkReader, this); if (chunk != null) { Chunks.Add(chunk); } } foreach (var chunk in Chunks.OfType <DebugPipelineStateValidationChunk>()) { chunk.UpdateVersion(Chunks.OfType <DebugDxilChunk>().First().Version); } } catch (Exception ex) { Exception = ex; Error = ex.ToString(); } }