Пример #1
0
        public static DebugRuntimeConstantMapping Parse(DebugBytecodeReader reader)
        {
            var result = new DebugRuntimeConstantMapping();

            result.ConstantDescription = reader.ReadEnum16 <RuntimeConstantDescription>("ConstantDescription");
            result.TargetReg           = reader.ReadUInt16("TargetReg");
            return(result);
        }
        public static DebugLevel9ShaderChunk Parse(DebugBytecodeReader chunkContentReader, uint chunkSize)
        {
            var  result     = new DebugLevel9ShaderChunk();
            uint chunkSize2 = chunkContentReader.ReadUInt32("chunkSize2");

            result.Version = DebugShaderVersion.ParseAon9(chunkContentReader);
            uint shaderSize                   = chunkContentReader.ReadUInt32("shaderSize");
            var  shaderOffset                 = chunkContentReader.ReadUInt32("shaderOffset");
            var  cbMappingCount               = chunkContentReader.ReadUInt16("cbMappingCount");
            var  cbMappingOffset              = chunkContentReader.ReadUInt16("cbMappingOffset");
            var  loopRegisterMappingCount     = chunkContentReader.ReadUInt16("loopRegisterMappingCount");
            var  loopRegisterMappingOffset    = chunkContentReader.ReadUInt16("loopRegisterMappingOffset");
            var  unk0MappingCount             = chunkContentReader.ReadUInt16("unk0MappingCount");
            var  unk0MappingOffset            = chunkContentReader.ReadUInt16("unk0MappingOffset");
            var  samplerMappingCount          = chunkContentReader.ReadUInt16("samplerMappingCount");
            var  samplerMappingOffset         = chunkContentReader.ReadUInt16("samplerMappingOffset");
            var  runtimeConstantMappingCount  = chunkContentReader.ReadUInt16("runtimeConstantMappingCount");
            var  runtimeConstantMappingOffset = chunkContentReader.ReadUInt16("runtimeConstantMappingOffset");

            if (cbMappingCount > 0)
            {
                var mappingReader = chunkContentReader.CopyAtOffset("mappingReader", chunkContentReader, cbMappingOffset);
                for (int i = 0; i < cbMappingCount; i++)
                {
                    result.ConstantBufferMappings.Add(DebugConstantBufferMapping.Parse(mappingReader));
                }
            }
            if (loopRegisterMappingCount > 0)
            {
                var mappingReader = chunkContentReader.CopyAtOffset("mappingReader", chunkContentReader, loopRegisterMappingOffset);
                for (int i = 0; i < loopRegisterMappingCount; i++)
                {
                    result.LoopRegisterMappings.Add(DebugLoopRegisterMapping.Parse(mappingReader));
                }
            }
            if (unk0MappingCount > 0)
            {
                var mappingReader = chunkContentReader.CopyAtOffset("mappingReader", chunkContentReader, unk0MappingOffset);
                for (int i = 0; i < unk0MappingCount; i++)
                {
                    result.Unknown0Mappings.Add(DebugUnknown1Mapping.Parse(mappingReader));
                }
            }
            if (samplerMappingCount > 0)
            {
                var mappingReader = chunkContentReader.CopyAtOffset("mappingReader", chunkContentReader, samplerMappingOffset);
                for (int i = 0; i < samplerMappingCount; i++)
                {
                    result.SamplerMappings.Add(DebugSamplerMapping.Parse(mappingReader));
                }
                // FXC dissassembly sorts sampler mappings
                result.SamplerMappings = result.SamplerMappings
                                         .OrderBy(s => s.TargetSampler)
                                         .ToList();
            }
            if (runtimeConstantMappingCount > 0)
            {
                var mappingReader = chunkContentReader.CopyAtOffset("mappingReader", chunkContentReader, runtimeConstantMappingOffset);
                for (int i = 0; i < runtimeConstantMappingCount; i++)
                {
                    result.RuntimeConstantMappings.Add(DebugRuntimeConstantMapping.Parse(mappingReader));
                }
            }
            var shaderChunkReader = chunkContentReader.CopyAtOffset("shaderChunkReader", chunkContentReader, (int)shaderOffset);
            var byteCode          = shaderChunkReader.ReadBytes("bytecode", (int)shaderSize);

            return(result);
        }