public static StatisticsChunk Parse(BytecodeReader reader, uint chunkSize) { var size = chunkSize / sizeof(uint); var result = new StatisticsChunk { InstructionCount = reader.ReadUInt32(), TempRegisterCount = reader.ReadUInt32(), DefineCount = reader.ReadUInt32(), DeclarationCount = reader.ReadUInt32(), FloatInstructionCount = reader.ReadUInt32(), IntInstructionCount = reader.ReadUInt32(), UIntInstructionCount = reader.ReadUInt32(), StaticFlowControlCount = reader.ReadUInt32(), DynamicFlowControlCount = reader.ReadUInt32(), MacroInstructionCount = reader.ReadUInt32(), // Guessed TempArrayCount = reader.ReadUInt32(), ArrayInstructionCount = reader.ReadUInt32(), CutInstructionCount = reader.ReadUInt32(), EmitInstructionCount = reader.ReadUInt32(), TextureNormalInstructions = reader.ReadUInt32(), TextureLoadInstructions = reader.ReadUInt32(), TextureCompInstructions = reader.ReadUInt32(), TextureBiasInstructions = reader.ReadUInt32(), TextureGradientInstructions = reader.ReadUInt32(), MovInstructionCount = reader.ReadUInt32(), MovCInstructionCount = reader.ReadUInt32(), ConversionInstructionCount = reader.ReadUInt32() }; //TODO var unknown0 = reader.ReadUInt32(); Debug.Assert(unknown0 == 0, $"Statistics unknown1 is {unknown0}"); result.InputPrimitive = (Primitive)reader.ReadUInt32(); result.GeometryShaderOutputTopology = (PrimitiveTopology)reader.ReadUInt32(); result.GeometryShaderMaxOutputVertexCount = reader.ReadUInt32(); result.TextureGatherInstructions = reader.ReadUInt32(); result.TextureLevelOfDetailInstructions = reader.ReadUInt32(); result.IsSampleFrequencyShader = (reader.ReadUInt32() == 1); // DX10 stat size if (size == 29) { return(result); } result.GeometryShaderInstanceCount = reader.ReadUInt32(); result.ControlPoints = reader.ReadUInt32(); result.HullShaderOutputPrimitive = (TessellatorOutputPrimitive)reader.ReadUInt32(); result.HullShaderPartitioning = (TessellatorPartitioning)reader.ReadUInt32(); result.TessellatorDomain = (TessellatorDomain)reader.ReadUInt32(); result.BarrierInstructions = reader.ReadUInt32(); result.InterlockedInstructions = reader.ReadUInt32(); result.TextureStoreInstructions = reader.ReadUInt32(); // DX11 stat size. if (size == 37) { return(result); } throw new ParseException("Unhandled stat size: " + chunkSize); }
public static StatisticsChunk Parse(BytecodeReader reader, uint chunkSize) { var size = chunkSize / sizeof(uint); var result = new StatisticsChunk { InstructionCount = reader.ReadUInt32(), TempRegisterCount = reader.ReadUInt32(), DefineCount = reader.ReadUInt32(), DeclarationCount = reader.ReadUInt32(), FloatInstructionCount = reader.ReadUInt32(), IntInstructionCount = reader.ReadUInt32(), UIntInstructionCount = reader.ReadUInt32(), StaticFlowControlCount = reader.ReadUInt32(), DynamicFlowControlCount = reader.ReadUInt32(), MacroInstructionCount = reader.ReadUInt32(), // Guessed TempArrayCount = reader.ReadUInt32(), ArrayInstructionCount = reader.ReadUInt32(), CutInstructionCount = reader.ReadUInt32(), EmitInstructionCount = reader.ReadUInt32(), TextureNormalInstructions = reader.ReadUInt32(), TextureLoadInstructions = reader.ReadUInt32(), TextureCompInstructions = reader.ReadUInt32(), TextureBiasInstructions = reader.ReadUInt32(), TextureGradientInstructions = reader.ReadUInt32(), MovInstructionCount = reader.ReadUInt32(), MovCInstructionCount = reader.ReadUInt32(), ConversionInstructionCount = reader.ReadUInt32() }; var unknown0 = reader.ReadUInt32(); Debug.Assert(unknown0 == 0); result.InputPrimitive = (Primitive) reader.ReadUInt32(); result.GeometryShaderOutputTopology = (PrimitiveTopology) reader.ReadUInt32(); result.GeometryShaderMaxOutputVertexCount = reader.ReadUInt32(); var unknown1 = reader.ReadUInt32(); Debug.Assert(unknown1 == 0 || unknown1 == 1); var unknown2 = reader.ReadUInt32(); Debug.Assert(unknown2 == 0 || unknown2 == 2); // TODO result.IsSampleFrequencyShader = (reader.ReadUInt32() == 1); // DX10 stat size if (size == 29) return result; // Unknown. var unknown = reader.ReadUInt32(); Debug.Assert(unknown == 0); // TODO result.ControlPoints = reader.ReadUInt32(); result.HullShaderOutputPrimitive = (TessellatorOutputPrimitive) reader.ReadUInt32(); result.HullShaderPartitioning = (TessellatorPartitioning) reader.ReadUInt32(); result.TessellatorDomain = (TessellatorDomain) reader.ReadUInt32(); result.BarrierInstructions = reader.ReadUInt32(); result.InterlockedInstructions = reader.ReadUInt32(); result.TextureStoreInstructions = reader.ReadUInt32(); // DX11 stat size. if (size == 37) return result; throw new ParseException("Unhandled stat size: " + chunkSize); }