public static EffectHeader Parse(BytecodeReader chunkReader) { var result = new EffectHeader(); result.Version = ShaderVersion.ParseFX(chunkReader); result.ConstantBuffers = chunkReader.ReadUInt32(); result.GlobalVariables = chunkReader.ReadUInt32(); result.ObjectCount = chunkReader.ReadUInt32(); result.SharedConstantBuffers = chunkReader.ReadUInt32(); result.SharedGlobalVariables = chunkReader.ReadUInt32(); result.SharedObjectCount = chunkReader.ReadUInt32(); result.Techniques = chunkReader.ReadUInt32(); result.FooterOffset = chunkReader.ReadUInt32(); result.StringCount = chunkReader.ReadUInt32(); result.LocalTextureCount = chunkReader.ReadUInt32(); result.DepthStencilStateCount = chunkReader.ReadUInt32(); result.BlendStateCount = chunkReader.ReadUInt32(); result.RasterizerStateCount = chunkReader.ReadUInt32(); result.LocalSamplerCount = chunkReader.ReadUInt32(); result.RenderTargetViewCount = chunkReader.ReadUInt32(); result.DepthStencilViewCount = chunkReader.ReadUInt32(); result.ShaderCount = chunkReader.ReadUInt32(); result.InlineShaderCount = chunkReader.ReadUInt32(); if (result.Version.MajorVersion >= 5) { result.GroupCount = chunkReader.ReadUInt32(); result.UAVCount = chunkReader.ReadUInt32(); result.InterfaceVariableCount = chunkReader.ReadUInt32(); result.InterfaceVariableElementCount = chunkReader.ReadUInt32(); result.ClassInstanceElementCount = chunkReader.ReadUInt32(); } return(result); }
public static EffectChunk Parse(BytecodeReader reader, uint size) { var headerReader = reader.CopyAtCurrentPosition(); var result = new EffectChunk(); var header = result.Header = EffectHeader.Parse(headerReader); var bodyOffset = header.Version.MajorVersion < 5 ? 0x4C : 0x60; var footerOffset = (int)(result.Header.FooterOffset + bodyOffset); var bodyReader = reader.CopyAtOffset((int)bodyOffset); var footerReader = reader.CopyAtOffset(footerOffset); var version = header.Version; for (int i = 0; i < header.ConstantBuffers; i++) { result.LocalBuffers.Add(EffectBuffer.Parse(bodyReader, footerReader, version, false)); } for (int i = 0; i < header.ObjectCount; i++) { result.LocalVariables.Add(EffectObjectVariable.Parse(bodyReader, footerReader, version, false)); } for (int i = 0; i < header.SharedConstantBuffers; i++) { result.SharedBuffers.Add(EffectBuffer.Parse(bodyReader, footerReader, version, true)); } for (int i = 0; i < header.SharedObjectCount; i++) { result.SharedVariables.Add(EffectObjectVariable.Parse(bodyReader, footerReader, version, true)); } if (header.Version.MajorVersion >= 5) { for (int i = 0; i < header.InterfaceVariableCount; i++) { result.InterfaceVariables.Add(EffectInterfaceVariable.Parse(bodyReader, footerReader, version)); } for (int i = 0; i < header.GroupCount; i++) { result.Groups.Add(EffectGroup.Parse(bodyReader, footerReader, header.Version)); } } else { for (int i = 0; i < header.Techniques; i++) { result.Techniques.Add(EffectTechnique.Parse(bodyReader, footerReader, header.Version)); } } return(result); }