mesa: add/update comments in _mesa_copy_buffer_subdata()
[mesa.git] / src / mesa / drivers / dri / i965 / brw_defines.h
index 9633c95ff50a8fc7d8e8162fc7736b6e9173ad60..f7bb05ad3170357829778678f94d430b7cfa29f7 100644 (file)
   * Authors:
   *   Keith Whitwell <keith@tungstengraphics.com>
   */
+
+#define INTEL_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low))
+#define SET_FIELD(value, field) (((value) << field ## _SHIFT) & field ## _MASK)
+#define GET_FIELD(word, field) (((word)  & field ## _MASK) >> field ## _SHIFT)
 
 #ifndef BRW_DEFINES_H
 #define BRW_DEFINES_H
 
 /* 3D state:
  */
-#define _3DOP_3DSTATE_PIPELINED       0x0
-#define _3DOP_3DSTATE_NONPIPELINED    0x1
-#define _3DOP_3DCONTROL               0x2
-#define _3DOP_3DPRIMITIVE             0x3
-
-#define _3DSTATE_PIPELINED_POINTERS       0x00
-#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
-#define _3DSTATE_VERTEX_BUFFERS           0x08
-#define _3DSTATE_VERTEX_ELEMENTS          0x09
-#define _3DSTATE_INDEX_BUFFER             0x0A
-#define _3DSTATE_VF_STATISTICS            0x0B
-#define _3DSTATE_DRAWING_RECTANGLE            0x00
-#define _3DSTATE_CONSTANT_COLOR               0x01
-#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
-#define _3DSTATE_CHROMA_KEY                   0x04
-#define _3DSTATE_DEPTH_BUFFER                 0x05
-#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
-#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
-#define _3DSTATE_LINE_STIPPLE                 0x08
-#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
-#define _3DCONTROL    0x00
-
 #define PIPE_CONTROL_NOWRITE          0x00
 #define PIPE_CONTROL_WRITEIMMEDIATE   0x01
 #define PIPE_CONTROL_WRITEDEPTH       0x02
 #define PIPE_CONTROL_GTTWRITE_PROCESS_LOCAL 0x00
 #define PIPE_CONTROL_GTTWRITE_GLOBAL        0x01
 
+#define CMD_3D_PRIM                                 0x7b00 /* 3DPRIMITIVE */
+/* DW0 */
+# define GEN4_3DPRIM_TOPOLOGY_TYPE_SHIFT            10
+# define GEN4_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL (0 << 15)
+# define GEN4_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     (1 << 15)
+/* DW1 */
+# define GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL (0 << 8)
+# define GEN7_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     (1 << 8)
+
 #define _3DPRIM_POINTLIST         0x01
 #define _3DPRIM_LINELIST          0x02
 #define _3DPRIM_LINESTRIP         0x03
@@ -87,9 +77,6 @@
 #define _3DPRIM_LINESTRIP_CONT_BF 0x14
 #define _3DPRIM_TRIFAN_NOSTIPPLE  0x15
 
-#define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
-#define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
-
 #define BRW_ANISORATIO_2     0 
 #define BRW_ANISORATIO_4     1 
 #define BRW_ANISORATIO_6     2 
 #define BRW_DEPTHFORMAT_D32_FLOAT_S8X24_UINT     0
 #define BRW_DEPTHFORMAT_D32_FLOAT                1
 #define BRW_DEPTHFORMAT_D24_UNORM_S8_UINT        2
+#define BRW_DEPTHFORMAT_D24_UNORM_X8_UINT        3 /* GEN5 */
 #define BRW_DEPTHFORMAT_D16_UNORM                5
 
 #define BRW_FLOATING_POINT_IEEE_754        0
 #define BRW_MIPFILTER_NEAREST     1   
 #define BRW_MIPFILTER_LINEAR      3
 
+#define BRW_ADDRESS_ROUNDING_ENABLE_U_MAG      0x20
+#define BRW_ADDRESS_ROUNDING_ENABLE_U_MIN      0x10
+#define BRW_ADDRESS_ROUNDING_ENABLE_V_MAG      0x08
+#define BRW_ADDRESS_ROUNDING_ENABLE_V_MIN      0x04
+#define BRW_ADDRESS_ROUNDING_ENABLE_R_MAG      0x02
+#define BRW_ADDRESS_ROUNDING_ENABLE_R_MIN      0x01
+
 #define BRW_POLYGON_FRONT_FACING     0
 #define BRW_POLYGON_BACK_FACING      1
 
 #define BRW_STENCILOP_DECR               6
 #define BRW_STENCILOP_INVERT             7
 
+/* Surface state DW0 */
+#define BRW_SURFACE_RC_READ_WRITE      (1 << 8)
+#define BRW_SURFACE_MIPLAYOUT_SHIFT    10
 #define BRW_SURFACE_MIPMAPLAYOUT_BELOW   0
 #define BRW_SURFACE_MIPMAPLAYOUT_RIGHT   1
+#define BRW_SURFACE_CUBEFACE_ENABLES   0x3f
+#define BRW_SURFACE_BLEND_ENABLED      (1 << 13)
+#define BRW_SURFACE_WRITEDISABLE_B_SHIFT       14
+#define BRW_SURFACE_WRITEDISABLE_G_SHIFT       15
+#define BRW_SURFACE_WRITEDISABLE_R_SHIFT       16
+#define BRW_SURFACE_WRITEDISABLE_A_SHIFT       17
 
 #define BRW_SURFACEFORMAT_R32G32B32A32_FLOAT             0x000 
 #define BRW_SURFACEFORMAT_R32G32B32A32_SINT              0x001 
 #define BRW_SURFACEFORMAT_R8_SSCALED                     0x149
 #define BRW_SURFACEFORMAT_R8_USCALED                     0x14A
 #define BRW_SURFACEFORMAT_L8_UNORM_SRGB                  0x14C
+#define BRW_SURFACEFORMAT_DXT1_RGB_SRGB                  0x180
 #define BRW_SURFACEFORMAT_R1_UINT                        0x181 
 #define BRW_SURFACEFORMAT_YCRCB_NORMAL                   0x182 
 #define BRW_SURFACEFORMAT_YCRCB_SWAPUVY                  0x183 
 #define BRW_SURFACEFORMAT_R16G16B16_SNORM                0x19D 
 #define BRW_SURFACEFORMAT_R16G16B16_SSCALED              0x19E 
 #define BRW_SURFACEFORMAT_R16G16B16_USCALED              0x19F
+#define BRW_SURFACE_FORMAT_SHIFT       18
+#define BRW_SURFACE_FORMAT_MASK                INTEL_MASK(26, 18)
 
 #define BRW_SURFACERETURNFORMAT_FLOAT32  0
 #define BRW_SURFACERETURNFORMAT_S1       1
 
+#define BRW_SURFACE_TYPE_SHIFT         29
+#define BRW_SURFACE_TYPE_MASK          INTEL_MASK(31, 29)
 #define BRW_SURFACE_1D      0
 #define BRW_SURFACE_2D      1
 #define BRW_SURFACE_3D      2
 #define BRW_SURFACE_BUFFER  4
 #define BRW_SURFACE_NULL    7
 
+/* Surface state DW2 */
+#define BRW_SURFACE_HEIGHT_SHIFT       19
+#define BRW_SURFACE_HEIGHT_MASK                INTEL_MASK(31, 19)
+#define BRW_SURFACE_WIDTH_SHIFT                6
+#define BRW_SURFACE_WIDTH_MASK         INTEL_MASK(18, 6)
+#define BRW_SURFACE_LOD_SHIFT          2
+#define BRW_SURFACE_LOD_MASK           INTEL_MASK(5, 2)
+
+/* Surface state DW3 */
+#define BRW_SURFACE_DEPTH_SHIFT                21
+#define BRW_SURFACE_DEPTH_MASK         INTEL_MASK(31, 21)
+#define BRW_SURFACE_PITCH_SHIFT                3
+#define BRW_SURFACE_PITCH_MASK         INTEL_MASK(19, 3)
+#define BRW_SURFACE_TILED              (1 << 1)
+#define BRW_SURFACE_TILED_Y            (1 << 0)
+
+/* Surface state DW4 */
+#define BRW_SURFACE_MIN_LOD_SHIFT      28
+#define BRW_SURFACE_MIN_LOD_MASK       INTEL_MASK(31, 28)
+
+/* Surface state DW5 */
+#define BRW_SURFACE_X_OFFSET_SHIFT             25
+#define BRW_SURFACE_X_OFFSET_MASK              INTEL_MASK(31, 25)
+#define BRW_SURFACE_VERTICAL_ALIGN_ENABLE      (1 << 24)
+#define BRW_SURFACE_Y_OFFSET_SHIFT             20
+#define BRW_SURFACE_Y_OFFSET_MASK              INTEL_MASK(23, 20)
+
 #define BRW_TEXCOORDMODE_WRAP            0
 #define BRW_TEXCOORDMODE_MIRROR          1
 #define BRW_TEXCOORDMODE_CLAMP           2
 #define BRW_CHANNEL_Z     2
 #define BRW_CHANNEL_W     3
 
-#define BRW_COMPRESSION_NONE          0
-#define BRW_COMPRESSION_2NDHALF       1
-#define BRW_COMPRESSION_COMPRESSED    2
+enum brw_compression {
+   BRW_COMPRESSION_NONE       = 0,
+   BRW_COMPRESSION_2NDHALF    = 1,
+   BRW_COMPRESSION_COMPRESSED = 2,
+};
+
+#define GEN6_COMPRESSION_1Q            0
+#define GEN6_COMPRESSION_2Q            1
+#define GEN6_COMPRESSION_3Q            2
+#define GEN6_COMPRESSION_4Q            3
+#define GEN6_COMPRESSION_1H            0
+#define GEN6_COMPRESSION_2H            2
 
 #define BRW_CONDITIONAL_NONE  0
 #define BRW_CONDITIONAL_Z     1
 #define BRW_WE_ALL             1
 /** @} */
 
-#define BRW_OPCODE_MOV        1
-#define BRW_OPCODE_SEL        2
-#define BRW_OPCODE_NOT        4
-#define BRW_OPCODE_AND        5
-#define BRW_OPCODE_OR         6
-#define BRW_OPCODE_XOR        7
-#define BRW_OPCODE_SHR        8
-#define BRW_OPCODE_SHL        9
-#define BRW_OPCODE_RSR        10
-#define BRW_OPCODE_RSL        11
-#define BRW_OPCODE_ASR        12
-#define BRW_OPCODE_CMP        16
-#define BRW_OPCODE_CMPN       17
-#define BRW_OPCODE_JMPI       32
-#define BRW_OPCODE_IF         34
-#define BRW_OPCODE_IFF        35
-#define BRW_OPCODE_ELSE       36
-#define BRW_OPCODE_ENDIF      37
-#define BRW_OPCODE_DO         38
-#define BRW_OPCODE_WHILE      39
-#define BRW_OPCODE_BREAK      40
-#define BRW_OPCODE_CONTINUE   41
-#define BRW_OPCODE_HALT       42
-#define BRW_OPCODE_MSAVE      44
-#define BRW_OPCODE_MRESTORE   45
-#define BRW_OPCODE_PUSH       46
-#define BRW_OPCODE_POP        47
-#define BRW_OPCODE_WAIT       48
-#define BRW_OPCODE_SEND       49
-#define BRW_OPCODE_MATH       56
-#define BRW_OPCODE_ADD        64
-#define BRW_OPCODE_MUL        65
-#define BRW_OPCODE_AVG        66
-#define BRW_OPCODE_FRC        67
-#define BRW_OPCODE_RNDU       68
-#define BRW_OPCODE_RNDD       69
-#define BRW_OPCODE_RNDE       70
-#define BRW_OPCODE_RNDZ       71
-#define BRW_OPCODE_MAC        72
-#define BRW_OPCODE_MACH       73
-#define BRW_OPCODE_LZD        74
-#define BRW_OPCODE_SAD2       80
-#define BRW_OPCODE_SADA2      81
-#define BRW_OPCODE_DP4        84
-#define BRW_OPCODE_DPH        85
-#define BRW_OPCODE_DP3        86
-#define BRW_OPCODE_DP2        87
-#define BRW_OPCODE_DPA2       88
-#define BRW_OPCODE_LINE       89
-#define BRW_OPCODE_PLN        90
-#define BRW_OPCODE_NOP        126
+enum opcode {
+   /* These are the actual hardware opcodes. */
+   BRW_OPCODE_MOV =    1,
+   BRW_OPCODE_SEL =    2,
+   BRW_OPCODE_NOT =    4,
+   BRW_OPCODE_AND =    5,
+   BRW_OPCODE_OR =     6,
+   BRW_OPCODE_XOR =    7,
+   BRW_OPCODE_SHR =    8,
+   BRW_OPCODE_SHL =    9,
+   BRW_OPCODE_RSR =    10,
+   BRW_OPCODE_RSL =    11,
+   BRW_OPCODE_ASR =    12,
+   BRW_OPCODE_CMP =    16,
+   BRW_OPCODE_CMPN =   17,
+   BRW_OPCODE_JMPI =   32,
+   BRW_OPCODE_IF =     34,
+   BRW_OPCODE_IFF =    35,
+   BRW_OPCODE_ELSE =   36,
+   BRW_OPCODE_ENDIF =  37,
+   BRW_OPCODE_DO =     38,
+   BRW_OPCODE_WHILE =  39,
+   BRW_OPCODE_BREAK =  40,
+   BRW_OPCODE_CONTINUE = 41,
+   BRW_OPCODE_HALT =   42,
+   BRW_OPCODE_MSAVE =  44,
+   BRW_OPCODE_MRESTORE = 45,
+   BRW_OPCODE_PUSH =   46,
+   BRW_OPCODE_POP =    47,
+   BRW_OPCODE_WAIT =   48,
+   BRW_OPCODE_SEND =   49,
+   BRW_OPCODE_SENDC =  50,
+   BRW_OPCODE_MATH =   56,
+   BRW_OPCODE_ADD =    64,
+   BRW_OPCODE_MUL =    65,
+   BRW_OPCODE_AVG =    66,
+   BRW_OPCODE_FRC =    67,
+   BRW_OPCODE_RNDU =   68,
+   BRW_OPCODE_RNDD =   69,
+   BRW_OPCODE_RNDE =   70,
+   BRW_OPCODE_RNDZ =   71,
+   BRW_OPCODE_MAC =    72,
+   BRW_OPCODE_MACH =   73,
+   BRW_OPCODE_LZD =    74,
+   BRW_OPCODE_SAD2 =   80,
+   BRW_OPCODE_SADA2 =  81,
+   BRW_OPCODE_DP4 =    84,
+   BRW_OPCODE_DPH =    85,
+   BRW_OPCODE_DP3 =    86,
+   BRW_OPCODE_DP2 =    87,
+   BRW_OPCODE_DPA2 =   88,
+   BRW_OPCODE_LINE =   89,
+   BRW_OPCODE_PLN =    90,
+   BRW_OPCODE_NOP =    126,
+
+   /* These are compiler backend opcodes that get translated into other
+    * instructions.
+    */
+   FS_OPCODE_FB_WRITE = 128,
+   SHADER_OPCODE_RCP,
+   SHADER_OPCODE_RSQ,
+   SHADER_OPCODE_SQRT,
+   SHADER_OPCODE_EXP2,
+   SHADER_OPCODE_LOG2,
+   SHADER_OPCODE_POW,
+   SHADER_OPCODE_INT_QUOTIENT,
+   SHADER_OPCODE_INT_REMAINDER,
+   SHADER_OPCODE_SIN,
+   SHADER_OPCODE_COS,
+
+   SHADER_OPCODE_TEX,
+   SHADER_OPCODE_TXD,
+   SHADER_OPCODE_TXF,
+   SHADER_OPCODE_TXL,
+   SHADER_OPCODE_TXS,
+   FS_OPCODE_TXB,
+
+   FS_OPCODE_DDX,
+   FS_OPCODE_DDY,
+   FS_OPCODE_PIXEL_X,
+   FS_OPCODE_PIXEL_Y,
+   FS_OPCODE_CINTERP,
+   FS_OPCODE_LINTERP,
+   FS_OPCODE_DISCARD,
+   FS_OPCODE_SPILL,
+   FS_OPCODE_UNSPILL,
+   FS_OPCODE_PULL_CONSTANT_LOAD,
+
+   VS_OPCODE_URB_WRITE,
+   VS_OPCODE_SCRATCH_READ,
+   VS_OPCODE_SCRATCH_WRITE,
+   VS_OPCODE_PULL_CONSTANT_LOAD,
+};
 
 #define BRW_PREDICATE_NONE             0
 #define BRW_PREDICATE_NORMAL           1
 #define BRW_POLYGON_FACING_FRONT      0
 #define BRW_POLYGON_FACING_BACK       1
 
-#define BRW_MESSAGE_TARGET_NULL               0
-#define BRW_MESSAGE_TARGET_MATH               1 /* reserved on GEN6 */
-#define BRW_MESSAGE_TARGET_SAMPLER            2
-#define BRW_MESSAGE_TARGET_GATEWAY            3
-#define BRW_MESSAGE_TARGET_DATAPORT_READ      4 /* sampler cache on GEN6 */
-#define BRW_MESSAGE_TARGET_DATAPORT_WRITE     5 /* render cache on Gen6 */
-#define BRW_MESSAGE_TARGET_URB                6
-#define BRW_MESSAGE_TARGET_THREAD_SPAWNER     7
-#define BRW_MESSAGE_TARGET_CONST_CACHE       9 /* GEN6 */
+/**
+ * Message target: Shared Function ID for where to SEND a message.
+ *
+ * These are enumerated in the ISA reference under "send - Send Message".
+ * In particular, see the following tables:
+ * - G45 PRM, Volume 4, Table 14-15 "Message Descriptor Definition"
+ * - Sandybridge PRM, Volume 4 Part 2, Table 8-16 "Extended Message Descriptor"
+ * - BSpec, Volume 1a (GPU Overview) / Graphics Processing Engine (GPE) /
+ *   Overview / GPE Function IDs
+ */
+enum brw_message_target {
+   BRW_SFID_NULL                     = 0,
+   BRW_SFID_MATH                     = 1, /* Only valid on Gen4-5 */
+   BRW_SFID_SAMPLER                  = 2,
+   BRW_SFID_MESSAGE_GATEWAY          = 3,
+   BRW_SFID_DATAPORT_READ            = 4,
+   BRW_SFID_DATAPORT_WRITE           = 5,
+   BRW_SFID_URB                      = 6,
+   BRW_SFID_THREAD_SPAWNER           = 7,
+
+   GEN6_SFID_DATAPORT_SAMPLER_CACHE  = 4,
+   GEN6_SFID_DATAPORT_RENDER_CACHE   = 5,
+   GEN6_SFID_DATAPORT_CONSTANT_CACHE = 9,
+
+   GEN7_SFID_DATAPORT_DATA_CACHE     = 10,
+};
+
+#define GEN7_MESSAGE_TARGET_DP_DATA_CACHE     10
 
 #define BRW_SAMPLER_RETURN_FORMAT_FLOAT32     0
 #define BRW_SAMPLER_RETURN_FORMAT_UINT32      2
 #define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_GRADIENTS    2
 #define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_COMPARE    0
 #define BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_COMPARE     2
+#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_COMPARE 0
+#define BRW_SAMPLER_MESSAGE_SIMD4X2_SAMPLE_LOD_COMPARE 1
+#define BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_LOD_COMPARE  1
 #define BRW_SAMPLER_MESSAGE_SIMD4X2_RESINFO           2
-#define BRW_SAMPLER_MESSAGE_SIMD8_RESINFO             2
 #define BRW_SAMPLER_MESSAGE_SIMD16_RESINFO            2
 #define BRW_SAMPLER_MESSAGE_SIMD4X2_LD                3
 #define BRW_SAMPLER_MESSAGE_SIMD8_LD                  3
 #define BRW_SAMPLER_MESSAGE_SIMD16_LD                 3
 
-#define BRW_SAMPLER_MESSAGE_SAMPLE_GEN5            0
-#define BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_GEN5       1
-#define BRW_SAMPLER_MESSAGE_SAMPLE_LOD_GEN5        2
-#define BRW_SAMPLER_MESSAGE_SAMPLE_COMPARE_GEN5    3
-#define BRW_SAMPLER_MESSAGE_SAMPLE_DERIVS_GEN5     4
-#define BRW_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE_GEN5 5
-#define BRW_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE_GEN5 6
+#define GEN5_SAMPLER_MESSAGE_SAMPLE              0
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS         1
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_LOD          2
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_COMPARE      3
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_DERIVS       4
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE 5
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE  6
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_LD           7
+#define GEN5_SAMPLER_MESSAGE_SAMPLE_RESINFO      10
 
 /* for GEN5 only */
 #define BRW_SAMPLER_SIMD_MODE_SIMD4X2                   0
 
 #define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE                0
 #define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE           1
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_BLOCK_WRITE                2
+#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE                2
 #define BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE            3
 #define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE              4
 #define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VERTEX_BUFFER_WRITE     5
 #define BRW_DATAPORT_WRITE_MESSAGE_FLUSH_RENDER_CACHE               7
 
 /* GEN6 */
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE_GEN6             7
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE_GEN6              8
-#define BRW_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE_GEN6         9
-#define BRW_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE_GEN6              10
-#define BRW_DATAPORT_WRITE_MESSAGE_DWORLD_SCATTERED_WRITE_GEN6         11
-#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE_GEN6            12
-#define BRW_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE_GEN6              13
-#define BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE_GEN6      14
+#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_ATOMIC_WRITE              7
+#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE               8
+#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE          9
+#define GEN6_DATAPORT_WRITE_MESSAGE_MEDIA_BLOCK_WRITE               10
+#define GEN6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE           11
+#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE             12
+#define GEN6_DATAPORT_WRITE_MESSAGE_STREAMED_VB_WRITE               13
+#define GEN6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_UNORM_WRITE       14
+
+/* GEN7 */
+#define GEN7_DATAPORT_WRITE_MESSAGE_OWORD_DUAL_BLOCK_WRITE          10
 
 #define BRW_MATH_FUNCTION_INV                              1
 #define BRW_MATH_FUNCTION_LOG                              2
 #define CMD_CONST_BUFFER              0x6002
 
 #define CMD_STATE_BASE_ADDRESS        0x6101
-#define CMD_STATE_INSN_POINTER        0x6102
+#define CMD_STATE_SIP                 0x6102
 #define CMD_PIPELINE_SELECT_965       0x6104
 #define CMD_PIPELINE_SELECT_GM45      0x6904
 
-#define CMD_PIPELINED_STATE_POINTERS  0x7800
-#define CMD_BINDING_TABLE_PTRS        0x7801
+#define _3DSTATE_PIPELINED_POINTERS            0x7800
+#define _3DSTATE_BINDING_TABLE_POINTERS                0x7801
 # define GEN6_BINDING_TABLE_MODIFY_VS  (1 << 8)
 # define GEN6_BINDING_TABLE_MODIFY_GS  (1 << 9)
 # define GEN6_BINDING_TABLE_MODIFY_PS  (1 << 12)
 
-#define CMD_3D_SAMPLER_STATE_POINTERS                  0x7802 /* SNB+ */
+#define _3DSTATE_BINDING_TABLE_POINTERS_VS     0x7826 /* GEN7+ */
+#define _3DSTATE_BINDING_TABLE_POINTERS_HS     0x7827 /* GEN7+ */
+#define _3DSTATE_BINDING_TABLE_POINTERS_DS     0x7828 /* GEN7+ */
+#define _3DSTATE_BINDING_TABLE_POINTERS_GS     0x7829 /* GEN7+ */
+#define _3DSTATE_BINDING_TABLE_POINTERS_PS     0x782A /* GEN7+ */
+
+#define _3DSTATE_SAMPLER_STATE_POINTERS                0x7802 /* GEN6+ */
 # define PS_SAMPLER_STATE_CHANGE                               (1 << 12)
 # define GS_SAMPLER_STATE_CHANGE                               (1 << 9)
 # define VS_SAMPLER_STATE_CHANGE                               (1 << 8)
 /* DW2: GS */
 /* DW3: PS */
 
-#define CMD_VERTEX_BUFFER             0x7808
+#define _3DSTATE_SAMPLER_STATE_POINTERS_VS     0x782B /* GEN7+ */
+#define _3DSTATE_SAMPLER_STATE_POINTERS_GS     0x782E /* GEN7+ */
+#define _3DSTATE_SAMPLER_STATE_POINTERS_PS     0x782F /* GEN7+ */
+
+#define _3DSTATE_VERTEX_BUFFERS       0x7808
 # define BRW_VB0_INDEX_SHIFT           27
 # define GEN6_VB0_INDEX_SHIFT          26
 # define BRW_VB0_ACCESS_VERTEXDATA     (0 << 26)
 # define BRW_VB0_ACCESS_INSTANCEDATA   (1 << 26)
 # define GEN6_VB0_ACCESS_VERTEXDATA    (0 << 20)
 # define GEN6_VB0_ACCESS_INSTANCEDATA  (1 << 20)
+# define GEN7_VB0_ADDRESS_MODIFYENABLE  (1 << 14)
 # define BRW_VB0_PITCH_SHIFT           0
 
-#define CMD_VERTEX_ELEMENT            0x7809
+#define _3DSTATE_VERTEX_ELEMENTS      0x7809
 # define BRW_VE0_INDEX_SHIFT           27
 # define GEN6_VE0_INDEX_SHIFT          26
 # define BRW_VE0_FORMAT_SHIFT          16
 # define BRW_VE1_DST_OFFSET_SHIFT      0
 
 #define CMD_INDEX_BUFFER              0x780a
-#define CMD_VF_STATISTICS_965          0x780b
-#define CMD_VF_STATISTICS_GM45        0x680b
-#define CMD_3D_CC_STATE_POINTERS      0x780e /* GEN6+ */
+#define GEN4_3DSTATE_VF_STATISTICS             0x780b
+#define GM45_3DSTATE_VF_STATISTICS             0x680b
+#define _3DSTATE_CC_STATE_POINTERS             0x780e /* GEN6+ */
+#define _3DSTATE_BLEND_STATE_POINTERS          0x7824 /* GEN7+ */
+#define _3DSTATE_DEPTH_STENCIL_STATE_POINTERS  0x7825 /* GEN7+ */
 
-#define CMD_URB                                        0x7805 /* GEN6+ */
+#define _3DSTATE_URB                           0x7805 /* GEN6 */
 # define GEN6_URB_VS_SIZE_SHIFT                                16
 # define GEN6_URB_VS_ENTRIES_SHIFT                     0
 # define GEN6_URB_GS_ENTRIES_SHIFT                     8
 # define GEN6_URB_GS_SIZE_SHIFT                                0
 
-#define CMD_VIEWPORT_STATE_POINTERS                    0x780d /* GEN6+ */
+#define _3DSTATE_URB_VS                         0x7830 /* GEN7+ */
+#define _3DSTATE_URB_HS                         0x7831 /* GEN7+ */
+#define _3DSTATE_URB_DS                         0x7832 /* GEN7+ */
+#define _3DSTATE_URB_GS                         0x7833 /* GEN7+ */
+# define GEN7_URB_ENTRY_SIZE_SHIFT                      16
+# define GEN7_URB_STARTING_ADDRESS_SHIFT                25
+
+#define _3DSTATE_PUSH_CONSTANT_ALLOC_VS         0x7912 /* GEN7+ */
+#define _3DSTATE_PUSH_CONSTANT_ALLOC_PS         0x7916 /* GEN7+ */
+# define GEN7_PUSH_CONSTANT_BUFFER_OFFSET_SHIFT         16
+
+#define _3DSTATE_VIEWPORT_STATE_POINTERS       0x780d /* GEN6+ */
 # define GEN6_CC_VIEWPORT_MODIFY                       (1 << 12)
 # define GEN6_SF_VIEWPORT_MODIFY                       (1 << 11)
 # define GEN6_CLIP_VIEWPORT_MODIFY                     (1 << 10)
 
-#define CMD_3D_SCISSOR_STATE_POINTERS          0x780f /* GEN6+ */
+#define _3DSTATE_VIEWPORT_STATE_POINTERS_CC    0x7823 /* GEN7+ */
+#define _3DSTATE_VIEWPORT_STATE_POINTERS_SF_CL 0x7821 /* GEN7+ */
+
+#define _3DSTATE_SCISSOR_STATE_POINTERS                0x780f /* GEN6+ */
 
-#define CMD_3D_VS_STATE                      0x7810 /* GEN6+ */
+#define _3DSTATE_VS                            0x7810 /* GEN6+ */
 /* DW2 */
 # define GEN6_VS_SPF_MODE                              (1 << 31)
 # define GEN6_VS_VECTOR_MASK_ENABLE                    (1 << 30)
 # define GEN6_VS_SAMPLER_COUNT_SHIFT                   27
 # define GEN6_VS_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
+# define GEN6_VS_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
+# define GEN6_VS_FLOATING_POINT_MODE_ALT               (1 << 16)
 /* DW4 */
 # define GEN6_VS_DISPATCH_START_GRF_SHIFT              20
 # define GEN6_VS_URB_READ_LENGTH_SHIFT                 11
 # define GEN6_VS_CACHE_DISABLE                         (1 << 1)
 # define GEN6_VS_ENABLE                                        (1 << 0)
 
-#define CMD_3D_GS_STATE                      0x7811 /* GEN6+ */
+#define _3DSTATE_GS                            0x7811 /* GEN6+ */
 /* DW2 */
 # define GEN6_GS_SPF_MODE                              (1 << 31)
 # define GEN6_GS_VECTOR_MASK_ENABLE                    (1 << 30)
 # define GEN6_GS_SAMPLER_COUNT_SHIFT                   27
 # define GEN6_GS_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
+# define GEN6_GS_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
+# define GEN6_GS_FLOATING_POINT_MODE_ALT               (1 << 16)
 /* DW4 */
 # define GEN6_GS_URB_READ_LENGTH_SHIFT                 11
+# define GEN7_GS_INCLUDE_VERTEX_HANDLES                        (1 << 10)
 # define GEN6_GS_URB_ENTRY_READ_OFFSET_SHIFT           4
 # define GEN6_GS_DISPATCH_START_GRF_SHIFT              0
 /* DW5 */
 # define GEN6_GS_STATISTICS_ENABLE                     (1 << 10)
 # define GEN6_GS_SO_STATISTICS_ENABLE                  (1 << 9)
 # define GEN6_GS_RENDERING_ENABLE                      (1 << 8)
+# define GEN7_GS_ENABLE                                        (1 << 0)
 /* DW6 */
+# define GEN6_GS_REORDER                               (1 << 30)
+# define GEN6_GS_DISCARD_ADJACENCY                     (1 << 29)
+# define GEN6_GS_SVBI_PAYLOAD_ENABLE                   (1 << 28)
+# define GEN6_GS_SVBI_POSTINCREMENT_ENABLE             (1 << 27)
+# define GEN6_GS_SVBI_POSTINCREMENT_VALUE_SHIFT                16
+# define GEN6_GS_SVBI_POSTINCREMENT_VALUE_MASK         INTEL_MASK(25, 16)
 # define GEN6_GS_ENABLE                                        (1 << 15)
 
-#define CMD_3D_CLIP_STATE                    0x7812 /* GEN6+ */
+# define BRW_GS_EDGE_INDICATOR_0                       (1 << 8)
+# define BRW_GS_EDGE_INDICATOR_1                       (1 << 9)
+
+#define _3DSTATE_HS                             0x781B /* GEN7+ */
+#define _3DSTATE_TE                             0x781C /* GEN7+ */
+#define _3DSTATE_DS                             0x781D /* GEN7+ */
+
+#define _3DSTATE_CLIP                          0x7812 /* GEN6+ */
 /* DW1 */
+# define GEN7_CLIP_WINDING_CW                           (0 << 20)
+# define GEN7_CLIP_WINDING_CCW                          (1 << 20)
+# define GEN7_CLIP_VERTEX_SUBPIXEL_PRECISION_8          (0 << 19)
+# define GEN7_CLIP_VERTEX_SUBPIXEL_PRECISION_4          (1 << 19)
+# define GEN7_CLIP_EARLY_CULL                           (1 << 18)
+# define GEN7_CLIP_CULLMODE_BOTH                        (0 << 16)
+# define GEN7_CLIP_CULLMODE_NONE                        (1 << 16)
+# define GEN7_CLIP_CULLMODE_FRONT                       (2 << 16)
+# define GEN7_CLIP_CULLMODE_BACK                        (3 << 16)
 # define GEN6_CLIP_STATISTICS_ENABLE                   (1 << 10)
+/**
+ * Just does cheap culling based on the clip distance.  Bits must be
+ * disjoint with USER_CLIP_CLIP_DISTANCE bits.
+ */
+# define GEN6_USER_CLIP_CULL_DISTANCES_SHIFT           0
 /* DW2 */
 # define GEN6_CLIP_ENABLE                              (1 << 31)
 # define GEN6_CLIP_API_OGL                             (0 << 30)
 # define GEN6_CLIP_XY_TEST                             (1 << 28)
 # define GEN6_CLIP_Z_TEST                              (1 << 27)
 # define GEN6_CLIP_GB_TEST                             (1 << 26)
+/** 8-bit field of which user clip distances to clip aganist. */
+# define GEN6_USER_CLIP_CLIP_DISTANCES_SHIFT           16
 # define GEN6_CLIP_MODE_NORMAL                         (0 << 13)
 # define GEN6_CLIP_MODE_REJECT_ALL                     (3 << 13)
 # define GEN6_CLIP_MODE_ACCEPT_ALL                     (4 << 13)
 # define GEN6_CLIP_PERSPECTIVE_DIVIDE_DISABLE          (1 << 9)
-# define GEN6_CLIP_BARYCENTRIC_ENABLE                  (1 << 8)
+# define GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE  (1 << 8)
 # define GEN6_CLIP_TRI_PROVOKE_SHIFT                   4
 # define GEN6_CLIP_LINE_PROVOKE_SHIFT                  2
 # define GEN6_CLIP_TRIFAN_PROVOKE_SHIFT                        0
 # define GEN6_CLIP_MAX_POINT_WIDTH_SHIFT               6
 # define GEN6_CLIP_FORCE_ZERO_RTAINDEX                 (1 << 5)
 
-#define CMD_3D_SF_STATE                                0x7813 /* GEN6+ */
-/* DW1 */
+#define _3DSTATE_SF                            0x7813 /* GEN6+ */
+/* DW1 (for gen6) */
 # define GEN6_SF_NUM_OUTPUTS_SHIFT                     22
 # define GEN6_SF_SWIZZLE_ENABLE                                (1 << 21)
 # define GEN6_SF_POINT_SPRITE_LOWERLEFT                        (1 << 20)
 # define ATTRIBUTE_0_CONST_SOURCE_SHIFT                        9
 # define ATTRIBUTE_0_SWIZZLE_SHIFT                     6
 # define ATTRIBUTE_0_SOURCE_SHIFT                      0
+
+# define ATTRIBUTE_SWIZZLE_INPUTATTR                    0
+# define ATTRIBUTE_SWIZZLE_INPUTATTR_FACING             1
+# define ATTRIBUTE_SWIZZLE_INPUTATTR_W                  2
+# define ATTRIBUTE_SWIZZLE_INPUTATTR_FACING_W           3
+# define ATTRIBUTE_SWIZZLE_SHIFT                        6
+
 /* DW16: Point sprite texture coordinate enables */
 /* DW17: Constant interpolation enables */
 /* DW18: attr 0-7 wrap shortest enables */
 /* DW19: attr 8-16 wrap shortest enables */
 
-#define CMD_3D_WM_STATE                      0x7814 /* GEN6+ */
+/* On GEN7, many fields of 3DSTATE_SF were split out into a new command:
+ * 3DSTATE_SBE.  The remaining fields live in different DWords, but retain
+ * the same bit-offset.  The only new field:
+ */
+/* GEN7/DW1: */
+# define GEN7_SF_DEPTH_BUFFER_SURFACE_FORMAT_SHIFT     12
+
+#define _3DSTATE_SBE                           0x781F /* GEN7+ */
+/* DW1 */
+# define GEN7_SBE_SWIZZLE_CONTROL_MODE                 (1 << 28)
+# define GEN7_SBE_NUM_OUTPUTS_SHIFT                    22
+# define GEN7_SBE_SWIZZLE_ENABLE                       (1 << 21)
+# define GEN7_SBE_POINT_SPRITE_LOWERLEFT               (1 << 20)
+# define GEN7_SBE_URB_ENTRY_READ_LENGTH_SHIFT          11
+# define GEN7_SBE_URB_ENTRY_READ_OFFSET_SHIFT          4
+/* DW2-9: Attribute setup (same as DW8-15 of gen6 _3DSTATE_SF) */
+/* DW10: Point sprite texture coordinate enables */
+/* DW11: Constant interpolation enables */
+/* DW12: attr 0-7 wrap shortest enables */
+/* DW13: attr 8-16 wrap shortest enables */
+
+enum brw_wm_barycentric_interp_mode {
+   BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC                = 0,
+   BRW_WM_PERSPECTIVE_CENTROID_BARYCENTRIC     = 1,
+   BRW_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC       = 2,
+   BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC     = 3,
+   BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC  = 4,
+   BRW_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC    = 5,
+   BRW_WM_BARYCENTRIC_INTERP_MODE_COUNT  = 6
+};
+
+#define _3DSTATE_WM                            0x7814 /* GEN6+ */
 /* DW1: kernel pointer */
 /* DW2 */
 # define GEN6_WM_SPF_MODE                              (1 << 31)
 # define GEN6_WM_VECTOR_MASK_ENABLE                    (1 << 30)
 # define GEN6_WM_SAMPLER_COUNT_SHIFT                   27
 # define GEN6_WM_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
+# define GEN6_WM_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
+# define GEN6_WM_FLOATING_POINT_MODE_ALT               (1 << 16)
 /* DW3: scratch space */
 /* DW4 */
 # define GEN6_WM_STATISTICS_ENABLE                     (1 << 31)
 # define GEN6_WM_PERSPECTIVE_SAMPLE_BARYCENTRIC                (1 << 12)
 # define GEN6_WM_PERSPECTIVE_CENTROID_BARYCENTRIC      (1 << 11)
 # define GEN6_WM_PERSPECTIVE_PIXEL_BARYCENTRIC         (1 << 10)
+# define GEN6_WM_BARYCENTRIC_INTERPOLATION_MODE_SHIFT   10
 # define GEN6_WM_POINT_RASTRULE_UPPER_RIGHT            (1 << 9)
 # define GEN6_WM_MSRAST_OFF_PIXEL                      (0 << 1)
 # define GEN6_WM_MSRAST_OFF_PATTERN                    (1 << 1)
 /* DW7: kernel 1 pointer */
 /* DW8: kernel 2 pointer */
 
-#define CMD_3D_CONSTANT_VS_STATE             0x7815 /* GEN6+ */
-#define CMD_3D_CONSTANT_GS_STATE             0x7816 /* GEN6+ */
-#define CMD_3D_CONSTANT_PS_STATE             0x7817 /* GEN6+ */
+#define _3DSTATE_CONSTANT_VS                 0x7815 /* GEN6+ */
+#define _3DSTATE_CONSTANT_GS                 0x7816 /* GEN6+ */
+#define _3DSTATE_CONSTANT_PS                 0x7817 /* GEN6+ */
 # define GEN6_CONSTANT_BUFFER_3_ENABLE                 (1 << 15)
 # define GEN6_CONSTANT_BUFFER_2_ENABLE                 (1 << 14)
 # define GEN6_CONSTANT_BUFFER_1_ENABLE                 (1 << 13)
 # define GEN6_CONSTANT_BUFFER_0_ENABLE                 (1 << 12)
 
-#define CMD_3D_SAMPLE_MASK                     0x7818 /* GEN6+ */
+#define _3DSTATE_CONSTANT_HS                  0x7819 /* GEN7+ */
+#define _3DSTATE_CONSTANT_DS                  0x781A /* GEN7+ */
 
-#define CMD_DRAW_RECT                 0x7900
-#define CMD_BLEND_CONSTANT_COLOR      0x7901
-#define CMD_CHROMA_KEY                0x7904
-#define CMD_DEPTH_BUFFER              0x7905
-#define CMD_POLY_STIPPLE_OFFSET       0x7906
-#define CMD_POLY_STIPPLE_PATTERN      0x7907
-#define CMD_LINE_STIPPLE_PATTERN      0x7908
-#define CMD_GLOBAL_DEPTH_OFFSET_CLAMP 0x7909
-#define CMD_AA_LINE_PARAMETERS        0x790a
+#define _3DSTATE_STREAMOUT                    0x781e /* GEN7+ */
+/* DW1 */
+# define SO_FUNCTION_ENABLE                            (1 << 31)
+# define SO_RENDERING_DISABLE                          (1 << 30)
+/* This selects which incoming rendering stream goes down the pipeline.  The
+ * rendering stream is 0 if not defined by special cases in the GS state.
+ */
+# define SO_RENDER_STREAM_SELECT_SHIFT                 27
+# define SO_RENDER_STREAM_SELECT_MASK                  INTEL_MASK(28, 27)
+/* Controls reordering of TRISTRIP_* elements in stream output (not rendering).
+ */
+# define SO_REORDER_TRAILING                           (1 << 26)
+/* Controls SO_NUM_PRIMS_WRITTEN_* and SO_PRIM_STORAGE_* */
+# define SO_STATISTICS_ENABLE                          (1 << 25)
+# define SO_BUFFER_ENABLE(n)                           (1 << (8 + (n)))
+/* DW2 */
+# define SO_STREAM_3_VERTEX_READ_OFFSET_SHIFT          29
+# define SO_STREAM_3_VERTEX_READ_OFFSET_MASK           INTEL_MASK(29, 29)
+# define SO_STREAM_3_VERTEX_READ_LENGTH_SHIFT          24
+# define SO_STREAM_3_VERTEX_READ_LENGTH_MASK           INTEL_MASK(28, 24)
+# define SO_STREAM_2_VERTEX_READ_OFFSET_SHIFT          21
+# define SO_STREAM_2_VERTEX_READ_OFFSET_MASK           INTEL_MASK(21, 21)
+# define SO_STREAM_2_VERTEX_READ_LENGTH_SHIFT          16
+# define SO_STREAM_2_VERTEX_READ_LENGTH_MASK           INTEL_MASK(20, 16)
+# define SO_STREAM_1_VERTEX_READ_OFFSET_SHIFT          13
+# define SO_STREAM_1_VERTEX_READ_OFFSET_MASK           INTEL_MASK(13, 13)
+# define SO_STREAM_1_VERTEX_READ_LENGTH_SHIFT          8
+# define SO_STREAM_1_VERTEX_READ_LENGTH_MASK           INTEL_MASK(12, 8)
+# define SO_STREAM_0_VERTEX_READ_OFFSET_SHIFT          5
+# define SO_STREAM_0_VERTEX_READ_OFFSET_MASK           INTEL_MASK(5, 5)
+# define SO_STREAM_0_VERTEX_READ_LENGTH_SHIFT          0
+# define SO_STREAM_0_VERTEX_READ_LENGTH_MASK           INTEL_MASK(4, 0)
+
+/* 3DSTATE_WM for Gen7 */
+/* DW1 */
+# define GEN7_WM_STATISTICS_ENABLE                     (1 << 31)
+# define GEN7_WM_DEPTH_CLEAR                           (1 << 30)
+# define GEN7_WM_DISPATCH_ENABLE                       (1 << 29)
+# define GEN6_WM_DEPTH_RESOLVE                         (1 << 28)
+# define GEN7_WM_HIERARCHICAL_DEPTH_RESOLVE            (1 << 27)
+# define GEN7_WM_KILL_ENABLE                           (1 << 25)
+# define GEN7_WM_PSCDEPTH_OFF                          (0 << 23)
+# define GEN7_WM_PSCDEPTH_ON                           (1 << 23)
+# define GEN7_WM_PSCDEPTH_ON_GE                                (2 << 23)
+# define GEN7_WM_PSCDEPTH_ON_LE                                (3 << 23)
+# define GEN7_WM_USES_SOURCE_DEPTH                     (1 << 20)
+# define GEN7_WM_USES_SOURCE_W                         (1 << 19)
+# define GEN7_WM_POSITION_ZW_PIXEL                     (0 << 17)
+# define GEN7_WM_POSITION_ZW_CENTROID                  (2 << 17)
+# define GEN7_WM_POSITION_ZW_SAMPLE                    (3 << 17)
+# define GEN7_WM_BARYCENTRIC_INTERPOLATION_MODE_SHIFT   11
+# define GEN7_WM_USES_INPUT_COVERAGE_MASK              (1 << 10)
+# define GEN7_WM_LINE_END_CAP_AA_WIDTH_0_5             (0 << 8)
+# define GEN7_WM_LINE_END_CAP_AA_WIDTH_1_0             (1 << 8)
+# define GEN7_WM_LINE_END_CAP_AA_WIDTH_2_0             (2 << 8)
+# define GEN7_WM_LINE_END_CAP_AA_WIDTH_4_0             (3 << 8)
+# define GEN7_WM_LINE_AA_WIDTH_0_5                     (0 << 6)
+# define GEN7_WM_LINE_AA_WIDTH_1_0                     (1 << 6)
+# define GEN7_WM_LINE_AA_WIDTH_2_0                     (2 << 6)
+# define GEN7_WM_LINE_AA_WIDTH_4_0                     (3 << 6)
+# define GEN7_WM_POLYGON_STIPPLE_ENABLE                        (1 << 4)
+# define GEN7_WM_LINE_STIPPLE_ENABLE                   (1 << 3)
+# define GEN7_WM_POINT_RASTRULE_UPPER_RIGHT            (1 << 2)
+# define GEN7_WM_MSRAST_OFF_PIXEL                      (0 << 0)
+# define GEN7_WM_MSRAST_OFF_PATTERN                    (1 << 0)
+# define GEN7_WM_MSRAST_ON_PIXEL                       (2 << 0)
+# define GEN7_WM_MSRAST_ON_PATTERN                     (3 << 0)
+/* DW2 */
+# define GEN7_WM_MSDISPMODE_PERPIXEL                   (1 << 31)
 
-#define CMD_GS_SVB_INDEX                       0x790b /* CTG+ */
+#define _3DSTATE_PS                            0x7820 /* GEN7+ */
+/* DW1: kernel pointer */
+/* DW2 */
+# define GEN7_PS_SPF_MODE                              (1 << 31)
+# define GEN7_PS_VECTOR_MASK_ENABLE                    (1 << 30)
+# define GEN7_PS_SAMPLER_COUNT_SHIFT                   27
+# define GEN7_PS_BINDING_TABLE_ENTRY_COUNT_SHIFT       18
+# define GEN7_PS_FLOATING_POINT_MODE_IEEE_754          (0 << 16)
+# define GEN7_PS_FLOATING_POINT_MODE_ALT               (1 << 16)
+/* DW3: scratch space */
+/* DW4 */
+# define GEN7_PS_MAX_THREADS_SHIFT                     24
+# define GEN7_PS_PUSH_CONSTANT_ENABLE                  (1 << 11)
+# define GEN7_PS_ATTRIBUTE_ENABLE                      (1 << 10)
+# define GEN7_PS_OMASK_TO_RENDER_TARGET                        (1 << 9)
+# define GEN7_PS_DUAL_SOURCE_BLEND_ENABLE              (1 << 7)
+# define GEN7_PS_POSOFFSET_NONE                                (0 << 3)
+# define GEN7_PS_POSOFFSET_CENTROID                    (2 << 3)
+# define GEN7_PS_POSOFFSET_SAMPLE                      (3 << 3)
+# define GEN7_PS_32_DISPATCH_ENABLE                    (1 << 2)
+# define GEN7_PS_16_DISPATCH_ENABLE                    (1 << 1)
+# define GEN7_PS_8_DISPATCH_ENABLE                     (1 << 0)
+/* DW5 */
+# define GEN7_PS_DISPATCH_START_GRF_SHIFT_0            16
+# define GEN7_PS_DISPATCH_START_GRF_SHIFT_1            8
+# define GEN7_PS_DISPATCH_START_GRF_SHIFT_2            0
+/* DW6: kernel 1 pointer */
+/* DW7: kernel 2 pointer */
+
+#define _3DSTATE_SAMPLE_MASK                   0x7818 /* GEN6+ */
+
+#define _3DSTATE_DRAWING_RECTANGLE             0x7900
+#define _3DSTATE_BLEND_CONSTANT_COLOR          0x7901
+#define _3DSTATE_CHROMA_KEY                    0x7904
+#define _3DSTATE_DEPTH_BUFFER                  0x7905 /* GEN4-6 */
+#define _3DSTATE_POLY_STIPPLE_OFFSET           0x7906
+#define _3DSTATE_POLY_STIPPLE_PATTERN          0x7907
+#define _3DSTATE_LINE_STIPPLE_PATTERN          0x7908
+#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP     0x7909
+#define _3DSTATE_AA_LINE_PARAMETERS            0x790a /* G45+ */
+
+#define _3DSTATE_GS_SVB_INDEX                  0x790b /* CTG+ */
 /* DW1 */
 # define SVB_INDEX_SHIFT                               29
 # define SVB_LOAD_INTERNAL_VERTEX_COUNT                        (1 << 0) /* SNB+ */
 /* DW2: SVB index */
 /* DW3: SVB maximum index */
 
-#define CMD_3D_MULTISAMPLE                     0x790d /* SNB+ */
+#define _3DSTATE_MULTISAMPLE                   0x790d /* GEN6+ */
 /* DW1 */
 # define MS_PIXEL_LOCATION_CENTER                      (0 << 4)
 # define MS_PIXEL_LOCATION_UPPER_LEFT                  (1 << 4)
 # define MS_NUMSAMPLES_4                               (2 << 1)
 # define MS_NUMSAMPLES_8                               (3 << 1)
 
-#define CMD_3D_CLEAR_PARAMS                    0x7910 /* ILK+ */
+#define _3DSTATE_STENCIL_BUFFER                        0x790e /* ILK, SNB */
+#define _3DSTATE_HIER_DEPTH_BUFFER             0x790f /* ILK, SNB */
+
+#define GEN7_3DSTATE_CLEAR_PARAMS              0x7804
+#define GEN7_3DSTATE_DEPTH_BUFFER              0x7805
+#define GEN7_3DSTATE_STENCIL_BUFFER            0x7806
+#define GEN7_3DSTATE_HIER_DEPTH_BUFFER         0x7807
+
+#define _3DSTATE_CLEAR_PARAMS                  0x7910 /* ILK, SNB */
 # define DEPTH_CLEAR_VALID                             (1 << 15)
 /* DW1: depth clear value */
 
-#define CMD_PIPE_CONTROL              0x7a00
+#define _3DSTATE_SO_DECL_LIST                  0x7917 /* GEN7+ */
+/* DW1 */
+# define SO_STREAM_TO_BUFFER_SELECTS_3_SHIFT           12
+# define SO_STREAM_TO_BUFFER_SELECTS_3_MASK            INTEL_MASK(15, 12)
+# define SO_STREAM_TO_BUFFER_SELECTS_2_SHIFT           8
+# define SO_STREAM_TO_BUFFER_SELECTS_2_MASK            INTEL_MASK(11, 8)
+# define SO_STREAM_TO_BUFFER_SELECTS_1_SHIFT           4
+# define SO_STREAM_TO_BUFFER_SELECTS_1_MASK            INTEL_MASK(7, 4)
+# define SO_STREAM_TO_BUFFER_SELECTS_0_SHIFT           0
+# define SO_STREAM_TO_BUFFER_SELECTS_0_MASK            INTEL_MASK(3, 0)
+/* DW2 */
+# define SO_NUM_ENTRIES_3_SHIFT                                24
+# define SO_NUM_ENTRIES_3_MASK                         INTEL_MASK(31, 24)
+# define SO_NUM_ENTRIES_2_SHIFT                                16
+# define SO_NUM_ENTRIES_2_MASK                         INTEL_MASK(23, 16)
+# define SO_NUM_ENTRIES_1_SHIFT                                8
+# define SO_NUM_ENTRIES_1_MASK                         INTEL_MASK(15, 8)
+# define SO_NUM_ENTRIES_0_SHIFT                                0
+# define SO_NUM_ENTRIES_0_MASK                         INTEL_MASK(7, 0)
+
+/* SO_DECL DW0 */
+# define SO_DECL_OUTPUT_BUFFER_SLOT_SHIFT              12
+# define SO_DECL_OUTPUT_BUFFER_SLOT_MASK               INTEL_MASK(13, 12)
+# define SO_DECL_HOLE_FLAG                             (1 << 11)
+# define SO_DECL_REGISTER_INDEX_SHIFT                  4
+# define SO_DECL_REGISTER_INDEX_MASK                   INTEL_MASK(9, 4)
+# define SO_DECL_COMPONENT_MASK_SHIFT                  0
+# define SO_DECL_COMPONENT_MASK_MASK                   INTEL_MASK(3, 0)
+
+#define _3DSTATE_SO_BUFFER                    0x7918 /* GEN7+ */
+/* DW1 */
+# define SO_BUFFER_INDEX_SHIFT                         29
+# define SO_BUFFER_INDEX_MASK                          INTEL_MASK(30, 29)
+# define SO_BUFFER_PITCH_SHIFT                         0
+# define SO_BUFFER_PITCH_MASK                          INTEL_MASK(11, 0)
+/* DW2: start address */
+/* DW3: end address. */
 
-#define CMD_3D_PRIM                   0x7b00
+#define CMD_PIPE_CONTROL              0x7a00
 
 #define CMD_MI_FLUSH                  0x0200
 
 
-/* Various values from the R0 vertex header:
+/* Bitfields for the URB_WRITE message, DW2 of message header: */
+#define URB_WRITE_PRIM_END             0x1
+#define URB_WRITE_PRIM_START           0x2
+#define URB_WRITE_PRIM_TYPE_SHIFT      2
+
+
+/* Maximum number of entries that can be addressed using a binding table
+ * pointer of type SURFTYPE_BUFFER
  */
-#define R02_PRIM_END    0x1
-#define R02_PRIM_START  0x2
+#define BRW_MAX_NUM_BUFFER_ENTRIES     (1 << 27)
 
 #include "intel_chipset.h"