public BytecodeContainer(byte[] rawBytes)
        {
            _rawBytes = rawBytes;
            Chunks    = new List <BytecodeChunk>();

            var reader      = new BytecodeReader(rawBytes, 0, rawBytes.Length);
            var magicNumber = BitConverter.ToUInt32(rawBytes, 0);

            if (magicNumber == 0xFEFF2001)
            {
                Chunks.Add(EffectChunk.Parse(reader, (uint)rawBytes.Length));
                return;
            }
            Header = BytecodeContainerHeader.Parse(reader);

            for (uint i = 0; i < Header.ChunkCount; i++)
            {
                uint chunkOffset = reader.ReadUInt32();
                var  chunkReader = reader.CopyAtOffset((int)chunkOffset);

                var chunk = BytecodeChunk.ParseChunk(chunkReader, this);
                if (chunk != null)
                {
                    Chunks.Add(chunk);
                }
            }
        }
Exemple #2
0
        public BytecodeContainer(byte[] rawBytes)
        {
            _rawBytes = rawBytes;
            Chunks    = new List <BytecodeChunk>();

            var reader = new BytecodeReader(rawBytes, 0, rawBytes.Length);

            Header = BytecodeContainerHeader.Parse(reader);

            for (uint i = 0; i < Header.ChunkCount; i++)
            {
                uint chunkOffset = reader.ReadUInt32();
                var  chunkReader = reader.CopyAtOffset((int)chunkOffset);

                var chunk = BytecodeChunk.ParseChunk(chunkReader, this);
                if (chunk != null)
                {
                    Chunks.Add(chunk);
                }
            }
        }
Exemple #3
0
        public BytecodeContainer(byte[] rawBytes)
        {
            _rawBytes = rawBytes;
            Chunks    = new List <BytecodeChunk>();

            var reader      = new BytecodeReader(rawBytes, 0, rawBytes.Length);
            var magicNumber = BitConverter.ToUInt32(rawBytes, 0);

            if (magicNumber == 0xFEFF2001)
            {
                Chunks.Add(EffectChunk.Parse(reader, (uint)rawBytes.Length));
                return;
            }
            Header = BytecodeContainerHeader.Parse(reader);

            for (uint i = 0; i < Header.ChunkCount; i++)
            {
                uint chunkOffset = reader.ReadUInt32();
                var  chunkReader = reader.CopyAtOffset((int)chunkOffset);

                var chunk = BytecodeChunk.ParseChunk(chunkReader, this);
                if (chunk != null)
                {
                    Chunks.Add(chunk);
                }
            }
            foreach (var chunk in Chunks.OfType <InputOutputSignatureChunk>())
            {
                chunk.UpdateVersion(Version);
            }
            foreach (var chunk in Chunks.OfType <Sfi0Chunk>())
            {
                chunk.UpdateVersion(Version);
            }
            foreach (var chunk in Chunks.OfType <PipelineStateValidationChunk>())
            {
                chunk.UpdateVersion(Version);
            }
        }