Exemplo n.º 1
0
        public static DebugConstantTable Parse(DebugBytecodeReader reader)
        {
            var result = new DebugConstantTable();

            var ctabReader         = reader.CopyAtCurrentPosition("CTabReader", reader);
            var ctabSize           = ctabReader.ReadUInt32("CtabSize");
            var creatorOffset      = ctabReader.ReadInt32("CreatorPosition");
            var minorVersion       = ctabReader.ReadByte("MinorVersion");
            var majorVersion       = ctabReader.ReadByte("MajorVersion");
            var shaderType         = ctabReader.ReadEnum16 <ShaderType>("ShaderType");
            var numConstants       = ctabReader.ReadInt32("NumConstants");
            var constantInfoOffset = ctabReader.ReadInt32("ConstantInfoOffset");
            var shaderFlags        = ctabReader.ReadEnum32 <ShaderFlags>("ShaderFlags");
            var shaderModelOffset  = ctabReader.ReadInt32("ShaderModelOffset");

            for (int i = 0; i < numConstants; i++)
            {
                var decReader = ctabReader.CopyAtOffset($"Declaration {i}", ctabReader, constantInfoOffset + i * 20);
                DebugConstantDeclaration declaration = DebugConstantDeclaration.Parse(ctabReader, decReader);
                result.ConstantDeclarations.Add(declaration);
            }

            var shaderModelReader = ctabReader.CopyAtOffset("ShaderModelReader", ctabReader, shaderModelOffset);
            var shaderModel       = shaderModelReader.ReadString("ShaderModel");

            var creatorReader = ctabReader.CopyAtOffset("CreaterReader", ctabReader, creatorOffset);
            var creatorString = creatorReader.ReadString("CreatorString");

            return(result);
        }
Exemplo n.º 2
0
        public static DebugConstantDeclaration Parse(DebugBytecodeReader reader, DebugBytecodeReader decReader)
        {
            var result     = new DebugConstantDeclaration();
            var nameOffset = decReader.ReadUInt32("NameOffset");

            result.RegisterSet   = decReader.ReadEnum16 <RegisterSet>("RegisterSet");
            result.RegisterIndex = decReader.ReadUInt16("RegisterIndex");
            result.RegisterCount = decReader.ReadUInt16("RegisterCount");
            decReader.ReadUInt16("Reserved");
            var typeInfoOffset     = decReader.ReadUInt32("TypeInfoOffset");
            var defaultValueOffset = decReader.ReadUInt32("DefaultValueOffset");

            var nameReader = reader.CopyAtOffset("NameReader", decReader, (int)nameOffset);

            result.Name = nameReader.ReadString("Name");

            var typeReader = reader.CopyAtOffset("TypeReader", decReader, (int)typeInfoOffset);

            result.Type = DebugConstantType.Parse(reader, typeReader);

            if (defaultValueOffset != 0)
            {
                //Note: thre are corrisponding def instructions. TODO: check that they are the same
                var defaultValueReader = reader.CopyAtOffset("DefaultValueReader", decReader, (int)defaultValueOffset);
                var elementCount       = result.Type.GetSize() / 4;
                for (int i = 0; i < elementCount; i++)
                {
                    result.DefaultValue.Add(defaultValueReader.ReadSingle($"DefaultValue {i}"));
                }
            }

            return(result);
        }