drm/radeon: add hier-z registers for r300 and r500 chipsets

+191 -61
+12 -12
drivers/char/drm/r300_cmdbuf.c
··· 190 190 ADD_RANGE(0x42C0, 2); 191 191 ADD_RANGE(R300_RS_CNTL_0, 2); 192 192 193 - ADD_RANGE(0x43A4, 2); 193 + ADD_RANGE(R300_SC_HYPERZ, 2); 194 194 ADD_RANGE(0x43E8, 1); 195 195 196 196 ADD_RANGE(0x46A4, 5); ··· 209 209 ADD_RANGE(0x4E50, 9); 210 210 ADD_RANGE(0x4E88, 1); 211 211 ADD_RANGE(0x4EA0, 2); 212 - ADD_RANGE(R300_RB3D_ZSTENCIL_CNTL_0, 3); 213 - ADD_RANGE(R300_RB3D_ZSTENCIL_FORMAT, 4); 214 - ADD_RANGE_MARK(R300_RB3D_DEPTHOFFSET, 1, MARK_CHECK_OFFSET); /* check offset */ 215 - ADD_RANGE(R300_RB3D_DEPTHPITCH, 1); 216 - ADD_RANGE(0x4F28, 1); 217 - ADD_RANGE(0x4F30, 2); 218 - ADD_RANGE(0x4F44, 1); 219 - ADD_RANGE(0x4F54, 1); 212 + ADD_RANGE(R300_ZB_CNTL, 3); 213 + ADD_RANGE(R300_ZB_FORMAT, 4); 214 + ADD_RANGE_MARK(R300_ZB_DEPTHOFFSET, 1, MARK_CHECK_OFFSET); /* check offset */ 215 + ADD_RANGE(R300_ZB_DEPTHPITCH, 1); 216 + ADD_RANGE(R300_ZB_DEPTHCLEARVALUE, 1); 217 + ADD_RANGE(R300_ZB_ZMASK_OFFSET, 13); 220 218 221 219 ADD_RANGE(R300_TX_FILTER_0, 16); 222 220 ADD_RANGE(R300_TX_FILTER1_0, 16); ··· 227 229 ADD_RANGE(R300_TX_BORDER_COLOR_0, 16); 228 230 229 231 /* Sporadic registers used as primitives are emitted */ 230 - ADD_RANGE(R300_RB3D_ZCACHE_CTLSTAT, 1); 232 + ADD_RANGE(R300_ZB_ZCACHE_CTLSTAT, 1); 231 233 ADD_RANGE(R300_RB3D_DSTCACHE_CTLSTAT, 1); 232 234 ADD_RANGE(R300_VAP_INPUT_ROUTE_0_0, 8); 233 235 ADD_RANGE(R300_VAP_INPUT_ROUTE_1_0, 8); ··· 241 243 ADD_RANGE(R500_RS_INST_0, 16); 242 244 ADD_RANGE(R500_RB3D_COLOR_CLEAR_VALUE_AR, 2); 243 245 ADD_RANGE(R500_RB3D_CONSTANT_COLOR_AR, 2); 246 + ADD_RANGE(R500_ZB_FIFO_SIZE, 2); 244 247 } else { 245 248 ADD_RANGE(R300_PFS_CNTL_0, 3); 246 249 ADD_RANGE(R300_PFS_NODE_0, 4); ··· 718 719 BEGIN_RING(6); 719 720 OUT_RING(CP_PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0)); 720 721 OUT_RING(R300_RB3D_DSTCACHE_UNKNOWN_0A); 721 - OUT_RING(CP_PACKET0(R300_RB3D_ZCACHE_CTLSTAT, 0)); 722 - OUT_RING(R300_RB3D_ZCACHE_UNKNOWN_03); 722 + OUT_RING(CP_PACKET0(R300_ZB_ZCACHE_CTLSTAT, 0)); 723 + OUT_RING(R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_FLUSH_AND_FREE| 724 + R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE); 723 725 OUT_RING(CP_PACKET3(RADEON_CP_NOP, 0)); 724 726 OUT_RING(0x0); 725 727 ADVANCE_RING();
+179 -49
drivers/char/drm/r300_reg.h
··· 702 702 # define R300_RS_ROUTE_1_UNKNOWN11 (1 << 11) 703 703 /* END: Rasterization / Interpolators - many guesses */ 704 704 705 + /* Hierarchical Z Enable */ 706 + #define R300_SC_HYPERZ 0x43a4 707 + # define R300_SC_HYPERZ_DISABLE (0 << 0) 708 + # define R300_SC_HYPERZ_ENABLE (1 << 0) 709 + # define R300_SC_HYPERZ_MIN (0 << 1) 710 + # define R300_SC_HYPERZ_MAX (1 << 1) 711 + # define R300_SC_HYPERZ_ADJ_256 (0 << 2) 712 + # define R300_SC_HYPERZ_ADJ_128 (1 << 2) 713 + # define R300_SC_HYPERZ_ADJ_64 (2 << 2) 714 + # define R300_SC_HYPERZ_ADJ_32 (3 << 2) 715 + # define R300_SC_HYPERZ_ADJ_16 (4 << 2) 716 + # define R300_SC_HYPERZ_ADJ_8 (5 << 2) 717 + # define R300_SC_HYPERZ_ADJ_4 (6 << 2) 718 + # define R300_SC_HYPERZ_ADJ_2 (7 << 2) 719 + # define R300_SC_HYPERZ_HZ_Z0MIN_NO (0 << 5) 720 + # define R300_SC_HYPERZ_HZ_Z0MIN (1 << 5) 721 + # define R300_SC_HYPERZ_HZ_Z0MAX_NO (0 << 6) 722 + # define R300_SC_HYPERZ_HZ_Z0MAX (1 << 6) 723 + 724 + #define R300_SC_EDGERULE 0x43a8 725 + 705 726 /* BEGIN: Scissors and cliprects */ 706 727 707 728 /* There are four clipping rectangles. Their corner coordinates are inclusive. ··· 1376 1355 * for this. 1377 1356 * Bit (1<<8) is the "test" bit. so plain write is 6 - vd 1378 1357 */ 1379 - #define R300_RB3D_ZSTENCIL_CNTL_0 0x4F00 1380 - # define R300_RB3D_Z_DISABLED_1 0x00000010 1381 - # define R300_RB3D_Z_DISABLED_2 0x00000014 1382 - # define R300_RB3D_Z_TEST 0x00000012 1383 - # define R300_RB3D_Z_TEST_AND_WRITE 0x00000016 1384 - # define R300_RB3D_Z_WRITE_ONLY 0x00000006 1358 + #define R300_ZB_CNTL 0x4F00 1359 + # define R300_STENCIL_ENABLE (1 << 0) 1360 + # define R300_Z_ENABLE (1 << 1) 1361 + # define R300_Z_WRITE_ENABLE (1 << 2) 1362 + # define R300_Z_SIGNED_COMPARE (1 << 3) 1363 + # define R300_STENCIL_FRONT_BACK (1 << 4) 1385 1364 1386 - # define R300_RB3D_Z_TEST 0x00000012 1387 - # define R300_RB3D_Z_TEST_AND_WRITE 0x00000016 1388 - # define R300_RB3D_Z_WRITE_ONLY 0x00000006 1389 - # define R300_RB3D_STENCIL_ENABLE 0x00000001 1390 - 1391 - #define R300_RB3D_ZSTENCIL_CNTL_1 0x4F04 1365 + #define R300_ZB_ZSTENCILCNTL 0x4f04 1392 1366 /* functions */ 1393 1367 # define R300_ZS_NEVER 0 1394 1368 # define R300_ZS_LESS 1 ··· 1403 1387 # define R300_ZS_INVERT 5 1404 1388 # define R300_ZS_INCR_WRAP 6 1405 1389 # define R300_ZS_DECR_WRAP 7 1390 + # define R300_Z_FUNC_SHIFT 0 1406 1391 /* front and back refer to operations done for front 1407 1392 and back faces, i.e. separate stencil function support */ 1408 - # define R300_RB3D_ZS1_DEPTH_FUNC_SHIFT 0 1409 - # define R300_RB3D_ZS1_FRONT_FUNC_SHIFT 3 1410 - # define R300_RB3D_ZS1_FRONT_FAIL_OP_SHIFT 6 1411 - # define R300_RB3D_ZS1_FRONT_ZPASS_OP_SHIFT 9 1412 - # define R300_RB3D_ZS1_FRONT_ZFAIL_OP_SHIFT 12 1413 - # define R300_RB3D_ZS1_BACK_FUNC_SHIFT 15 1414 - # define R300_RB3D_ZS1_BACK_FAIL_OP_SHIFT 18 1415 - # define R300_RB3D_ZS1_BACK_ZPASS_OP_SHIFT 21 1416 - # define R300_RB3D_ZS1_BACK_ZFAIL_OP_SHIFT 24 1393 + # define R300_S_FRONT_FUNC_SHIFT 3 1394 + # define R300_S_FRONT_SFAIL_OP_SHIFT 6 1395 + # define R300_S_FRONT_ZPASS_OP_SHIFT 9 1396 + # define R300_S_FRONT_ZFAIL_OP_SHIFT 12 1397 + # define R300_S_BACK_FUNC_SHIFT 15 1398 + # define R300_S_BACK_SFAIL_OP_SHIFT 18 1399 + # define R300_S_BACK_ZPASS_OP_SHIFT 21 1400 + # define R300_S_BACK_ZFAIL_OP_SHIFT 24 1417 1401 1418 - #define R300_RB3D_ZSTENCIL_CNTL_2 0x4F08 1419 - # define R300_RB3D_ZS2_STENCIL_REF_SHIFT 0 1420 - # define R300_RB3D_ZS2_STENCIL_MASK 0xFF 1421 - # define R300_RB3D_ZS2_STENCIL_MASK_SHIFT 8 1422 - # define R300_RB3D_ZS2_STENCIL_WRITE_MASK_SHIFT 16 1423 - 1424 - /* gap */ 1425 - 1426 - #define R300_RB3D_ZSTENCIL_FORMAT 0x4F10 1427 - # define R300_DEPTH_FORMAT_16BIT_INT_Z (0 << 0) 1428 - # define R300_DEPTH_FORMAT_24BIT_INT_Z (2 << 0) 1429 - /* 16 bit format or some aditional bit ? */ 1430 - # define R300_DEPTH_FORMAT_UNK32 (32 << 0) 1431 - 1432 - #define R300_RB3D_EARLY_Z 0x4F14 1433 - # define R300_EARLY_Z_DISABLE (0 << 0) 1434 - # define R300_EARLY_Z_ENABLE (1 << 0) 1402 + #define R300_ZB_STENCILREFMASK 0x4f08 1403 + # define R300_STENCILREF_SHIFT 0 1404 + # define R300_STENCILREF_MASK 0x000000ff 1405 + # define R300_STENCILMASK_SHIFT 8 1406 + # define R300_STENCILMASK_MASK 0x0000ff00 1407 + # define R300_STENCILWRITEMASK_SHIFT 16 1408 + # define R300_STENCILWRITEMASK_MASK 0x00ff0000 1435 1409 1436 1410 /* gap */ 1437 1411 1438 - #define R300_RB3D_ZCACHE_CTLSTAT 0x4F18 /* GUESS */ 1439 - # define R300_RB3D_ZCACHE_UNKNOWN_01 0x1 1440 - # define R300_RB3D_ZCACHE_UNKNOWN_03 0x3 1412 + #define R300_ZB_FORMAT 0x4f10 1413 + # define R300_DEPTHFORMAT_16BIT_INT_Z (0 << 0) 1414 + # define R300_DEPTHFORMAT_16BIT_13E3 (1 << 0) 1415 + # define R300_DEPTHFORMAT_24BIT_INT_Z_8BIT_STENCIL (2 << 0) 1416 + /* reserved up to (15 << 0) */ 1417 + # define R300_INVERT_13E3_LEADING_ONES (0 << 4) 1418 + # define R300_INVERT_13E3_LEADING_ZEROS (1 << 4) 1419 + 1420 + #define R300_ZB_ZTOP 0x4F14 1421 + # define R300_ZTOP_DISABLE (0 << 0) 1422 + # define R300_ZTOP_ENABLE (1 << 0) 1441 1423 1442 1424 /* gap */ 1443 1425 1444 - #define R300_RB3D_DEPTHOFFSET 0x4F20 1445 - #define R300_RB3D_DEPTHPITCH 0x4F24 1446 - # define R300_DEPTHPITCH_MASK 0x00001FF8 /* GUESS */ 1447 - # define R300_DEPTH_TILE_ENABLE (1 << 16) /* GUESS */ 1448 - # define R300_DEPTH_MICROTILE_ENABLE (1 << 17) /* GUESS */ 1449 - # define R300_DEPTH_ENDIAN_NO_SWAP (0 << 18) /* GUESS */ 1450 - # define R300_DEPTH_ENDIAN_WORD_SWAP (1 << 18) /* GUESS */ 1451 - # define R300_DEPTH_ENDIAN_DWORD_SWAP (2 << 18) /* GUESS */ 1426 + #define R300_ZB_ZCACHE_CTLSTAT 0x4f18 1427 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_NO_EFFECT (0 << 0) 1428 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_FLUSH_AND_FREE (1 << 0) 1429 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_NO_EFFECT (0 << 1) 1430 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE (1 << 1) 1431 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_BUSY_IDLE (0 << 31) 1432 + # define R300_ZB_ZCACHE_CTLSTAT_ZC_BUSY_BUSY (1 << 31) 1433 + 1434 + #define R300_ZB_BW_CNTL 0x4f1c 1435 + # define R300_HIZ_DISABLE (0 << 0) 1436 + # define R300_HIZ_ENABLE (1 << 0) 1437 + # define R300_HIZ_MIN (0 << 1) 1438 + # define R300_HIZ_MAX (1 << 1) 1439 + # define R300_FAST_FILL_DISABLE (0 << 2) 1440 + # define R300_FAST_FILL_ENABLE (1 << 2) 1441 + # define R300_RD_COMP_DISABLE (0 << 3) 1442 + # define R300_RD_COMP_ENABLE (1 << 3) 1443 + # define R300_WR_COMP_DISABLE (0 << 4) 1444 + # define R300_WR_COMP_ENABLE (1 << 4) 1445 + # define R300_ZB_CB_CLEAR_RMW (0 << 5) 1446 + # define R300_ZB_CB_CLEAR_CACHE_LINEAR (1 << 5) 1447 + # define R300_FORCE_COMPRESSED_STENCIL_VALUE_DISABLE (0 << 6) 1448 + # define R300_FORCE_COMPRESSED_STENCIL_VALUE_ENABLE (1 << 6) 1449 + 1450 + # define R500_ZEQUAL_OPTIMIZE_ENABLE (0 << 7) 1451 + # define R500_ZEQUAL_OPTIMIZE_DISABLE (1 << 7) 1452 + # define R500_SEQUAL_OPTIMIZE_ENABLE (0 << 8) 1453 + # define R500_SEQUAL_OPTIMIZE_DISABLE (1 << 8) 1454 + 1455 + # define R500_BMASK_ENABLE (0 << 10) 1456 + # define R500_BMASK_DISABLE (1 << 10) 1457 + # define R500_HIZ_EQUAL_REJECT_DISABLE (0 << 11) 1458 + # define R500_HIZ_EQUAL_REJECT_ENABLE (1 << 11) 1459 + # define R500_HIZ_FP_EXP_BITS_DISABLE (0 << 12) 1460 + # define R500_HIZ_FP_EXP_BITS_1 (1 << 12) 1461 + # define R500_HIZ_FP_EXP_BITS_2 (2 << 12) 1462 + # define R500_HIZ_FP_EXP_BITS_3 (3 << 12) 1463 + # define R500_HIZ_FP_EXP_BITS_4 (4 << 12) 1464 + # define R500_HIZ_FP_EXP_BITS_5 (5 << 12) 1465 + # define R500_HIZ_FP_INVERT_LEADING_ONES (0 << 15) 1466 + # define R500_HIZ_FP_INVERT_LEADING_ZEROS (1 << 15) 1467 + # define R500_TILE_OVERWRITE_RECOMPRESSION_ENABLE (0 << 16) 1468 + # define R500_TILE_OVERWRITE_RECOMPRESSION_DISABLE (1 << 16) 1469 + # define R500_CONTIGUOUS_6XAA_SAMPLES_ENABLE (0 << 17) 1470 + # define R500_CONTIGUOUS_6XAA_SAMPLES_DISABLE (1 << 17) 1471 + # define R500_PEQ_PACKING_DISABLE (0 << 18) 1472 + # define R500_PEQ_PACKING_ENABLE (1 << 18) 1473 + # define R500_COVERED_PTR_MASKING_DISABLE (0 << 18) 1474 + # define R500_COVERED_PTR_MASKING_ENABLE (1 << 18) 1475 + 1476 + 1477 + /* gap */ 1478 + 1479 + /* Z Buffer Address Offset. 1480 + * Bits 31 to 5 are used for aligned Z buffer address offset for macro tiles. 1481 + */ 1482 + #define R300_ZB_DEPTHOFFSET 0x4f20 1483 + 1484 + /* Z Buffer Pitch and Endian Control */ 1485 + #define R300_ZB_DEPTHPITCH 0x4f24 1486 + # define R300_DEPTHPITCH_MASK 0x00003FFC 1487 + # define R300_DEPTHMACROTILE_DISABLE (0 << 16) 1488 + # define R300_DEPTHMACROTILE_ENABLE (1 << 16) 1489 + # define R300_DEPTHMICROTILE_LINEAR (0 << 17) 1490 + # define R300_DEPTHMICROTILE_TILED (1 << 17) 1491 + # define R300_DEPTHMICROTILE_TILED_SQUARE (2 << 17) 1492 + # define R300_DEPTHENDIAN_NO_SWAP (0 << 18) 1493 + # define R300_DEPTHENDIAN_WORD_SWAP (1 << 18) 1494 + # define R300_DEPTHENDIAN_DWORD_SWAP (2 << 18) 1495 + # define R300_DEPTHENDIAN_HALF_DWORD_SWAP (3 << 18) 1496 + 1497 + /* Z Buffer Clear Value */ 1498 + #define R300_ZB_DEPTHCLEARVALUE 0x4f28 1499 + 1500 + #define R300_ZB_ZMASK_OFFSET 0x4f30 1501 + #define R300_ZB_ZMASK_PITCH 0x4f34 1502 + #define R300_ZB_ZMASK_WRINDEX 0x4f38 1503 + #define R300_ZB_ZMASK_DWORD 0x4f3c 1504 + #define R300_ZB_ZMASK_RDINDEX 0x4f40 1505 + 1506 + /* Hierarchical Z Memory Offset */ 1507 + #define R300_ZB_HIZ_OFFSET 0x4f44 1508 + 1509 + /* Hierarchical Z Write Index */ 1510 + #define R300_ZB_HIZ_WRINDEX 0x4f48 1511 + 1512 + /* Hierarchical Z Data */ 1513 + #define R300_ZB_HIZ_DWORD 0x4f4c 1514 + 1515 + /* Hierarchical Z Read Index */ 1516 + #define R300_ZB_HIZ_RDINDEX 0x4f50 1517 + 1518 + /* Hierarchical Z Pitch */ 1519 + #define R300_ZB_HIZ_PITCH 0x4f54 1520 + 1521 + /* Z Buffer Z Pass Counter Data */ 1522 + #define R300_ZB_ZPASS_DATA 0x4f58 1523 + 1524 + /* Z Buffer Z Pass Counter Address */ 1525 + #define R300_ZB_ZPASS_ADDR 0x4f5c 1526 + 1527 + /* Depth buffer X and Y coordinate offset */ 1528 + #define R300_ZB_DEPTHXY_OFFSET 0x4f60 1529 + # define R300_DEPTHX_OFFSET_SHIFT 1 1530 + # define R300_DEPTHX_OFFSET_MASK 0x000007FE 1531 + # define R300_DEPTHY_OFFSET_SHIFT 17 1532 + # define R300_DEPTHY_OFFSET_MASK 0x07FE0000 1533 + 1534 + /* Sets the fifo sizes */ 1535 + #define R500_ZB_FIFO_SIZE 0x4fd0 1536 + # define R500_OP_FIFO_SIZE_FULL (0 << 0) 1537 + # define R500_OP_FIFO_SIZE_HALF (1 << 0) 1538 + # define R500_OP_FIFO_SIZE_QUATER (2 << 0) 1539 + # define R500_OP_FIFO_SIZE_EIGTHS (4 << 0) 1540 + 1541 + /* Stencil Reference Value and Mask for backfacing quads */ 1542 + /* R300_ZB_STENCILREFMASK handles front face */ 1543 + #define R500_ZB_STENCILREFMASK_BF 0x4fd4 1544 + # define R500_STENCILREF_SHIFT 0 1545 + # define R500_STENCILREF_MASK 0x000000ff 1546 + # define R500_STENCILMASK_SHIFT 8 1547 + # define R500_STENCILMASK_MASK 0x0000ff00 1548 + # define R500_STENCILWRITEMASK_SHIFT 16 1549 + # define R500_STENCILWRITEMASK_MASK 0x00ff0000 1452 1550 1453 1551 /* BEGIN: Vertex program instruction set */ 1454 1552