+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                       Attribute Address Map and Default Table (Idmap, Odmap, Defaults, and Interpolation Type)                                                                                  |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|                                     |           |  IPA/ALD  |  CULL_BEFORE_FETCH  |       VERTEX        |  TESSELLATION_INIT  |     TESSELLATION    |      GEOMETRY       |    VSC    |  PIXEL    |  Default Value, or   |  Interpolation Type  |
|  Attribute Name                     | Attribute |Instruction|    Idmap / Odmap    |    Idmap / Odmap    |    Idmap / Odmap    |    Idmap / Odmap    |    Idmap / Odmap    |   Idmap   |  Idmap    |  set via a field in  |  for Pixel Shader    |
|                                     |  Number   |  Address  |    Shader Slot 0    |    Shader Slot 1    |    Shader Slot 2    |    Shader Slot 3    |    Shader Slot 4    |  no slot  |  Slot 5   |  SetAttributeDefault |  and VPC clipping    |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|  "below range"                      |    n/a    |  <   0;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|System Values:                       |           |           |                     |                     |                     |                     |                     |           |           |                      |                      |
|  SYSTEM_VALUE_RESERVED_28           |  =   0;   |  =   0;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_29           |  =   1;   |  =   4;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_30           |  =   2;   |  =   8;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_31           |  =   3;   |  =  12;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_32           |  =   4;   |  =  16;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_33           |  =   5;   |  =  20;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_34           |  =   6;   |  =  24;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_35           |  =   7;   |  =  28;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_36           |  =   8;   |  =  32;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_37           |  =   9;   |  =  36;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_00           |  =  10;   |  =  40;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_01           |  =  11;   |  =  44;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_02           |  =  12;   |  =  48;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_03           |  =  13;   |  =  52;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  ...                                |  ...      |  ...      |       ...           |       ...           |       ...           |       ...           |       ...           |  ...      |  ...      |  ...                 |  ...                 |
|  SYSTEM_VALUE_RESERVED_12           |  =  22;   |  =  88;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_13           |  =  23;   |  =  92;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  PRIMITIVE_ID                       |  =  24;   |  =  96;   |  default / discard  |  default / discard  |   LD_REQ / discard  |   LD_REQ / discard  |   LD_REQ / ST       |  LD       |  LD       |  0.0                 |  Constant            |
|  RT_ARRAY_INDEX                     |  =  25;   |  = 100;   |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_REQ   |  LD       |  LD       |  0                   |  Constant            |
|  VIEWPORT_INDEX                     |  =  26;   |  = 104;   |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_REQ   |  LD       |  LD       |  0                   |  Constant            |
|  POINT_SIZE                         |  =  27;   |  = 108;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  default  |  0.0                 |  Perspective         |
|  POSITION_X                         |  =  28;   |  = 112;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  "Non-Perspective"   |
|  POSITION_Y                         |  =  29;   |  = 116;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  "Non-Perspective"   |
|  POSITION_Z                         |  =  30;   |  = 120;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Non-Perspective     |
|  POSITION_W                         |  =  31;   |  = 124;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  1.0                 |  Non-Perspective     |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|Generic Values:                      |           |           |                     |                     |                     |                     |                     |           |           |                      |                      |
|  GENERIC_ATTRIBUTE_00_X             |  =  32;   |  = 128;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_00_Y             |  =  33;   |  = 132;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_00_Z             |  =  34;   |  = 136;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_00_W             |  =  35;   |  = 140;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  GenericVector       |  Selected in PS SPH  |
|  ...                                |  ...      |  ...      |       ...           |       ...           |       ...           |       ...           |       ...           |  ..       |  ..       |  ...                 |  ...                 |
|  GENERIC_ATTRIBUTE_31_X             |  = 156;   |  = 624;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_31_Y             |  = 157;   |  = 628;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_31_Z             |  = 158;   |  = 632;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  GENERIC_ATTRIBUTE_31_W             |  = 159;   |  = 636;   |       LD / ST_REQ   |       LD / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  GenericVector       |  Selected in PS SPH  |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|System Values:                       |           |           |                     |                     |                     |                     |                     |           |           |                      |                      |
|  COLOR_FRONT_DIFFUSE_RED            |  = 160;   |  = 640;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  ColorFrontDiffuse   |  Selected in PS SPH  |
|  COLOR_FRONT_DIFFUSE_GREEN          |  = 161;   |  = 644;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  ColorFrontDiffuse   |  Selected in PS SPH  |
|  COLOR_FRONT_DIFFUSE_BLUE           |  = 162;   |  = 648;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  ColorFrontDiffuse   |  Selected in PS SPH  |
|  COLOR_FRONT_DIFFUSE_ALPHA          |  = 163;   |  = 652;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  1.0                 |  Selected in PS SPH  |
|  COLOR_FRONT_SPECULAR_RED           |  = 164;   |  = 656;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  COLOR_FRONT_SPECULAR_GREEN         |  = 165;   |  = 660;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  COLOR_FRONT_SPECULAR_BLUE          |  = 166;   |  = 664;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  COLOR_FRONT_SPECULAR_ALPHA         |  = 167;   |  = 668;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  ColorFrontSpecular  |  Selected in PS SPH  |
|  COLOR_BACK_DIFFUSE_RED             |  = 168;   |  = 672;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_DIFFUSE_GREEN           |  = 169;   |  = 676;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_DIFFUSE_BLUE            |  = 170;   |  = 680;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_DIFFUSE_ALPHA           |  = 171;   |  = 684;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  1.0                 |  not in PS SPH       |
|  COLOR_BACK_SPECULAR_RED            |  = 172;   |  = 688;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_SPECULAR_GREEN          |  = 173;   |  = 692;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_SPECULAR_BLUE           |  = 174;   |  = 696;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  0.0                 |  not in PS SPH       |
|  COLOR_BACK_SPECULAR_ALPHA          |  = 175;   |  = 700;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  default  |  1.0                 |  not in PS SPH       |
|  CLIP_DISTANCE_0                    |  = 176;   |  = 704;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_1                    |  = 177;   |  = 708;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_2                    |  = 178;   |  = 712;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_3                    |  = 179;   |  = 716;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_4                    |  = 180;   |  = 720;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_5                    |  = 181;   |  = 724;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_6                    |  = 182;   |  = 728;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  CLIP_DISTANCE_7                    |  = 183;   |  = 732;   |  default / ST_REQ   |  default / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |       LD / ST_LAST  |  LD       |  LD       |  0.0                 |  Perspective         |
|  POINT_SPRITE_S                     |  = 184;   |  = 736;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  LD       |  0.0                 |  Non-Perspective     |
|  POINT_SPRITE_T                     |  = 185;   |  = 740;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  LD       |  0.0                 |  Non-Perspective     |
|  FOG_COORDINATE                     |  = 186;   |  = 744;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Perspective         |
|  SYSTEM_VALUE_RESERVED_17           |  = 187;   |  = 748;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  TESSELLATION_EVALUATION_POINT_U    |  = 188;   |  = 752;   |  default / discard  |  default / discard  |  default / discard  |  default / ST_REQ   |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  TESSELLATION_EVALUATION_POINT_V    |  = 189;   |  = 756;   |  default / discard  |  default / discard  |  default / discard  |  default / ST_REQ   |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  INSTANCE_ID                        |  = 190;   |  = 760;   |   LD_REQ / ST_REQ   |   LD_REQ / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0                   |  Constant            |
|  VERTEX_ID                          |  = 191;   |  = 764;   |   LD_REQ / ST_REQ   |   LD_REQ / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0                   |  Constant            |
|  FIXED_FNC_TEXTURE_0_S              |  = 192;   |  = 768;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_0_T              |  = 193;   |  = 772;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_0_R              |  = 194;   |  = 776;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_0_Q              |  = 195;   |  = 780;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  FixedFncTexture     |  Selected in PS SPH  |
|  ...                                |  ...      |  ...      |  ...                |  ...                |       ...           |       ...           |       ...           |  ...      |  ...      |  ...                 |  ...                 |
|  FIXED_FNC_TEXTURE_9_S              |  = 228;   |  = 912;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_9_T              |  = 229;   |  = 916;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_9_R              |  = 230;   |  = 920;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  0.0                 |  Selected in PS SPH  |
|  FIXED_FNC_TEXTURE_9_Q              |  = 231;   |  = 924;   |  default / ST_REQ   |  default / ST       |       LD / ST       |       LD / ST       |       LD / ST       |  LD       |  LD       |  FixedFncTexture     |  Selected in PS SPH  |
|  VIEWPORT_MASK                      |  = 232;   |  = 928;   |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  default / ST_LAST  |  LD       |  default  |  0                   |  Constant            |
|  SYSTEM_VALUE_RESERVED_19           |  = 233;   |  = 932;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  ...                                |  ...      |  ...      |  ...                |  ...                |       ...           |       ...           |       ...           |  ...      |  ...      |  ...                 |  ...                 |
|  SYSTEM_VALUE_RESERVED_24           |  = 238;   |  = 952;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  SYSTEM_VALUE_RESERVED_25           |  = 239;   |  = 956;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|Illegal Values & HW Values:          |           |           |                     |                     |                     |                     |                     |           |           |                      |                      |
|  ILLEGAL_16                         |  = 240;   |  = 960;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  ...                                |  ...      |  ...      |  ...                |  ...                |       ...           |       ...           |       ...           |  ...      |  ...      |  ...                 |  ...                 |
|  ILLEGAL_30                         |  = 254;   |  =1016;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
|  IS_FRONT_FACE                      |  = 255;   |  =1020;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  LD       |  always set by HW    |  Constant            |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
|  "above range"                      |    n/a    |  >1024;   |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default / discard  |  default  |  default  |  0.0                 |  Constant            |
+-------------------------------------+-----------+-----------+---------------------+---------------------+---------------------+---------------------+---------------------+-----------+-----------+----------------------+----------------------+
Definition of terms in the table:
    LD: the shader program can load the value from the ISBE, if the value is present, otherwise, the default value is loaded.
    ST: the shader program can store the value into the ISBE, if a downstream process (e.g., the next shader, stream out, rasterizer) needs, else it is thrown away.
    LD_REQ: like LD, except the ability to load is required, meaning the corresponding bit in the Bmap is always forced to TRUE when the Imap bit is TRUE.
    ST_REQ: like ST, except the ability to store is required, meaning the corresponding bit in the Bmap is always forced to TRUE when the Omap bit is TRUE, therby guaranteeing that 
            the shader program that did a store for the attribute (via its Omap) can read back the stored value.
    ST_LAST: if the shader is the last enabled VTG shader, the Odmap is treated as ST_REQ, otherwise it is treated as ST.
    default: illegal to have a '1' in the Imap; if an ALD is done, the default value is received, except if the previous shader's output is ST_REQ and the corresponding Omap bit is '1', 
            in which case the output from the previous shader is received; if an IPA is done, a zero is received.
    discard: illegal to have a '1' in the Omap; if an AST is done, the attribute data is discarded, regardless of the Imap bit of the next shader.
    Selected in PS SPH: for the interpolation type, the PS Imap has two bits that select between: UNUSED, CONSTANT, PERSPECTIVE, and SCREEN_LINEAR.
Notes:
    (1) The Bmap formed from the last VTG shader Omap and the PS Imap is the "VSC Input Bmap", and describes the last ISBE. In the case of FastGS, in HW VSC sees two
            ISBEs in parallel so there is no singular VSC Input Bmap. Logically, the VSC Input Bmp is the bitwise OR of the FGS BMAP and the last shader stage before FGS.
            The FGS ISBE primitive attributes take priority over the VT ISBE values.
    (2) The Bmap for the CBE that is the input to the PS is exactly the same as the PS Imap, so we should not use the term "Bmap" to describe CBEs, only ISBEs.
    (3) The PS Imap for POSITION_X and POSITION_Y are actually "don't care", since, if the PS reads either of these attributes, it always receives the attribute value.
    (4) The Omap that is paired with the CULL_BEFORE_FETCH and/or VERTEX Imaps is '0' everywhere except the genertic attributes, and the Omap bits for the generic atributes
            are set via the attribute stream input state.
    (5) The CULL_BEFORE_FETCH and VERTEX Imaps can only have useful '1' values for the generic attributes, INSTANCE_ID, and VERTEX_ID.
    (6) The CULL_BEFORE_FETCH and VERTEX Imaps for the generic attributes are not marked LD_REQ, because methods SetDaOutputAttributeSkipMask{A|B} can force the Bmap bit to zero.  That is,
            the skip masks can change the Bmap at the input of the vertex shaders.
    (7) The CULL_BEFORE_FETCH Idmap column must match the VERTEX Idmap column and it is therefore illegal to make the CULL_BEFORE_FETCH Idmap column
            different from the VERTEX Idmap column. The HW ORs the CULL_BEFORE_FETCH Imap and the VERTEX Imap before ANDing it with the SKIPMASK
            VERTEX_INPUT_BMAP = (CULL_BEFORE_FETCH Imap | VERTEX Imap ) & ~SKIPMASK
            The CULL_BEFORE_FETCH Odmap has all its valid outputs listed as ST_REQ, because the compiler can store intermediate VS results in the VS
            output ISBE, and VSb can read back those intermediate results to avoid repetition of the same computation. 
            The HW ORs the CULL_BEFORE_FETCH Omap into the VERTEX_OUTPUT_BMAP. This is the right thing to do if the CULL_BEFORE_FETCH Odmap column only
            contains ST_REQ or discard. It is therefore illegal to put anything other than ST_REQ or discard into the CULL_BEFORE_FETCH Odmap column.
            The CULL_BEFORE_FETCH column in this table is only used for default/discard error checking by the HW.
    (8) At the API level, VertexID and InstanceID can only be declared for input for the VS, but the HW does not prevent the attribute slots being used by subsequent shaders.
    (9) POINT_SIZE is ST_LAST at the output of all VTG shaders, since the shader could setting the point size (see method SetAttributePointSize).
    (10) The CLIP_DISTANCE_* slots are ST_LAST at the output of all VTG shaders, since they might be needed by the clipper, and the enabling of cliping can 
            not affect Bmap generation.  (see method SetUserClipEnable).
    (11) The tessellation LODs have been removed from the AAM, because they are now part of the per-patch attributes.  Please see the documentation for the ALD.P instruction.
    (12) TESSELLATION_EVALUATION_POINT_U and TESSELLATION_EVALUATION_POINT_V are generated by the TG hardware,
           which writes them to the TS ouput ISBE (i.e., not the TS input ISBE).  There's only one shared ISBE for
           all the TS threads, so we take advantage of per-thread output ISBE to hold these per TS thread U,V pairs.
           The TS Odmap shows these attributes as ST_REQ to allow TS to read U,V from its own output.
           TS OMAP is required (enforced thru DS Error Check) to contain TESSELLATION_EVALUATION_POINT_U/V to
           correspond with HW's unconditional allocation of these attributes in TS output ISBEs.
    (13) PRIMITIVE_ID can be read in TI, TS, GS and PS.
            (a) Special HW support makes it available as an input to TI, TS and GS.  TI/TS need not (and cannot) pass it on.
            (b) If GS is disabled, special HW support makes it available to PS at designated input.
            (c) If GS is enabled and passes it on, its available to PS at same designated input.
                If GS is enabled and doesn't pass it on, default(0) is available to PS at same designated input.
         Items (b) and (c) require that same PS (without recompile) can be used with or without GS.
    (14) POINT_SPRITE_S and POINT_SPRITE_T can only be loaded by the PS, and is generated in STri with other point sprite texture coordinates.
    (15) For the PIXEL shader, the back colors are shown as "default", because they never actually exist as inputs to the shader (depending on two-sided lighting, the front or back colors 
            use the slots for front colors).
    (16) For the PIXEL shader, the front colors in the SPH are influenced by the SetShadeMode method.  Setting this to FLAT will force the interpolation type of COLOR_FRONT_* to Constant.  
            Setting the SetShadeMode to SMOOTH will not change the interpolation type.  This allows for IPA.SC to properly respect SetShadeMode throughout the pipe.
    (17) Wherever point size and/or clip distances are generated (e.g., in VS), it is the responsibility of downstream VTG shaders to pass these attributes along, down to rasterization.  Only
            the last VTG shader gets these attributes treated as ST_REQ in the hardware.
    (18) The "map" section of an ISBE includes: 
            (a) input and output for attributes 0 to 24 for CULL_BEFORE_FETCH, VERTEX, TESSELLATION_INIT, and TESSELLATION;
            (b) input for attributes 0 to 24 for GEOMETRY;
            (c) output for attributes 0 to 23 for GEOMETRY; and
            (d) input for attributes 0 to 23 for PIXEL.
    (19) The Bmap rules for the VSC Input Bmap (i.e., the last VTG Stage's Output Bmap) are:
            (a) VSC Imput BMAP = (OMAP[lastStage] (&) (PS_IMAP & Ps_enabled) ) | (OMAP[lastStage] (&) ( (Raster_IMAP & Raster_enabled) | (stream_IMAP & stream_enabled) ) )   
                where Raster IMAP is TRUE only for attributes: X, Y, Z, ViewportIndex, RtArrayIndex, PointSize, and 
                where "(&)" refers to the special AND operation that takes into account the Idmap and Odmap.
            (b) For X, Y, Z, and W, if the Omap for the last VTG shader is zero, VPC inserts default values for its internal processing. 
            (c) VPC always supplies X, Y, and Z to Raster in the Raster portion of the CBE. 
            (d) In the STri portion of the CBE, the Bmap is equal to the PS Imap, except for the X and Y attributes, where the bits are always zero. If PS wants X and/or Y, it 
                is part of the quad data and not passed via the STri CBE. 
    (20) The PS Imap is required to have a '1' for POSITION_W.
    (21) For the PS Idmap, LD acts as LD_REQ for generation of the Bmap that corresponds to the CBE, but as LD for generation of the VSC input Bmap.
    (22) For PS inputs, VSC inserts the defaults when VTG Omap==0 and PS Imap==1.  When PS Imap == 0, VSC does not insert a default, so the SM always inserts a zero.  
            In other words, when reading attributes in PS, if PS Imap == 0, the PS always gets zero.
    (23) Bmap values are generated based on the truth table as follows:
            for VTG shaders: Bmap Generation Truth Table for VTG Shaders
            for PS shaders: Bmap Generation Truth Table for PS Shaders



+-------------------------------------------------------------+
|                 Patch Attribute Address Map                 |
+-------------------------------------+-----------+-----------+
|                                     |   Patch   |  IPA/ALD  |
|  Attribute Name                     | Attribute |Instruction|
|                                     |  Number   |  Address  |
+-------------------------------------+-----------+-----------+
|  "below range"                      |    n/a    |  <   0;   |
+-------------------------------------+-----------+-----------+
|System Values:                       |           |           |
|  TESSELLATION_LOD_LEFT              |  =   0;   |  =   0;   |
|  TESSELLATION_LOD_TOP               |  =   1;   |  =   4;   |
|  TESSELLATION_LOD_RIGHT             |  =   2;   |  =   8;   |
|  TESSELLATION_LOD_BOTTOM            |  =   3;   |  =  12;   |
|  TESSELLATION_LOD_INTERIOR_U        |  =   4;   |  =  16;   |
|  TESSELLATION_LOD_INTERIOR_V        |  =   5;   |  =  20;   |
|  GENERIC_PATCH_ATTRIBUTE_0          |  =   6;   |  =  24;   |
|  GENERIC_PATCH_ATTRIBUTE_1          |  =   7;   |  =  28;   |
|  GENERIC_PATCH_ATTRIBUTE_2          |  =   8;   |  =  32;   |
|  GENERIC_PATCH_ATTRIBUTE_3          |  =   9;   |  =  36;   |
|  ...                                |  ...      |  ...      |
|  GENERIC_PATCH_ATTRIBUTE_120        |  = 126;   |  = 504;   |
|  GENERIC_PATCH_ATTRIBUTE_121        |  = 127;   |  = 508;   |
+-------------------------------------+-----------+-----------+

+---------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                         Tessellation LOD Layout and Explanation                                                         |
+---------------------------------------------------------------------------------------------------------------------------------------------------------+
|       Per-                                                           Quad Patches                 Triangle Patches              IsoLine Patches         |
|      Patch                                      LOD's      ------------------------------    ----------------------------    ---------------------      |
|       CBE               Method Name            HW name         Parameter          Diagram        Parameter       Diagram      Parameter    Diagram      |
|      ------   -----------------------------   ----------   --------------------   -------    -----------------   --------    -----------   -------      |
|       slot 0   SetTessellationLodU0OrDensity   Left         External U=0 edge      Left       External U=0 edge   Left        LineDensity   Left        |
|       slot 1   SetTessellationLodV0OrDetail    Top          External V=0 edge      Top        External V=0 edge   Top         LineDetail    Top         |
|       slot 2   SetTessellationLodU1OrW0        Right        External U=1 edge      Right      External U=1 edge   Right       unused        --          |
|       slot 3   SetTessellationLodV1            Bottom       External V=1 edge      Bottom     unused              --          unused        --          |
|       slot 4   SetTessellationLodInternalU     InternalU    Internal U Direction   U          Internal            Internal    unused        --          |
|       slot 5   SetTessellationLodInternalV     InternalV    Internal V Direction   V          unused              --          unused        --          |
|                                                                                                                                                         |
|                                                                                                                                                         |
|                                                                 (0,0)   1    (1,0)             (0,1,0)    1    (1,0,0)        (0,0)   1    (1,0)        |
|                                                                  +--------------+                 +---------------+            +--------------+         |
|                                                                  |              |                  \             /                                      |
|                                                                  |  +--------+  |                   \  +-----+  /              +--------------+         |
|                                                                  |  |        |  |                    \  \ 4 /  /             0                          |
|                                                                 0|  |5       |  |2                    \  \ /  /                +--------------+         |
|                                                                  |  |   4    |  |                    0 \  +  / 2                                        |
|                                                                  |  +--------+  |                       \   /                  +--------------+         |
|                                                                  |      3       |                        \ /                                            |
|                                                                  +--------------+                         +                    +              +         |
|                                                                 (0,1)        (1,1)                     (0,0,1)                (0,1)        (1,1)        |
|                                                                                                                                                         |
+---------------------------------------------------------------------------------------------------------------------------------------------------------+