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();
            }
        }