Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

nv40_reg.h

Go to the documentation of this file.
00001 #ifndef __NV40_REG_H__
00002 #define __NV40_REG_H__
00003 
00024 #define NV40_VTX_FORMAT 0x1740
00025 #define NV40_VTX_FORMAT_TYPE_SHIFT          0
00026 #define NV40_VTX_FORMAT_TYPE_MASK           (0x0F << 0)
00027 #    define NV40_VTX_FORMAT_TYPE_FLOAT      2
00028 #    define NV40_VTX_FORMAT_TYPE_UBYTE      4
00029 #define NV40_VTX_FORMAT_NCOMP_SHIFT         4
00030 #define NV40_VTX_FORMAT_NCOMP_MASK          (0x0F << 4)
00031 #define NV40_VTX_FORMAT_STRIDE_SHIFT        8
00032 #define NV40_VTX_FORMAT_STRIDE_MASK         (UNKNOWN << 8)
00033 
00034 /* This is a list of memory addresses pointing to the vertex/colour(etc) data
00035  *
00036  * It appears that this is ordered in the same way that the vertex format
00037  * descriptions are, with unused slots being filled with 0x00000000.
00038  * 
00039  * NOTE: For me, the vertex weight has always been specified as the same
00040  * location as the vertex positions..
00041  */
00042 #define NV40_VB_POINTER 0x1680
00043 
00044 /* It seems that you can only send vertices in groups of 256 at a time.
00045  * The proprietary driver will send a batch of (vertices % 256) first, and
00046  * then send the remaining vertices in lots of 256 in a separate command.
00047  *
00048  * ie: 516 vertices
00049  *  52d   0x00000000   0x00043814   {size: 0x1   channel: 0x1   cmd: 0x00001814}
00050  *  52e   0x00000000   0x03000000
00051  *  52f   0x00000000   0x40083814   {size: 0x2   channel: 0x1   cmd: 0x40001814}
00052  *  530   0x00000000   0xff000004
00053  *  531   0x00000000   0xff000104
00054  *
00055  * Also, note that the second 0x1814 command has bit 30 set.. not sure what
00056  * the significance of that is..
00057  */
00058 #define NV40_VB_VERTEX_BATCH 0x1814
00059 #define NV40_VB_VERTEX_BATCH_OFFSET_SHIFT   0           /* offset in vertices */
00060 #define NV40_VB_VERTEX_BATCH_OFFSET_MASK    (0xFFFFFF << 0) /* guess */
00061 #define NV40_VB_VERTEX_BATCH_COUNT_SHIFT    24          /* count in vertices  */
00062 #define NV40_VB_VERTEX_BATCH_COUNT_MASK     (0xFF << 24)
00063 
00064 #define NV30_TX                                            0x00001A00
00065 #define NV30_TX_UNIT(n)                                    (0x1A00 + (n * 32))
00066 /* DWORD 0 - texture address */
00067 /* DWORD 1 */
00068 #  define NV30_TX_MIPMAP_COUNT_SHIFT                    20
00069 #  define NV30_TX_MIPMAP_COUNT_MASK                     (0xF << 20) /* guess */
00070 #  define NV30_TX_NPOT                                  (1 << 13)    /* also set on RECT, even if POT */
00071 #  define NV30_TX_RECTANGLE                             (1 << 14)
00072 #  define NV30_TX_FORMAT_SHIFT                          8
00073 #  define NV30_TX_FORMAT_MASK                           (0x1F << 8) /* *bad* guess */
00074 #    define NV30_TX_FORMAT_L8       0x01
00075 #    define NV30_TX_FORMAT_A1R5G5B5 0x02
00076 #    define NV30_TX_FORMAT_A4R4G4B4 0x03
00077 #    define NV30_TX_FORMAT_R5G6B5   0x04
00078 #    define NV30_TX_FORMAT_A8R8G8B8 0x05
00079 #    define NV30_TX_FORMAT_DXT1     0x06
00080 #    define NV30_TX_FORMAT_DXT3     0x07
00081 #    define NV30_TX_FORMAT_DXT5     0x08
00082 #    define NV30_TX_FORMAT_L16      0x14
00083 #    define NV30_TX_FORMAT_G16R16   0x15    /* possibly wrong */
00084 #    define NV30_TX_FORMAT_A8L8     0x18    /* possibly wrong */
00085 #  define NV30_TX_NCOMP_SHIFT                           4            /* 2=2D, 3=3D*/
00086 #  define NV30_TX_NCOMP_MASK                            (0x3 << 4)   /* possibly wrong */
00087 #  define NV30_TX_CUBIC                                 (1 << 2)
00088 #  define NV30_TX_WRAP_S_SHIFT                          0
00089 #  define NV30_TX_WRAP_S_MASK                           (0xF << 0)
00090 #  define NV30_TX_WRAP_T_SHIFT                          8
00091 #  define NV30_TX_WRAP_T_MASK                           (0xF << 8)
00092 #  define NV30_TX_WRAP_R_SHIFT                          16
00093 #  define NV30_TX_WRAP_R_MASK                           (0xF << 16)
00094 #    define NV30_TX_REPEAT           1
00095 #    define NV30_TX_MIRRORED_REPEAT  2
00096 #    define NV30_TX_CLAMP_TO_EDGE    3
00097 #    define NV30_TX_CLAMP_TO_BORDER  4
00098 #    define NV30_TX_CLAMP            5
00099 /* DWORD 3 */
00100 /* DWORD 4
00101     Appears to be related to swizzling of the texture image data into a RGBA value.
00102     A lot of uncertainty here...
00103 */
00104 #  define NV30_TX_S0_X_SHIFT                            14
00105 #  define NV30_TX_S0_Y_SHIFT                            12
00106 #  define NV30_TX_S0_Z_SHIFT                            10
00107 #  define NV30_TX_S0_W_SHIFT                            8
00108 #    define NV30_TX_S0_ZERO 0
00109 #    define NV30_TX_S0_ONE  1
00110 #    define NV30_TX_S0_S1   2 /* take value from NV30_TX_S1_* */
00111 #  define NV30_TX_S1_X_SHIFT                            6
00112 #  define NV30_TX_S1_Y_SHIFT                            4
00113 #  define NV30_TX_S1_Z_SHIFT                            2
00114 #  define NV30_TX_S1_W_SHIFT                            0
00115 #    define NV30_TX_S1_X    3
00116 #    define NV30_TX_S1_Y    2
00117 #    define NV30_TX_S1_Z    1
00118 #    define NV30_TX_S1_W    0
00119 /* DWORD 5 */
00120 #  define NV30_TX_MIN_FILTER_SHIFT                      16
00121 #  define NV30_TX_MIN_FILTER_MASK                       (0xF << 16)
00122 #  define NV30_TX_MAG_FILTER_SHIFT                      24
00123 #  define NV30_TX_MAG_FILTER_MASK                       (0xF << 24)
00124 #    define NV30_TX_FILTER_NEAREST                1
00125 #    define NV30_TX_FILTER_LINEAR                 2
00126 #    define NV30_TX_FILTER_NEAREST_MIPMAP_NEAREST 3
00127 #    define NV30_TX_FILTER_LINEAR_MIPMAP_NEAREST  4
00128 #    define NV30_TX_FILTER_NEAREST_MIPMAP_LINEAR  5
00129 #    define NV30_TX_FILTER_LINEAR_MIPMAP_LINEAR   6
00130 /* DWORD 6 */
00131 #  define NV30_TX_WIDTH_SHIFT                           16
00132 #  define NV30_TX_WIDTH_MASK                            (0xFFFF << 16)
00133 #  define NV30_TX_HEIGHT_SHIFT                          0
00134 #  define NV30_TX_HEIGHT_MASK                           (0xFFFF << 0)
00135 /* DWORD 7 */
00136 
00137 
00138 #define NV30_TX_DEPTH                                   0x1840
00139 #define NV30_TX_DEPTH_UNIT(n)                           (0x1840 + n*4)
00140 #  define NV30_TX_DEPTH_SHIFT                           20
00141 #  define NV30_TX_DEPTH_MASK                            (0xFFF << 20)
00142 #  define NV30_TX_DEPTH_NPOT                            (1 << 7) /* also set for RECT, even if POT */
00143 
00144 /* Vertex Program upload / control */
00145 #define NV40_VP_UPLOAD_FROM_ID         0x1E9C /* The next VP_UPLOAD_INST is uploading instruction <n> (guess..) */
00146 #define NV40_VP_PROGRAM_START_ID       0x1EA0 /* Start executing program from instruction <n> */
00147 
00148 
00149 
00213 /* ---- OPCODE BITS 127:96 / data DWORD 0 --- */
00214 #define NV40_VP_INST0_UNK0                (1 << 30) /* set when writing result regs */
00215 #define NV40_VP_INST_COND_UPDATE_ENABLE   ((1 << 14)|1<<29) /* unsure about this */
00216 #define NV40_VP_INST_INDEX_INPUT          (1 << 27) /* Use an address reg as in index into attribs */
00217 #define NV40_VP_INST_COND_REG_SELECT_1    (1 << 25)
00218 #define NV40_VP_INST_ADDR_REG_SELECT_1    (1 << 24)
00219 #define NV40_VP_INST_SRC2_ABS             (1 << 23)
00220 #define NV40_VP_INST_SRC1_ABS             (1 << 22)
00221 #define NV40_VP_INST_SRC0_ABS             (1 << 21)
00222 #define NV40_VP_INST_VEC_DEST_TEMP_SHIFT  15
00223 #define NV40_VP_INST_VEC_DEST_TEMP_MASK   (0x3F << 15)
00224 #define NV40_VP_INST_COND_TEST_ENABLE     (1 << 13) /* write masking based on condition test */
00225 #define NV40_VP_INST_COND_SHIFT           10
00226 #define NV40_VP_INST_COND_MASK            (0x7 << 10)
00227 #    define NV40_VP_INST_COND_FL     0
00228 #    define NV40_VP_INST_COND_LT     1
00229 #    define NV40_VP_INST_COND_EQ     2
00230 #    define NV40_VP_INST_COND_LE     3
00231 #    define NV40_VP_INST_COND_GT     4
00232 #    define NV40_VP_INST_COND_NE     5
00233 #    define NV40_VP_INST_COND_GE     6
00234 #    define NV40_VP_INST_COND_TR     7
00235 #define NV40_VP_INST_COND_SWZ_X_SHIFT     8
00236 #define NV40_VP_INST_COND_SWZ_X_MASK      (3 << 8)
00237 #define NV40_VP_INST_COND_SWZ_Y_SHIFT     6
00238 #define NV40_VP_INST_COND_SWZ_Y_MASK      (3 << 6)
00239 #define NV40_VP_INST_COND_SWZ_Z_SHIFT     4
00240 #define NV40_VP_INST_COND_SWZ_Z_MASK      (3 << 4)
00241 #define NV40_VP_INST_COND_SWZ_W_SHIFT     2
00242 #define NV40_VP_INST_COND_SWZ_W_MASK      (3 << 2)
00243 #define NV40_VP_INST_COND_SWZ_ALL_SHIFT   2
00244 #define NV40_VP_INST_COND_SWZ_ALL_MASK    (0xFF << 2)
00245 #define NV40_VP_INST_ADDR_SWZ_SHIFT       0
00246 #define NV40_VP_INST_ADDR_SWZ_MASK        (0x03 << 0)
00247 #define NV40_VP_INST0_KNOWN ( \
00248         NV40_VP_INST_INDEX_INPUT | \
00249         NV40_VP_INST_COND_REG_SELECT_1 | \
00250         NV40_VP_INST_ADDR_REG_SELECT_1 | \
00251         NV40_VP_INST_SRC2_ABS | \
00252         NV40_VP_INST_SRC1_ABS | \
00253         NV40_VP_INST_SRC0_ABS | \
00254         NV40_VP_INST_VEC_DEST_TEMP_MASK | \
00255         NV40_VP_INST_COND_TEST_ENABLE | \
00256         NV40_VP_INST_COND_MASK | \
00257         NV40_VP_INST_COND_SWZ_ALL_MASK | \
00258         NV40_VP_INST_ADDR_SWZ_MASK)
00259 
00260 /* ---- OPCODE BITS 95:64 / data DWORD 1 --- */
00261 #define NV40_VP_INST_VEC_OPCODE_SHIFT     22
00262 #define NV40_VP_INST_VEC_OPCODE_MASK      (0x1F << 22)
00263 #    define NV40_VP_INST_OP_NOP           0x00
00264 #    define NV40_VP_INST_OP_MOV           0x01
00265 #    define NV40_VP_INST_OP_MUL           0x02
00266 #    define NV40_VP_INST_OP_ADD           0x03
00267 #    define NV40_VP_INST_OP_MAD           0x04
00268 #    define NV40_VP_INST_OP_DP3           0x05
00269 #    define NV40_VP_INST_OP_DP4           0x07
00270 #    define NV40_VP_INST_OP_DPH           0x06
00271 #    define NV40_VP_INST_OP_DST           0x08
00272 #    define NV40_VP_INST_OP_MIN           0x09
00273 #    define NV40_VP_INST_OP_MAX           0x0A
00274 #    define NV40_VP_INST_OP_SLT           0x0B
00275 #    define NV40_VP_INST_OP_SGE           0x0C
00276 #    define NV40_VP_INST_OP_ARL           0x0D
00277 #    define NV40_VP_INST_OP_FRC           0x0E
00278 #    define NV40_VP_INST_OP_FLR           0x0F
00279 #    define NV40_VP_INST_OP_SEQ           0x10
00280 #    define NV40_VP_INST_OP_SFL           0x11
00281 #    define NV40_VP_INST_OP_SGT           0x12
00282 #    define NV40_VP_INST_OP_SLE           0x13
00283 #    define NV40_VP_INST_OP_SNE           0x14
00284 #    define NV40_VP_INST_OP_STR           0x15
00285 #    define NV40_VP_INST_OP_SSG           0x16
00286 #    define NV40_VP_INST_OP_ARR           0x17
00287 #    define NV40_VP_INST_OP_ARA           0x18
00288 #define NV40_VP_INST_SCA_OPCODE_SHIFT     27
00289 #define NV40_VP_INST_SCA_OPCODE_MASK      (0x1F << 27)
00290 #    define NV40_VP_INST_OP_RCP           0x02
00291 #    define NV40_VP_INST_OP_RCC           0x03
00292 #    define NV40_VP_INST_OP_RSQ           0x04
00293 #    define NV40_VP_INST_OP_EXP           0x05
00294 #    define NV40_VP_INST_OP_LOG           0x06
00295 #    define NV40_VP_INST_OP_LIT           0x07
00296 #    define NV40_VP_INST_OP_BRA           0x09
00297 #    define NV40_VP_INST_OP_CAL           0x0B
00298 #    define NV40_VP_INST_OP_RET           0x0C
00299 #    define NV40_VP_INST_OP_LG2           0x0D
00300 #    define NV40_VP_INST_OP_EX2           0x0E
00301 #    define NV40_VP_INST_OP_SIN           0x0F
00302 #    define NV40_VP_INST_OP_COS           0x10
00303 #    define NV40_VP_INST_OP_PUSHA         0x13
00304 #    define NV40_VP_INST_OP_POPA          0x14
00305 #define NV40_VP_INST_CONST_SRC_SHIFT      12
00306 #define NV40_VP_INST_CONST_SRC_MASK       (0xFF << 12)
00307 #define NV40_VP_INST_INPUT_SRC_SHIFT      8 
00308 #define NV40_VP_INST_INPUT_SRC_MASK       (0x0F << 8)
00309 #    define NV40_VP_INST_IN_POS           0      /* These seem to match the bindings specified in   */
00310 #    define NV40_VP_INST_IN_WEIGHT        1      /* the ARB_v_p spec (2.14.3.1)                     */
00311 #    define NV40_VP_INST_IN_NORMAL        2      
00312 #    define NV40_VP_INST_IN_COL0          3      /* Should probably confirm them all thougth        */
00313 #    define NV40_VP_INST_IN_COL1          4
00314 #    define NV40_VP_INST_IN_FOGC          5
00315 #    define NV40_VP_INST_IN_TC0           8
00316 #    define NV40_VP_INST_IN_TC(n)         (8+n)
00317 #define NV40_VP_INST_SRC0H_SHIFT          0
00318 #define NV40_VP_INST_SRC0H_MASK           (0xFF << 0)
00319 #define NV40_VP_INST1_KNOWN ( \
00320         NV40_VP_INST_VEC_OPCODE_MASK | \
00321         NV40_VP_INST_SCA_OPCODE_MASK | \
00322         NV40_VP_INST_CONST_SRC_MASK  | \
00323         NV40_VP_INST_INPUT_SRC_MASK  | \
00324         NV40_VP_INST_SRC0H_MASK \
00325         )
00326 
00327 /* ---- OPCODE BITS 63:32 / data DWORD 2 --- */
00328 #define NV40_VP_INST_SRC0L_SHIFT          23
00329 #define NV40_VP_INST_SRC0L_MASK           (0x1FF << 23)
00330 #define NV40_VP_INST_SRC1_SHIFT           6
00331 #define NV40_VP_INST_SRC1_MASK            (0x1FFFF << 6)
00332 #define NV40_VP_INST_SRC2H_SHIFT          0
00333 #define NV40_VP_INST_SRC2H_MASK           (0x3F << 0)
00334 #define NV40_VP_INST_IADDRH_SHIFT         0
00335 #define NV40_VP_INST_IADDRH_MASK          (0x1F << 0) /* guess, need to test this */
00336 
00337 /* ---- OPCODE BITS 31:0 / data DWORD 3 --- */
00338 #define NV40_VP_INST_IADDRL_SHIFT         29        
00339 #define NV40_VP_INST_IADDRL_MASK          (7 << 29)
00340 #define NV40_VP_INST_SRC2L_SHIFT          21
00341 #define NV40_VP_INST_SRC2L_MASK           (0x7FF << 21)
00342 #define NV40_VP_INST_SCA_WRITEMASK_SHIFT      17
00343 #define NV40_VP_INST_SCA_WRITEMASK_MASK       (0xF << 17)
00344 #    define NV40_VP_INST_SCA_WRITEMASK_X      (1 << 20)
00345 #    define NV40_VP_INST_SCA_WRITEMASK_Y      (1 << 19)
00346 #    define NV40_VP_INST_SCA_WRITEMASK_Z      (1 << 18)
00347 #    define NV40_VP_INST_SCA_WRITEMASK_W      (1 << 17)
00348 #define NV40_VP_INST_VEC_WRITEMASK_SHIFT      13
00349 #define NV40_VP_INST_VEC_WRITEMASK_MASK       (0xF << 13)
00350 #    define NV40_VP_INST_VEC_WRITEMASK_X      (1 << 16)
00351 #    define NV40_VP_INST_VEC_WRITEMASK_Y      (1 << 15)
00352 #    define NV40_VP_INST_VEC_WRITEMASK_Z      (1 << 14)
00353 #    define NV40_VP_INST_VEC_WRITEMASK_W      (1 << 13)
00354 #define NV40_VP_INST_SCA_DEST_TEMP_SHIFT   7
00355 #define NV40_VP_INST_SCA_DEST_TEMP_MASK    (0x3F << 7)
00356 #define NV40_VP_INST_DEST_SHIFT           2
00357 #define NV40_VP_INST_DEST_MASK            (31 << 2)
00358 #    define NV40_VP_INST_DEST_POS         0
00359 #    define NV40_VP_INST_DEST_COL0        1
00360 #    define NV40_VP_INST_DEST_COL1        2
00361 #    define NV40_VP_INST_DEST_BFC0        3
00362 #    define NV40_VP_INST_DEST_BFC1        4
00363 #    define NV40_VP_INST_DEST_FOGC        5
00364 #    define NV40_VP_INST_DEST_PSZ         6
00365 #    define NV40_VP_INST_DEST_TC0         7
00366 #    define NV40_VP_INST_DEST_TC(n)       (7+n)
00367 #    define NV40_VP_INST_DEST_TEMP        0x1F     /* see NV40_VP_INST0_* for actual register */
00368 #define NV40_VP_INST_INDEX_CONST          (1 << 1)
00369 #define NV40_VP_INST_UNK_00               (1 << 0) /* appears to be set on the last inst only */
00370 #define NV40_VP_INST3_KNOWN ( \
00371         NV40_VP_INST_SRC2L_MASK |\
00372         NV40_VP_INST_SCA_WRITEMASK_MASK |\
00373         NV40_VP_INST_VEC_WRITEMASK_MASK |\
00374         NV40_VP_INST_SCA_DEST_TEMP_MASK |\
00375         NV40_VP_INST_DEST_MASK |\
00376         NV40_VP_INST_INDEX_CONST)
00377 
00378 /* Useful to split the source selection regs into their pieces */
00379 #define NV40_VP_SRC0_HIGH_SHIFT 9
00380 #define NV40_VP_SRC0_HIGH_MASK  0x0001FE00
00381 #define NV40_VP_SRC0_LOW_MASK   0x000001FF
00382 #define NV40_VP_SRC2_HIGH_SHIFT 11
00383 #define NV40_VP_SRC2_HIGH_MASK  0x0001F800
00384 #define NV40_VP_SRC2_LOW_MASK   0x000007FF
00385 
00386 /* Source selection - these are the bits you fill NV40_VP_INST_SRCn with */
00387 #define NV40_VP_SRC_NEGATE               (1 << 16)
00388 #define NV40_VP_SRC_SWZ_X_SHIFT          14
00389 #define NV40_VP_SRC_SWZ_X_MASK           (3 << 14)
00390 #define NV40_VP_SRC_SWZ_Y_SHIFT          12
00391 #define NV40_VP_SRC_SWZ_Y_MASK           (3 << 12)
00392 #define NV40_VP_SRC_SWZ_Z_SHIFT          10
00393 #define NV40_VP_SRC_SWZ_Z_MASK           (3 << 10)
00394 #define NV40_VP_SRC_SWZ_W_SHIFT          8
00395 #define NV40_VP_SRC_SWZ_W_MASK           (3 << 8)
00396 #define NV40_VP_SRC_SWZ_ALL_SHIFT        8
00397 #define NV40_VP_SRC_SWZ_ALL_MASK         (0xFF << 8)
00398 #define NV40_VP_SRC_TEMP_SRC_SHIFT       2
00399 #define NV40_VP_SRC_TEMP_SRC_MASK        (0x3F << 2)
00400 #define NV40_VP_SRC_REG_TYPE_SHIFT       0
00401 #define NV40_VP_SRC_REG_TYPE_MASK        (3 << 0)
00402 #    define NV40_VP_SRC_REG_TYPE_UNK0    0
00403 #    define NV40_VP_SRC_REG_TYPE_TEMP    1
00404 #    define NV40_VP_SRC_REG_TYPE_INPUT   2
00405 #    define NV40_VP_SRC_REG_TYPE_CONST   3
00406 
00462 //== Opcode / Destination selection ==
00463 #define NV40_FP_OP_PROGRAM_END      (1 << 0)
00464 #define NV40_FP_OP_OUT_REG_SHIFT    1
00465 #define NV40_FP_OP_OUT_REG_MASK    (31 << 1)    /* uncertain */
00466 #define NV40_FP_OP_COND_WRITE_ENABLE (1 << 8)
00467 #define NV40_FP_OP_OUTMASK_SHIFT    9
00468 #define NV40_FP_OP_OUTMASK_MASK    (0xF << 9)
00469 #    define NV40_FP_OP_OUT_X        (1 << 9)
00470 #    define NV40_FP_OP_OUT_Y        (1 << 10)
00471 #    define NV40_FP_OP_OUT_Z        (1 << 11)
00472 #    define NV40_FP_OP_OUT_W        (1 << 12)
00473 /* Uncertain about these, especially the input_src values.. it's possible that
00474  * they can be dynamically changed.
00475  */
00476 #define NV40_FP_OP_INPUT_SRC_SHIFT    13
00477 #define NV40_FP_OP_INPUT_SRC_MASK    (15 << 13)
00478 #    define NV40_FP_OP_INPUT_SRC_POSITION    0x0
00479 #    define NV40_FP_OP_INPUT_SRC_COL0        0x1
00480 #    define NV40_FP_OP_INPUT_SRC_COL1        0x2
00481 #    define NV40_FP_OP_INPUT_SRC_FOGC        0x3
00482 #    define NV40_FP_OP_INPUT_SRC_TC0         0x4
00483 #    define NV40_FP_OP_INPUT_SRC_TC(n)       (0x4 + n)
00484 #define NV40_FP_OP_TEX_UNIT_SHIFT    17
00485 #define NV40_FP_OP_TEX_UNIT_MASK    (0xF << 17) /* guess */
00486 #define NV40_FP_OP_PRECISION_SHIFT 22
00487 #define NV40_FP_OP_PRECISION_MASK  (3 << 22)
00488 #   define NV40_FP_PRECISION_FP32  0
00489 #   define NV40_FP_PRECISION_FP16  1
00490 #   define NV40_FP_PRECISION_FX12  2
00491 #define NV40_FP_OP_OPCODE_SHIFT    24
00492 #define NV40_FP_OP_OPCODE_MASK        (0x3F << 24)
00493 #    define NV40_FP_OP_OPCODE_NOP    0x00
00494 #    define NV40_FP_OP_OPCODE_MOV    0x01
00495 #    define NV40_FP_OP_OPCODE_MUL    0x02
00496 #    define NV40_FP_OP_OPCODE_ADD    0x03
00497 #    define NV40_FP_OP_OPCODE_MAD    0x04
00498 #    define NV40_FP_OP_OPCODE_DP3    0x05
00499 #    define NV40_FP_OP_OPCODE_DP4    0x06
00500 #    define NV40_FP_OP_OPCODE_DST    0x07
00501 #    define NV40_FP_OP_OPCODE_MIN    0x08
00502 #    define NV40_FP_OP_OPCODE_MAX    0x09
00503 #    define NV40_FP_OP_OPCODE_SLT    0x0A
00504 #    define NV40_FP_OP_OPCODE_SGE    0x0B
00505 #    define NV40_FP_OP_OPCODE_SLE    0x0C
00506 #    define NV40_FP_OP_OPCODE_SGT    0x0D
00507 #    define NV40_FP_OP_OPCODE_SNE    0x0E
00508 #    define NV40_FP_OP_OPCODE_SEQ    0x0F
00509 #    define NV40_FP_OP_OPCODE_FRC    0x10
00510 #    define NV40_FP_OP_OPCODE_FLR    0x11
00511 #    define NV40_FP_OP_OPCODE_PK4B   0x13
00512 #    define NV40_FP_OP_OPCODE_UP4B   0x14
00513 #    define NV40_FP_OP_OPCODE_DDX    0x15 /* can only write XY */
00514 #    define NV40_FP_OP_OPCODE_DDY    0x16 /* can only write XY */
00515 #    define NV40_FP_OP_OPCODE_TEX    0x17
00516 #    define NV40_FP_OP_OPCODE_TXP    0x18
00517 #    define NV40_FP_OP_OPCODE_TXD    0x19
00518 #    define NV40_FP_OP_OPCODE_RCP    0x1A
00519 #    define NV40_FP_OP_OPCODE_EX2    0x1C
00520 #    define NV40_FP_OP_OPCODE_LG2    0x1D
00521 #    define NV40_FP_OP_OPCODE_COS    0x22
00522 #    define NV40_FP_OP_OPCODE_SIN    0x23
00523 #    define NV40_FP_OP_OPCODE_PK2H   0x24
00524 #    define NV40_FP_OP_OPCODE_UP2H   0x25
00525 #    define NV40_FP_OP_OPCODE_PK4UB  0x27
00526 #    define NV40_FP_OP_OPCODE_UP4UB  0x28
00527 #    define NV40_FP_OP_OPCODE_PK2US  0x29
00528 #    define NV40_FP_OP_OPCODE_UP2US  0x2A
00529 #    define NV40_FP_OP_OPCODE_DP2A   0x2E
00530 #    define NV40_FP_OP_OPCODE_TXL    0x2F
00531 #    define NV40_FP_OP_OPCODE_TXB    0x31
00532 #    define NV40_FP_OP_OPCODE_DIV    0x3A
00533 /* The use of these instructions appears to be indicated by bit 31 of DWORD 2.*/
00534 #    define NV40_FP_OP_BRA_OPCODE_BRK    0x0
00535 #    define NV40_FP_OP_BRA_OPCODE_CAL    0x1
00536 #    define NV40_FP_OP_BRA_OPCODE_IF     0x2
00537 #    define NV40_FP_OP_BRA_OPCODE_LOOP   0x3
00538 #    define NV40_FP_OP_BRA_OPCODE_REP    0x4
00539 #    define NV40_FP_OP_BRA_OPCODE_RET    0x5
00540 #define NV40_FP_OP_OUT_SAT            (1 << 31)
00541 
00542 /* high order bits of SRC0 */
00543 #define NV40_FP_OP_OUT_ABS            (1 << 29)
00544 #define NV40_FP_OP_COND_SWZ_W_SHIFT   27
00545 #define NV40_FP_OP_COND_SWZ_W_MASK    (3 << 27)
00546 #define NV40_FP_OP_COND_SWZ_Z_SHIFT   25
00547 #define NV40_FP_OP_COND_SWZ_Z_MASK    (3 << 25)
00548 #define NV40_FP_OP_COND_SWZ_Y_SHIFT   23
00549 #define NV40_FP_OP_COND_SWZ_Y_MASK    (3 << 23)
00550 #define NV40_FP_OP_COND_SWZ_X_SHIFT   21
00551 #define NV40_FP_OP_COND_SWZ_X_MASK    (3 << 21)
00552 #define NV40_FP_OP_COND_SWZ_ALL_SHIFT 21
00553 #define NV40_FP_OP_COND_SWZ_ALL_MASK  (0xFF << 21)
00554 #define NV40_FP_OP_COND_SHIFT         18
00555 #define NV40_FP_OP_COND_MASK          (0x07 << 18)
00556 #    define NV40_FP_OP_COND_FL     0
00557 #    define NV40_FP_OP_COND_LT     1
00558 #    define NV40_FP_OP_COND_EQ     2
00559 #    define NV40_FP_OP_COND_LE     3
00560 #    define NV40_FP_OP_COND_GT     4
00561 #    define NV40_FP_OP_COND_NE     5
00562 #    define NV40_FP_OP_COND_GE     6
00563 #    define NV40_FP_OP_COND_TR     7
00564 
00565 /* high order bits of SRC1 */
00566 #define NV40_FP_OP_SRC_SCALE_SHIFT    28
00567 #define NV40_FP_OP_SRC_SCALE_MASK     (3 << 28)
00568 
00569 /* SRC1 LOOP */
00570 #define NV40_FP_OP_LOOP_INCR_SHIFT    19
00571 #define NV40_FP_OP_LOOP_INCR_MASK     (0xFF << 19)
00572 #define NV40_FP_OP_LOOP_INDEX_SHIFT   10
00573 #define NV40_FP_OP_LOOP_INDEX_MASK    (0xFF << 10)
00574 #define NV40_FP_OP_LOOP_COUNT_SHIFT   2
00575 #define NV40_FP_OP_LOOP_COUNT_MASK    (0xFF << 2) /* from MAX_PROGRAM_LOOP_COUNT_NV */
00576 
00577 /* SRC1 IF */
00578 #define NV40_FP_OP_ELSE_ID_SHIFT      2
00579 #define NV40_FP_OP_ELSE_ID_MASK       (0xFF << 2) /* UNKNOWN */
00580 
00581 /* SRC1 CAL */
00582 #define NV40_FP_OP_IADDR_SHIFT        2
00583 #define NV40_FP_OP_IADDR_MASK         (0xFF << 2)
00584 
00585 /* SRC1 REP
00586  *   I have no idea why there are 3 count values here..  but they
00587  *   have always been filled with the same value in my tests so
00588  *   far..
00589  */
00590 #define NV40_FP_OP_REP_COUNT1_SHIFT   2
00591 #define NV40_FP_OP_REP_COUNT1_MASK    (0xFF << 2)
00592 #define NV40_FP_OP_REP_COUNT2_SHIFT   10
00593 #define NV40_FP_OP_REP_COUNT2_MASK    (0xFF << 10)
00594 #define NV40_FP_OP_REP_COUNT3_SHIFT   19
00595 #define NV40_FP_OP_REP_COUNT3_MASK    (0xFF << 19)
00596 
00597 /* SRC2 REP/IF */
00598 #define NV40_FP_OP_END_ID_SHIFT       2
00599 #define NV40_FP_OP_END_ID_MASK        (0xFF << 2) /* UNKNOWN */
00600 
00601 // SRC2 high-order
00602 #define NV40_FP_OP_INDEX_INPUT        (1 << 30)
00603 #define NV40_FP_OP_ADDR_INDEX_SHIFT   19
00604 #define NV40_FP_OP_ADDR_INDEX_MASK    (0xF << 19) //UNKNOWN
00605 
00606 //== Register selection ==
00607 #define NV40_FP_REG_SRC_INPUT        (1 << 0)    /* uncertain */
00608 #define NV40_FP_REG_SRC_CONST        (1 << 1)
00609 #define NV40_FP_REG_SRC_SHIFT        2            /* uncertain */
00610 #define NV40_FP_REG_SRC_MASK        (31 << 2)
00611 #define NV40_FP_REG_UNK_0            (1 << 8)
00612 #define NV40_FP_REG_SWZ_ALL_SHIFT    9
00613 #define NV40_FP_REG_SWZ_ALL_MASK    (255 << 9)
00614 #define NV40_FP_REG_SWZ_X_SHIFT    9
00615 #define NV40_FP_REG_SWZ_X_MASK        (3 << 9)
00616 #define NV40_FP_REG_SWZ_Y_SHIFT    11
00617 #define NV40_FP_REG_SWZ_Y_MASK        (3 << 11)
00618 #define NV40_FP_REG_SWZ_Z_SHIFT    13
00619 #define NV40_FP_REG_SWZ_Z_MASK        (3 << 13)
00620 #define NV40_FP_REG_SWZ_W_SHIFT    15
00621 #define NV40_FP_REG_SWZ_W_MASK        (3 << 15)
00622 #    define NV40_FP_SWIZZLE_X        0
00623 #    define NV40_FP_SWIZZLE_Y        1
00624 #    define NV40_FP_SWIZZLE_Z        2
00625 #    define NV40_FP_SWIZZLE_W        3
00626 #define NV40_FP_REG_NEGATE            (1 << 17)
00627 
00628 #endif

Generated on Sat Aug 19 20:40:53 2006 for Renouveau by  doxygen 1.4.4