public static DebugShaderVersion ParseFX(DebugBytecodeReader reader)
        {
            uint        target           = reader.ReadUInt16("Target");
            var         programTypeValue = reader.ReadUInt16("ProgramType");
            ProgramType programType      = ParseProgramType(programTypeValue);
            byte        majorVersion;
            byte        minorVersion;

            switch (target)
            {
            case 0x1001:
                majorVersion = 4;
                minorVersion = 0;
                break;

            case 0x1011:
                majorVersion = 4;
                minorVersion = 1;
                break;

            case 0x2001:
                majorVersion = 5;
                minorVersion = 0;
                break;

            case 0x0901:
                majorVersion = 2;
                minorVersion = 0;
                break;

            default:
                throw new ParseException(string.Format("Unknown program version: 0x{0:X}", target));
            }
            return(new DebugShaderVersion
            {
                MajorVersion = majorVersion,
                MinorVersion = minorVersion,
                ProgramType = programType
            });
        }
        public static DebugShaderVersion ParseAon9(DebugBytecodeReader reader)
        {
            byte   minor      = reader.ReadByte("minorVersion");
            byte   major      = reader.ReadByte("majorVersion");
            ushort shaderType = reader.ReadUInt16("programType");

            return(new DebugShaderVersion
            {
                MinorVersion = minor,
                MajorVersion = major,
                ProgramType = shaderType == 0xFFFF ? ProgramType.PixelShader : ProgramType.VertexShader
            });
        }
        internal static DebugShaderVersion ParseRdef(DebugBytecodeReader reader)
        {
            byte        minorVersion     = reader.ReadByte("minorVersion");
            byte        majorVersion     = reader.ReadByte("majorVersion");
            ushort      programTypeValue = reader.ReadUInt16("programTypeValue");
            ProgramType programType;

            switch (programTypeValue)
            {
            case 0xFFFF:
                programType = ProgramType.PixelShader;
                break;

            case 0xFFFE:
                programType = ProgramType.VertexShader;
                break;

            case 0x4853:
                programType = ProgramType.HullShader;
                break;

            case 0x4753:
                programType = ProgramType.GeometryShader;
                break;

            case 0x4453:
                programType = ProgramType.DomainShader;
                break;

            case 0x4353:
                programType = ProgramType.ComputeShader;
                break;

            case 0x4C46:
                programType = ProgramType.LibraryShader;
                break;

            default:
                throw new ParseException(string.Format("Unknown program type: 0x{0:X}", programTypeValue));
            }
            return(new DebugShaderVersion
            {
                MajorVersion = majorVersion,
                MinorVersion = minorVersion,
                ProgramType = programType
            });
        }