r300: add hw accelerated support for different vertex data formats
[mesa.git] / src / mesa / drivers / dri / r300 / r300_reg.h
index 999e8bc1b483c1b6f01e534d3b2d0012fb5beb3e..c22616b95f681214fbecfa8ddc99d310c4888108 100644 (file)
@@ -64,7 +64,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define R300_SE_VPORT_ZSCALE                0x1DA8
 #define R300_SE_VPORT_ZOFFSET               0x1DAC
 
-
+#define R300_VAP_PORT_IDX0                 0x2040
 /*
  * Vertex Array Processing (VAP) Control
  */
@@ -656,7 +656,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R300_GB_FOG_SELECT_C3A           (3 << 0)
 #      define R300_GB_FOG_SELECT_1_1_W         (4 << 0)
 #      define R300_GB_FOG_SELECT_Z             (5 << 0)
-#      define R300_GB_DEPTH_SELECT_Z           (0 << 3
+#      define R300_GB_DEPTH_SELECT_Z           (0 << 3)
 #      define R300_GB_DEPTH_SELECT_1_1_W       (1 << 3)
 #      define R300_GB_W_SELECT_1_W             (0 << 4)
 #      define R300_GB_W_SELECT_1               (1 << 4)
@@ -730,8 +730,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define R500_RS_IP_TEX_PTR_Q_SHIFT                     18
 #define R500_RS_IP_COL_PTR_SHIFT                       24
 #define R500_RS_IP_COL_FMT_SHIFT                       27
-#      define R500_RS_COL_PTR(x)                       (x << 24)
-#       define R500_RS_COL_FMT(x)                       (x << 27)
+#      define R500_RS_COL_PTR(x)                       ((x) << 24)
+#       define R500_RS_COL_FMT(x)                       ((x) << 27)
 /* gap */
 #define R500_RS_IP_OFFSET_DIS                          (0 << 31)
 #define R500_RS_IP_OFFSET_EN                           (1 << 31)
@@ -1172,9 +1172,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define R300_RS_IP_3                                   0x431C
 #       define R300_RS_INTERP_SRC_SHIFT          2 /* TODO: check for removal */
 #       define R300_RS_INTERP_SRC_MASK           (7 << 2) /* TODO: check for removal */
-#      define R300_RS_TEX_PTR(x)                       (x << 0)
-#      define R300_RS_COL_PTR(x)                       (x << 6)
-#      define R300_RS_COL_FMT(x)                       (x << 9)
+#      define R300_RS_TEX_PTR(x)                       ((x) << 0)
+#      define R300_RS_COL_PTR(x)                       ((x) << 6)
+#      define R300_RS_COL_FMT(x)                       ((x) << 9)
 #      define R300_RS_COL_FMT_RGBA                     0
 #      define R300_RS_COL_FMT_RGB0                     1
 #      define R300_RS_COL_FMT_RGB1                     2
@@ -1184,10 +1184,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R300_RS_COL_FMT_111A                     8
 #      define R300_RS_COL_FMT_1110                     9
 #      define R300_RS_COL_FMT_1111                     10
-#      define R300_RS_SEL_S(x)                         (x << 13)
-#      define R300_RS_SEL_T(x)                         (x << 16)
-#      define R300_RS_SEL_R(x)                         (x << 19)
-#      define R300_RS_SEL_Q(x)                         (x << 22)
+#      define R300_RS_SEL_S(x)                         ((x) << 13)
+#      define R300_RS_SEL_T(x)                         ((x) << 16)
+#      define R300_RS_SEL_R(x)                         ((x) << 19)
+#      define R300_RS_SEL_Q(x)                         ((x) << 22)
 #      define R300_RS_SEL_C0                           0
 #      define R300_RS_SEL_C1                           1
 #      define R300_RS_SEL_C2                           2
@@ -1224,6 +1224,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define R500_RS_INST_COL_ADDR_SHIFT                    18
 #define R500_RS_INST_TEX_ADJ                           (1 << 25)
 #define R500_RS_INST_W_CN                              (1 << 26)
+#define R500_RS_INST_TEX_ID(x)                         ((x) << R500_RS_INST_TEX_ID_SHIFT)
+#define R500_RS_INST_TEX_ADDR(x)                       ((x) << R500_RS_INST_TEX_ADDR_SHIFT)
+#define R500_RS_INST_COL_ID(x)                         ((x) << R500_RS_INST_COL_ID_SHIFT)
+#define R500_RS_INST_COL_ADDR(x)                       ((x) << R500_RS_INST_COL_ADDR_SHIFT)
 
 /* These DWORDs control how vertex data is routed into fragment program
  * registers, after interpolators.
@@ -1239,9 +1243,11 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R300_RS_INST_TEX_ID(x)           ((x) << 0)
 #      define R300_RS_INST_TEX_CN_WRITE        (1 << 3)
 #      define R300_RS_INST_TEX_ADDR_SHIFT      6
+#      define R300_RS_INST_TEX_ADDR(x)         ((x) << R300_RS_INST_TEX_ADDR_SHIFT)
 #      define R300_RS_INST_COL_ID(x)           ((x) << 11)
 #      define R300_RS_INST_COL_CN_WRITE        (1 << 14)
 #      define R300_RS_INST_COL_ADDR_SHIFT      17
+#      define R300_RS_INST_COL_ADDR(x)         ((x) << R300_RS_INST_COL_ADDR_SHIFT)
 #      define R300_RS_INST_TEX_ADJ             (1 << 22)
 #      define R300_RS_COL_BIAS_UNUSED_SHIFT    23
 
@@ -1366,25 +1372,27 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_TX_WRAP_S_MASK               (7 << 0)
 #       define R300_TX_WRAP_T_SHIFT              3
 #       define R300_TX_WRAP_T_MASK               (7 << 3)
-#       define R300_TX_WRAP_Q_SHIFT              6
-#       define R300_TX_WRAP_Q_MASK               (7 << 6)
+#       define R300_TX_WRAP_R_SHIFT              6
+#       define R300_TX_WRAP_R_MASK               (7 << 6)
 #      define R300_TX_MAG_FILTER_4              (0 << 9)
 #       define R300_TX_MAG_FILTER_NEAREST        (1 << 9)
 #       define R300_TX_MAG_FILTER_LINEAR         (2 << 9)
+#       define R300_TX_MAG_FILTER_ANISO          (3 << 9)
 #       define R300_TX_MAG_FILTER_MASK           (3 << 9)
 #       define R300_TX_MIN_FILTER_NEAREST        (1 << 11)
 #       define R300_TX_MIN_FILTER_LINEAR         (2 << 11)
+#      define R300_TX_MIN_FILTER_ANISO          (3 << 11)
 #      define R300_TX_MIN_FILTER_MASK           (3 << 11)
 #      define R300_TX_MIN_FILTER_MIP_NONE       (0 << 13)
 #      define R300_TX_MIN_FILTER_MIP_NEAREST    (1 << 13)
 #      define R300_TX_MIN_FILTER_MIP_LINEAR     (2 << 13)
 #      define R300_TX_MIN_FILTER_MIP_MASK       (3 << 13)
-#      define R300_TX_MAX_ANISO_1_TO_1  (0 << 21)
-#      define R300_TX_MAX_ANISO_2_TO_1  (2 << 21)
-#      define R300_TX_MAX_ANISO_4_TO_1  (4 << 21)
-#      define R300_TX_MAX_ANISO_8_TO_1  (6 << 21)
-#      define R300_TX_MAX_ANISO_16_TO_1 (8 << 21)
-#      define R300_TX_MAX_ANISO_MASK    (14 << 21)
+#      define R300_TX_MAX_ANISO_1_TO_1          (0 << 21)
+#      define R300_TX_MAX_ANISO_2_TO_1          (1 << 21)
+#      define R300_TX_MAX_ANISO_4_TO_1          (2 << 21)
+#      define R300_TX_MAX_ANISO_8_TO_1          (3 << 21)
+#      define R300_TX_MAX_ANISO_16_TO_1         (4 << 21)
+#      define R300_TX_MAX_ANISO_MASK            (7 << 21)
 
 #define R300_TX_FILTER1_0                      0x4440
 #      define R300_CHROMA_KEY_MODE_DISABLE    0
@@ -1392,7 +1400,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R300_CHROMA_KEY_BLEND           2
 #      define R300_MC_ROUND_NORMAL            (0<<2)
 #      define R300_MC_ROUND_MPEG4             (1<<2)
-#      define R300_LOD_BIAS_MASK           0x1fff
+#      define R300_LOD_BIAS_SHIFT             3
+#      define R300_LOD_BIAS_MASK              0x1ff8
 #      define R300_EDGE_ANISO_EDGE_DIAG       (0<<13)
 #      define R300_EDGE_ANISO_EDGE_ONLY       (1<<13)
 #      define R300_MC_COORD_TRUNCATE_DISABLE  (0<<14)
@@ -1455,8 +1464,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R300_TX_FORMAT_X32                   0x1e
 
        /* 0x16 - some 16 bit green format.. ?? */
-#      define R300_TX_FORMAT_UNK25                (1 << 25) /* no swizzle */
-#      define R300_TX_FORMAT_CUBIC_MAP            (1 << 26)
+#      define R300_TX_FORMAT_3D                   (1 << 25)
+#      define R300_TX_FORMAT_CUBIC_MAP            (2 << 25)
 
        /* gap */
        /* Floating point formats */
@@ -1522,6 +1531,13 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #      define R500_SEL_FILTER4_TC3              (3 << 18)
 
 #define R300_TX_OFFSET_0                    0x4540
+#define R300_TX_OFFSET_1                    0x4544
+#define R300_TX_OFFSET_2                    0x4548
+#define R300_TX_OFFSET_3                    0x454C
+#define R300_TX_OFFSET_4                    0x4550
+#define R300_TX_OFFSET_5                    0x4554
+#define R300_TX_OFFSET_6                    0x4558
+#define R300_TX_OFFSET_7                    0x455C
        /* BEGIN: Guess from R200 */
 #       define R300_TXO_ENDIAN_NO_SWAP           (0 << 0)
 #       define R300_TXO_ENDIAN_BYTE_SWAP         (1 << 0)
@@ -2246,7 +2262,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 /* 3D ROP Control. Stalls the 2d/3d datapath until it is idle. */
 #define R300_RB3D_ROPCNTL                             0x4e18
-/* TODO: fill in content here */
+#      define R300_RB3D_ROPCNTL_ROP_ENABLE            0x00000004
+#      define R300_RB3D_ROPCNTL_ROP_MASK              (15 << 8)
+#      define R300_RB3D_ROPCNTL_ROP_SHIFT             8
 
 /* Color Compare Flip. Stalls the 2d/3d datapath until it is idle. */
 #define R300_RB3D_CLRCMP_FLIPE                        0x4e1c
@@ -2414,6 +2432,12 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 /* Z Buffer Clear Value */
 #define R300_ZB_DEPTHCLEARVALUE                  0x4f28
 
+#define R300_ZB_ZMASK_OFFSET                     0x4f30
+#define R300_ZB_ZMASK_PITCH                      0x4f34
+#define R300_ZB_ZMASK_WRINDEX                    0x4f38
+#define R300_ZB_ZMASK_DWORD                      0x4f3c
+#define R300_ZB_ZMASK_RDINDEX                    0x4f40
+
 /* Hierarchical Z Memory Offset */
 #define R300_ZB_HIZ_OFFSET                       0x4f44
 
@@ -2700,8 +2724,9 @@ enum {
 #   define R500_ALPHA_OP_COS                           13
 #   define R500_ALPHA_OP_MDH                           14
 #   define R500_ALPHA_OP_MDV                           15
-#   define R500_ALPHA_ADDRD(x)                         (x << 4)
+#   define R500_ALPHA_ADDRD(x)                         ((x) << 4)
 #   define R500_ALPHA_ADDRD_REL                                (1 << 11)
+#  define R500_ALPHA_SEL_A_SHIFT                       12
 #   define R500_ALPHA_SEL_A_SRC0                       (0 << 12)
 #   define R500_ALPHA_SEL_A_SRC1                       (1 << 12)
 #   define R500_ALPHA_SEL_A_SRC2                       (2 << 12)
@@ -2718,6 +2743,7 @@ enum {
 #   define R500_ALPHA_MOD_A_NEG                                (1 << 17)
 #   define R500_ALPHA_MOD_A_ABS                                (2 << 17)
 #   define R500_ALPHA_MOD_A_NAB                                (3 << 17)
+#  define R500_ALPHA_SEL_B_SHIFT                       19
 #   define R500_ALPHA_SEL_B_SRC0                       (0 << 19)
 #   define R500_ALPHA_SEL_B_SRC1                       (1 << 19)
 #   define R500_ALPHA_SEL_B_SRC2                       (2 << 19)
@@ -2742,16 +2768,16 @@ enum {
 #   define R500_ALPHA_OMOD_DIV_4                       (5 << 26)
 #   define R500_ALPHA_OMOD_DIV_8                       (6 << 26)
 #   define R500_ALPHA_OMOD_DISABLE                     (7 << 26)
-#   define R500_ALPHA_TARGET(x)                                (x << 29)
+#   define R500_ALPHA_TARGET(x)                                ((x) << 29)
 #   define R500_ALPHA_W_OMASK                          (1 << 31)
 #define R500_US_ALU_ALPHA_ADDR_0                       0x9800
-#   define R500_ALPHA_ADDR0(x)                         (x << 0)
+#   define R500_ALPHA_ADDR0(x)                         ((x) << 0)
 #   define R500_ALPHA_ADDR0_CONST                      (1 << 8)
 #   define R500_ALPHA_ADDR0_REL                                (1 << 9)
-#   define R500_ALPHA_ADDR1(x)                         (x << 10)
+#   define R500_ALPHA_ADDR1(x)                         ((x) << 10)
 #   define R500_ALPHA_ADDR1_CONST                      (1 << 18)
 #   define R500_ALPHA_ADDR1_REL                                (1 << 19)
-#   define R500_ALPHA_ADDR2(x)                         (x << 20)
+#   define R500_ALPHA_ADDR2(x)                         ((x) << 20)
 #   define R500_ALPHA_ADDR2_CONST                      (1 << 28)
 #   define R500_ALPHA_ADDR2_REL                                (1 << 29)
 #   define R500_ALPHA_SRCP_OP_1_MINUS_2A0              (0 << 30)
@@ -2772,8 +2798,9 @@ enum {
 #   define R500_ALU_RGBA_OP_SOP                                (10 << 0)
 #   define R500_ALU_RGBA_OP_MDH                                (11 << 0)
 #   define R500_ALU_RGBA_OP_MDV                                (12 << 0)
-#   define R500_ALU_RGBA_ADDRD(x)                      (x << 4)
+#   define R500_ALU_RGBA_ADDRD(x)                      ((x) << 4)
 #   define R500_ALU_RGBA_ADDRD_REL                     (1 << 11)
+#  define R500_ALU_RGBA_SEL_C_SHIFT                    12
 #   define R500_ALU_RGBA_SEL_C_SRC0                    (0 << 12)
 #   define R500_ALU_RGBA_SEL_C_SRC1                    (1 << 12)
 #   define R500_ALU_RGBA_SEL_C_SRC2                    (2 << 12)
@@ -2806,6 +2833,7 @@ enum {
 #   define R500_ALU_RGBA_MOD_C_NEG                     (1 << 23)
 #   define R500_ALU_RGBA_MOD_C_ABS                     (2 << 23)
 #   define R500_ALU_RGBA_MOD_C_NAB                     (3 << 23)
+#  define R500_ALU_RGBA_ALPHA_SEL_C_SHIFT              25
 #   define R500_ALU_RGBA_ALPHA_SEL_C_SRC0              (0 << 25)
 #   define R500_ALU_RGBA_ALPHA_SEL_C_SRC1              (1 << 25)
 #   define R500_ALU_RGBA_ALPHA_SEL_C_SRC2              (2 << 25)
@@ -2823,6 +2851,7 @@ enum {
 #   define R500_ALU_RGBA_ALPHA_MOD_C_ABS               (2 << 30)
 #   define R500_ALU_RGBA_ALPHA_MOD_C_NAB               (3 << 30)
 #define R500_US_ALU_RGB_INST_0                         0xa000
+#  define R500_ALU_RGB_SEL_A_SHIFT                     0
 #   define R500_ALU_RGB_SEL_A_SRC0                     (0 << 0)
 #   define R500_ALU_RGB_SEL_A_SRC1                     (1 << 0)
 #   define R500_ALU_RGB_SEL_A_SRC2                     (2 << 0)
@@ -2855,6 +2884,7 @@ enum {
 #   define R500_ALU_RGB_MOD_A_NEG                      (1 << 11)
 #   define R500_ALU_RGB_MOD_A_ABS                      (2 << 11)
 #   define R500_ALU_RGB_MOD_A_NAB                      (3 << 11)
+#  define R500_ALU_RGB_SEL_B_SHIFT                     13
 #   define R500_ALU_RGB_SEL_B_SRC0                     (0 << 13)
 #   define R500_ALU_RGB_SEL_B_SRC1                     (1 << 13)
 #   define R500_ALU_RGB_SEL_B_SRC2                     (2 << 13)
@@ -2895,16 +2925,16 @@ enum {
 #   define R500_ALU_RGB_OMOD_DIV_4                     (5 << 26)
 #   define R500_ALU_RGB_OMOD_DIV_8                     (6 << 26)
 #   define R500_ALU_RGB_OMOD_DISABLE                   (7 << 26)
-#   define R500_ALU_RGB_TARGET(x)                      (x << 29)
+#   define R500_ALU_RGB_TARGET(x)                      ((x) << 29)
 #   define R500_ALU_RGB_WMASK                          (1 << 31)
 #define R500_US_ALU_RGB_ADDR_0                         0x9000
-#   define R500_RGB_ADDR0(x)                           (x << 0)
+#   define R500_RGB_ADDR0(x)                           ((x) << 0)
 #   define R500_RGB_ADDR0_CONST                                (1 << 8)
 #   define R500_RGB_ADDR0_REL                          (1 << 9)
-#   define R500_RGB_ADDR1(x)                           (x << 10)
+#   define R500_RGB_ADDR1(x)                           ((x) << 10)
 #   define R500_RGB_ADDR1_CONST                                (1 << 18)
 #   define R500_RGB_ADDR1_REL                          (1 << 19)
-#   define R500_RGB_ADDR2(x)                           (x << 20)
+#   define R500_RGB_ADDR2(x)                           ((x) << 20)
 #   define R500_RGB_ADDR2_CONST                                (1 << 28)
 #   define R500_RGB_ADDR2_REL                          (1 << 29)
 #   define R500_RGB_SRCP_OP_1_MINUS_2RGB0              (0 << 30)
@@ -2912,6 +2942,7 @@ enum {
 #   define R500_RGB_SRCP_OP_RGB1_PLUS_RGB0             (2 << 30)
 #   define R500_RGB_SRCP_OP_1_MINUS_RGB0               (3 << 30)
 #define R500_US_CMN_INST_0                             0xb800
+#  define R500_INST_TYPE_MASK                          (3 << 0)
 #   define R500_INST_TYPE_ALU                          (0 << 0)
 #   define R500_INST_TYPE_OUT                          (1 << 0)
 #   define R500_INST_TYPE_FC                           (2 << 0)
@@ -2958,19 +2989,19 @@ enum {
 
 /* note that these are 8 bit lengths, despite the offsets, at least for R500 */
 #define R500_US_CODE_ADDR                              0x4630
-#   define R500_US_CODE_START_ADDR(x)                  (x << 0)
-#   define R500_US_CODE_END_ADDR(x)                    (x << 16)
+#   define R500_US_CODE_START_ADDR(x)                  ((x) << 0)
+#   define R500_US_CODE_END_ADDR(x)                    ((x) << 16)
 #define R500_US_CODE_OFFSET                            0x4638
-#   define R500_US_CODE_OFFSET_ADDR(x)                 (x << 0)
+#   define R500_US_CODE_OFFSET_ADDR(x)                 ((x) << 0)
 #define R500_US_CODE_RANGE                             0x4634
-#   define R500_US_CODE_RANGE_ADDR(x)                  (x << 0)
-#   define R500_US_CODE_RANGE_SIZE(x)                  (x << 16)
+#   define R500_US_CODE_RANGE_ADDR(x)                  ((x) << 0)
+#   define R500_US_CODE_RANGE_SIZE(x)                  ((x) << 16)
 #define R500_US_CONFIG                                 0x4600
 #   define R500_ZERO_TIMES_ANYTHING_EQUALS_ZERO                (1 << 1)
 #define R500_US_FC_ADDR_0                              0xa000
-#   define R500_FC_BOOL_ADDR(x)                                (x << 0)
-#   define R500_FC_INT_ADDR(x)                         (x << 8)
-#   define R500_FC_JUMP_ADDR(x)                                (x << 16)
+#   define R500_FC_BOOL_ADDR(x)                                ((x) << 0)
+#   define R500_FC_INT_ADDR(x)                         ((x) << 8)
+#   define R500_FC_JUMP_ADDR(x)                                ((x) << 16)
 #   define R500_FC_JUMP_GLOBAL                         (1 << 31)
 #define R500_US_FC_BOOL_CONST                          0x4620
 #   define R500_FC_KBOOL(x)                            (x)
@@ -2991,8 +3022,8 @@ enum {
 #   define R500_FC_A_OP_NONE                           (0 << 6)
 #   define R500_FC_A_OP_POP                            (1 << 6)
 #   define R500_FC_A_OP_PUSH                           (2 << 6)
-#   define R500_FC_JUMP_FUNC(x)                                (x << 8)
-#   define R500_FC_B_POP_CNT(x)                                (x << 16)
+#   define R500_FC_JUMP_FUNC(x)                                ((x) << 8)
+#   define R500_FC_B_POP_CNT(x)                                ((x) << 16)
 #   define R500_FC_B_OP0_NONE                          (0 << 24)
 #   define R500_FC_B_OP0_DECR                          (1 << 24)
 #   define R500_FC_B_OP0_INCR                          (2 << 24)
@@ -3001,14 +3032,14 @@ enum {
 #   define R500_FC_B_OP1_INCR                          (2 << 26)
 #   define R500_FC_IGNORE_UNCOVERED                    (1 << 28)
 #define R500_US_FC_INT_CONST_0                         0x4c00
-#   define R500_FC_INT_CONST_KR(x)                     (x << 0)
-#   define R500_FC_INT_CONST_KG(x)                     (x << 8)
-#   define R500_FC_INT_CONST_KB(x)                     (x << 16)
+#   define R500_FC_INT_CONST_KR(x)                     ((x) << 0)
+#   define R500_FC_INT_CONST_KG(x)                     ((x) << 8)
+#   define R500_FC_INT_CONST_KB(x)                     ((x) << 16)
 /* _0 through _15 */
 #define R500_US_FORMAT0_0                              0x4640
-#   define R500_FORMAT_TXWIDTH(x)                      (x << 0)
-#   define R500_FORMAT_TXHEIGHT(x)                     (x << 11)
-#   define R500_FORMAT_TXDEPTH(x)                      (x << 22)
+#   define R500_FORMAT_TXWIDTH(x)                      ((x) << 0)
+#   define R500_FORMAT_TXHEIGHT(x)                     ((x) << 11)
+#   define R500_FORMAT_TXDEPTH(x)                      ((x) << 22)
 /* _0 through _3 */
 #define R500_US_OUT_FMT_0                              0x46a4
 #   define R500_OUT_FMT_C4_8                           (0 << 0)
@@ -3049,12 +3080,12 @@ enum {
 #   define R500_C3_SEL_R                               (1 << 14)
 #   define R500_C3_SEL_G                               (2 << 14)
 #   define R500_C3_SEL_B                               (3 << 14)
-#   define R500_OUT_SIGN(x)                            (x << 16)
+#   define R500_OUT_SIGN(x)                            ((x) << 16)
 #   define R500_ROUND_ADJ                              (1 << 20)
 #define R500_US_PIXSIZE                                        0x4604
 #   define R500_PIX_SIZE(x)                            (x)
 #define R500_US_TEX_ADDR_0                             0x9800
-#   define R500_TEX_SRC_ADDR(x)                                (x << 0)
+#   define R500_TEX_SRC_ADDR(x)                                ((x) << 0)
 #   define R500_TEX_SRC_ADDR_REL                       (1 << 7)
 #   define R500_TEX_SRC_S_SWIZ_R                       (0 << 8)
 #   define R500_TEX_SRC_S_SWIZ_G                       (1 << 8)
@@ -3072,7 +3103,7 @@ enum {
 #   define R500_TEX_SRC_Q_SWIZ_G                       (1 << 14)
 #   define R500_TEX_SRC_Q_SWIZ_B                       (2 << 14)
 #   define R500_TEX_SRC_Q_SWIZ_A                       (3 << 14)
-#   define R500_TEX_DST_ADDR(x)                                (x << 16)
+#   define R500_TEX_DST_ADDR(x)                                ((x) << 16)
 #   define R500_TEX_DST_ADDR_REL                       (1 << 23)
 #   define R500_TEX_DST_R_SWIZ_R                       (0 << 24)
 #   define R500_TEX_DST_R_SWIZ_G                       (1 << 24)
@@ -3091,7 +3122,7 @@ enum {
 #   define R500_TEX_DST_A_SWIZ_B                       (2 << 30)
 #   define R500_TEX_DST_A_SWIZ_A                       (3 << 30)
 #define R500_US_TEX_ADDR_DXDY_0                                0xa000
-#   define R500_DX_ADDR(x)                             (x << 0)
+#   define R500_DX_ADDR(x)                             ((x) << 0)
 #   define R500_DX_ADDR_REL                            (1 << 7)
 #   define R500_DX_S_SWIZ_R                            (0 << 8)
 #   define R500_DX_S_SWIZ_G                            (1 << 8)
@@ -3109,7 +3140,7 @@ enum {
 #   define R500_DX_Q_SWIZ_G                            (1 << 14)
 #   define R500_DX_Q_SWIZ_B                            (2 << 14)
 #   define R500_DX_Q_SWIZ_A                            (3 << 14)
-#   define R500_DY_ADDR(x)                             (x << 16)
+#   define R500_DY_ADDR(x)                             ((x) << 16)
 #   define R500_DY_ADDR_REL                            (1 << 17)
 #   define R500_DY_S_SWIZ_R                            (0 << 24)
 #   define R500_DY_S_SWIZ_G                            (1 << 24)
@@ -3128,7 +3159,7 @@ enum {
 #   define R500_DY_Q_SWIZ_B                            (2 << 30)
 #   define R500_DY_Q_SWIZ_A                            (3 << 30)
 #define R500_US_TEX_INST_0                             0x9000
-#   define R500_TEX_ID(x)                              (x << 16)
+#   define R500_TEX_ID(x)                              ((x) << 16)
 #   define R500_TEX_INST_NOP                           (0 << 22)
 #   define R500_TEX_INST_LD                            (1 << 22)
 #   define R500_TEX_INST_TEXKILL                       (2 << 22)
@@ -3147,6 +3178,9 @@ enum {
 #   define R300_W_SRC_RAS                              (1 << 2)
 
 
+/* Packet0 field ordering to write all values to the same reg */
+#define RADEON_ONE_REG_WR        (1 << 15)
+
 /* Draw a primitive from vertex data in arrays loaded via 3D_LOAD_VBPNTR.
  * Two parameter dwords:
  * 0. VAP_VTX_FMT: The first parameter is not written to hardware
@@ -3189,9 +3223,9 @@ enum {
 #define R300_PACKET3_3D_LOAD_VBPNTR         0x00002F00
 
 #define R300_PACKET3_INDX_BUFFER            0x00003300
-#    define R300_EB_UNK1_SHIFT                      24
-#    define R300_EB_UNK1                    (0x80<<24)
-#    define R300_EB_UNK2                        0x0810
+#    define R300_INDX_BUFFER_DST_SHIFT          0
+#    define R300_INDX_BUFFER_SKIP_SHIFT         16
+#    define R300_INDX_BUFFER_ONE_REG_WR                (1<<31)
 
 /* Same as R300_PACKET3_3D_DRAW_VBUF but without VAP_VTX_FMT */
 #define R300_PACKET3_3D_DRAW_VBUF_2         0x00003400