Example #1
0
        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);
		}