Rev 736 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 736 | Rev 791 | ||
---|---|---|---|
Line 64... | Line 64... | ||
64 | Rickard E. Faith |
64 | Rickard E. Faith |
65 | Alan Hourihane |
65 | Alan Hourihane |
Line 66... | Line 66... | ||
66 | 66 | ||
Line -... | Line 67... | ||
- | 67 | end if |
|
- | 68 | ||
- | 69 | RADEON_CP_ME_RAM_ADDR equ 0x07d4 |
|
- | 70 | RADEON_CP_ME_RAM_RADDR equ 0x07d8 |
|
- | 71 | RADEON_CP_ME_RAM_DATAH equ 0x07dc |
|
- | 72 | RADEON_CP_ME_RAM_DATAL equ 0x07e0 |
|
- | 73 | ||
- | 74 | RADEON_CP_RB_BASE equ 0x0700 |
|
- | 75 | RADEON_CP_RB_CNTL equ 0x0704 |
|
- | 76 | RADEON_RB_NO_UPDATE equ (1 shl 27) |
|
- | 77 | RADEON_CP_RB_RPTR_ADDR equ 0x070c |
|
- | 78 | RADEON_CP_RB_RPTR equ 0x0710 |
|
- | 79 | RADEON_CP_RB_WPTR equ 0x0714 |
|
- | 80 | ||
- | 81 | RADEON_CP_CSQ_CNTL equ 0x0740 |
|
- | 82 | RADEON_CSQ_CNT_PRIMARY_MASK equ (0xff shl 0) |
|
- | 83 | RADEON_CSQ_PRIDIS_INDDIS equ (0 shl 28) |
|
- | 84 | RADEON_CSQ_PRIPIO_INDDIS equ (1 shl 28) |
|
- | 85 | RADEON_CSQ_PRIBM_INDDIS equ (2 shl 28) |
|
- | 86 | RADEON_CSQ_PRIPIO_INDBM equ (3 shl 28) |
|
- | 87 | RADEON_CSQ_PRIBM_INDBM equ (4 shl 28) |
|
- | 88 | RADEON_CSQ_PRIPIO_INDPIO equ (15 shl 28) |
|
- | 89 | ||
- | 90 | RADEON_CP_RB_WPTR_DELAY equ 0x0718 |
|
- | 91 | ||
- | 92 | RADEON_SCRATCH_UMSK equ 0x0770 |
|
- | 93 | RADEON_SCRATCH_ADDR equ 0x0774 |
|
- | 94 | ||
- | 95 | RADEON_ISYNC_CNTL equ 0x1724 |
|
- | 96 | RADEON_ISYNC_ANY2D_IDLE3D equ (1 shl 0) |
|
- | 97 | RADEON_ISYNC_ANY3D_IDLE2D equ (1 shl 1) |
|
- | 98 | RADEON_ISYNC_TRIG2D_IDLE3D equ (1 shl 2) |
|
- | 99 | RADEON_ISYNC_TRIG3D_IDLE2D equ (1 shl 3) |
|
- | 100 | RADEON_ISYNC_WAIT_IDLEGUI equ (1 shl 4) |
|
- | 101 | RADEON_ISYNC_CPSCRATCH_IDLEGUI equ (1 shl 5) |
|
- | 102 | ||
- | 103 | RADEON_AIC_CNTL equ 0x01d0 |
|
- | 104 | RADEON_PCIGART_TRANSLATE_EN equ (1 shl 0) |
|
- | 105 | RADEON_AIC_STAT equ 0x01d4 |
|
- | 106 | RADEON_AIC_PT_BASE equ 0x01d8 |
|
- | 107 | RADEON_AIC_LO_ADDR equ 0x01dc |
|
- | 108 | RADEON_AIC_HI_ADDR equ 0x01e0 |
|
- | 109 | RADEON_AIC_TLB_ADDR equ 0x01e4 |
|
- | 110 | RADEON_AIC_TLB_DATA equ 0x01e8 |
|
- | 111 | ||
- | 112 | RADEON_WAIT_UNTIL equ 0x1720 |
|
- | 113 | RADEON_WAIT_CRTC_PFLIP equ (1 shl 0) |
|
- | 114 | RADEON_WAIT_2D_IDLE equ (1 shl 14) |
|
- | 115 | RADEON_WAIT_3D_IDLE equ (1 shl 15) |
|
- | 116 | RADEON_WAIT_2D_IDLECLEAN equ (1 shl 16) |
|
- | 117 | RADEON_WAIT_3D_IDLECLEAN equ (1 shl 17) |
|
67 | end if |
118 | RADEON_WAIT_HOST_IDLECLEAN equ (1 shl 18) |
68 | 119 | ||
69 | D1GRPH_PITCH equ 0x6120 |
120 | D1GRPH_PITCH equ 0x6120 |
Line 101... | Line 152... | ||
101 | R5XX_DP_DST_TILE_LINEAR equ (0 shl 3) |
152 | R5XX_DP_DST_TILE_LINEAR equ (0 shl 3) |
102 | R5XX_DP_DST_TILE_MACRO equ (1 shl 3) |
153 | R5XX_DP_DST_TILE_MACRO equ (1 shl 3) |
103 | R5XX_DP_DST_TILE_MICRO equ (2 shl 3) |
154 | R5XX_DP_DST_TILE_MICRO equ (2 shl 3) |
104 | R5XX_DP_DST_TILE_BOTH equ (3 shl 3) |
155 | R5XX_DP_DST_TILE_BOTH equ (3 shl 3) |
Line -... | Line 156... | ||
- | 156 | ||
- | 157 | RADEON_RB3D_ZCACHE_CTLSTAT equ 0x3254 |
|
- | 158 | RADEON_RB3D_ZC_FLUSH equ (1 shl 0) |
|
- | 159 | RADEON_RB3D_ZC_FREE equ (1 shl 2) |
|
- | 160 | RADEON_RB3D_ZC_FLUSH_ALL equ 0x5 |
|
Line 105... | Line 161... | ||
105 | 161 | RADEON_RB3D_ZC_BUSY equ (1 shl 31) |
|
106 | 162 | ||
107 | R5XX_RB3D_DSTCACHE_CTLSTAT equ 0x325C |
163 | R5XX_RB3D_DSTCACHE_CTLSTAT equ 0x325C |
108 | R5XX_RB3D_DC_FLUSH equ (3 shl 0) |
164 | R5XX_RB3D_DC_FLUSH equ (3 shl 0) |
Line 247... | Line 303... | ||
247 | R5XX_DP_SRC_BKGD_CLR equ 0x15dc |
303 | R5XX_DP_SRC_BKGD_CLR equ 0x15dc |
248 | R5XX_DP_SRC_FRGD_CLR equ 0x15d8 |
304 | R5XX_DP_SRC_FRGD_CLR equ 0x15d8 |
Line 249... | Line 305... | ||
249 | 305 | ||
Line -... | Line 306... | ||
- | 306 | R5XX_DP_WRITE_MASK equ 0x16cc |
|
- | 307 | ||
- | 308 | ||
250 | R5XX_DP_WRITE_MASK equ 0x16cc |
309 | RADEON_CP_PACKET0 equ 0x00000000 |
251 | 310 | ||
252 | struc RHD |
311 | struc RHD |
253 | { |
312 | { |
254 | .control rd 1 |
313 | .control rd 1 |
255 | .control_saved rd 1 |
314 | .control_saved rd 1 |
256 | .datatype rd 1 |
315 | .datatype rd 1 |
- | 316 | .surface_cntl rd 1 |
|
- | 317 | .dst_pitch_offset rd 1 |
|
- | 318 | .ring_base rd 1 |
|
257 | .surface_cntl rd 1 |
319 | .ring_rp rd 1 |
Line 258... | Line 320... | ||
258 | .dst_pitch_offset rd 1 |
320 | .ring_wp rd 1 |
Line -... | Line 321... | ||
- | 321 | }; |
|
- | 322 | ||
259 | }; |
323 | R5XX_LOOP_COUNT equ 2000000 |
260 | 324 | ||
Line 261... | Line 325... | ||
261 | R5XX_LOOP_COUNT equ 2000000 |
325 | |
262 | 326 | ||
Line 482... | Line 546... | ||
482 | 546 | ||
Line 483... | Line 547... | ||
483 | mov [rhd.dst_pitch_offset], eax |
547 | mov [rhd.dst_pitch_offset], eax |
Line -... | Line 548... | ||
- | 548 | ||
- | 549 | ret |
|
- | 550 | ||
- | 551 | RADEON_BUS_CNTL equ 0x0030 |
|
- | 552 | RADEON_BUS_MASTER_DIS equ (1 shl 6) |
|
- | 553 | ||
- | 554 | align 4 |
|
- | 555 | R5xxCpInit: |
|
- | 556 | stdcall CreateRingBuffer, 0x8000, PG_SW+PG_NOCACHE |
|
- | 557 | test eax, eax |
|
- | 558 | jz .fail |
|
- | 559 | ||
- | 560 | mov [rhd.ring_base], eax |
|
- | 561 | call GetPgAddr |
|
- | 562 | ||
- | 563 | wrr RADEON_CP_RB_BASE, eax |
|
- | 564 | ||
- | 565 | wrr RADEON_CP_RB_WPTR_DELAY, 0 |
|
- | 566 | ||
- | 567 | rdr ebx, RADEON_CP_RB_RPTR |
|
- | 568 | wrr RADEON_CP_RB_WPTR, ebx |
|
- | 569 | ||
- | 570 | mov [rhd.ring_rp], ebx |
|
- | 571 | mov [rhd.ring_wp], ebx |
|
- | 572 | ||
- | 573 | wrr RADEON_CP_RB_RPTR_ADDR, 0 ;ring buffer read pointer |
|
- | 574 | ;no update |
|
- | 575 | ||
- | 576 | wrr RADEON_CP_RB_CNTL, RADEON_RB_NO_UPDATE + 12 |
|
- | 577 | wrr RADEON_SCRATCH_UMSK, 0 ;no scratch update |
|
- | 578 | ||
- | 579 | rdr ebx, RADEON_BUS_CNTL |
|
- | 580 | and ebx, not RADEON_BUS_MASTER_DIS |
|
- | 581 | ||
- | 582 | wrr RADEON_BUS_CNTL, ebx |
|
- | 583 | ||
- | 584 | ; wrr RADEON_LAST_FRAME_REG, 0 |
|
- | 585 | ; wrr RADEON_LAST_DISPATCH_REG, 0 |
|
- | 586 | ; wrr RADEON_LAST_CLEAR_REG, 0 |
|
- | 587 | ||
- | 588 | call R5xx2DIdleLocal |
|
- | 589 | ||
- | 590 | wrr RADEON_ISYNC_CNTL, RADEON_ISYNC_ANY2D_IDLE3D + \ |
|
- | 591 | RADEON_ISYNC_ANY3D_IDLE2D + \ |
|
- | 592 | RADEON_ISYNC_WAIT_IDLEGUI + \ |
|
- | 593 | RADEON_ISYNC_CPSCRATCH_IDLEGUI |
|
- | 594 | .fail: |
|
- | 595 | ret |
|
- | 596 | ||
- | 597 | align 4 |
|
- | 598 | load_microcode: |
|
- | 599 | ||
- | 600 | pushfd |
|
- | 601 | cli |
|
- | 602 | ||
- | 603 | call R5xx2DIdleLocal |
|
- | 604 | ||
- | 605 | wrr RADEON_CP_ME_RAM_ADDR, 0 |
|
- | 606 | ||
- | 607 | lea esi, [R520_cp_microcode] |
|
- | 608 | mov ecx, 256 |
|
- | 609 | @@: |
|
- | 610 | mov eax, [esi] |
|
- | 611 | mov ebx, [esi+4] |
|
- | 612 | wrr RADEON_CP_ME_RAM_DATAH, ebx |
|
- | 613 | wrr RADEON_CP_ME_RAM_DATAL, eax |
|
- | 614 | add esi, 8 |
|
- | 615 | loop @B |
|
- | 616 | ||
- | 617 | popfd |
|
484 | 618 | ret |
|
485 | ret |
619 | |
Line 486... | Line 620... | ||
486 | 620 | ||
487 | align 4 |
621 | align 4 |
- | 622 | R5xx2DInit: |
|
488 | R5xx2DInit: |
623 | |
489 | 624 | call R5xx2DPreInit |
|
Line -... | Line 625... | ||
- | 625 | wrr R5XX_RB3D_CNTL, 0 |
|
- | 626 | ||
- | 627 | call R5xx2DReset |
|
- | 628 | call R5xx2DSetup |
|
- | 629 | ||
- | 630 | rdr eax, RADEON_AIC_CNTL ;disable GART |
|
- | 631 | and eax, not RADEON_PCIGART_TRANSLATE_EN |
|
- | 632 | wrr RADEON_AIC_CNTL, eax |
|
490 | call R5xx2DPreInit |
633 | |
491 | wrr R5XX_RB3D_CNTL, 0 |
634 | call load_microcode |
492 | call R5xx2DReset |
635 | |
493 | call R5xx2DSetup |
636 | call R5xxCpInit |
Line 494... | Line 637... | ||
494 | 637 | ||
495 | rdr eax, D1GRPH_X_END |
638 | rdr eax, D1GRPH_X_END |
496 | rdr ebx, D1GRPH_Y_END |
639 | rdr ebx, D1GRPH_Y_END |
497 | dec eax |
640 | dec eax |
Line -... | Line 641... | ||
- | 641 | dec ebx |
|
- | 642 | ||
- | 643 | mov [__xmin], 0 ;set clip |
|
- | 644 | mov [__ymin], 0 |
|
- | 645 | mov [__xmax], eax |
|
- | 646 | mov [__ymax], ebx |
|
- | 647 | ||
- | 648 | wrr RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM |
|
498 | dec ebx |
649 | |
Line 499... | Line 650... | ||
499 | 650 | ; BEGIN_RING |
|
Line 500... | Line 651... | ||
500 | mov [__xmin], 0 ;set clip |
651 | ; RADEON_PURGE_CACHE |
Line 663... | Line 814... | ||
663 | LINE2P LINE2P |
814 | LINE2P LINE2P |
664 | end virtual |
815 | end virtual |
Line 665... | Line 816... | ||
665 | 816 | ||
Line -... | Line 817... | ||
- | 817 | GXcopy equ 3 |
|
- | 818 | ||
- | 819 | RADEON_CP_PACKET3 equ 0xC0000000 |
|
- | 820 | ||
- | 821 | PAINT_MULTI equ 0xC0009A00 |
|
- | 822 | ||
- | 823 | DST_PITCH_OFFSET_CNTL equ ( 1 shl 1) |
|
- | 824 | BRUSH_SOLID_COLOR equ ( 13 shl 4) |
|
- | 825 | COLOR_ARGB equ ( 6 shl 8) |
|
- | 826 | SRC_DATATYPE_COLOR equ ( 3 shl 12) |
|
- | 827 | ||
666 | GXcopy equ 3 |
828 | ;RADEON_ROP3_P equ |
667 | 829 | ||
668 | ; esi= input params |
830 | ; esi= input params |
Line 669... | Line 831... | ||
669 | align 4 |
831 | align 4 |
Line 694... | Line 856... | ||
694 | call _BlockClip |
856 | call _BlockClip |
695 | add esp, 16 |
857 | add esp, 16 |
696 | test eax, eax |
858 | test eax, eax |
697 | jnz .exit |
859 | jnz .exit |
Line 698... | Line 860... | ||
698 | 860 | ||
699 | mov edx, [R5xxRops+4+GXcopy*8] |
861 | ;mov edx, [R5xxRops+4+GXcopy*8] |
700 | or edx, [rhd.control] |
862 | ;or edx, [rhd.control] |
Line 701... | Line 863... | ||
701 | or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR) |
863 | ;or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR) |
702 | 864 | ||
Line 703... | Line -... | ||
703 | pushfd |
- | |
704 | cli |
- | |
Line -... | Line 865... | ||
- | 865 | pushfd |
|
- | 866 | cli |
|
705 | 867 | ||
- | 868 | ||
- | 869 | BEGIN_RING |
|
- | 870 | OUT_PACKET3 PAINT_MULTI, 4 |
|
- | 871 | OUT_RING (DST_PITCH_OFFSET_CNTL + \ |
|
- | 872 | BRUSH_SOLID_COLOR + \ |
|
Line 706... | Line -... | ||
706 | mov eax, 7 |
- | |
707 | call R5xxFIFOWait |
- | |
708 | - | ||
709 | wrr R5XX_DP_GUI_MASTER_CNTL, edx |
- | |
710 | - | ||
711 | mov eax, [esi+FILL.color] |
- | |
712 | wrr R5XX_DP_BRUSH_FRGD_CLR, eax |
- | |
713 | 873 | COLOR_ARGB + \ |
|
714 | wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF |
874 | SRC_DATATYPE_COLOR + \ |
Line 715... | Line 875... | ||
715 | 875 | (1 shl 28)+(1 shl 30) + \ |
|
716 | wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM) |
876 | R5XX_ROP3_P) |
717 | 877 | ||
718 | mov eax, [rhd.dst_pitch_offset] |
878 | OUT_RING [rhd.dst_pitch_offset] |
Line 719... | Line 879... | ||
719 | wrr R5XX_DST_PITCH_OFFSET, eax |
879 | OUT_RING [esi+FILL.color] |
720 | 880 | ||
721 | mov ebx, [esi+FILL.y] |
881 | mov ebx, [esi+FILL.y] |
Line 731... | Line 891... | ||
731 | sub eax, [esi+FILL.y] |
891 | sub eax, [esi+FILL.y] |
732 | inc eax ;h |
892 | inc eax ;h |
Line 733... | Line 893... | ||
733 | 893 | ||
734 | shl ecx, 16 |
894 | shl ecx, 16 |
- | 895 | mov cx, ax ;w|h |
|
- | 896 | ||
- | 897 | OUT_RING ecx |
|
- | 898 | COMMIT_RING |
|
- | 899 | ||
- | 900 | if 0 |
|
- | 901 | ; mov eax, 7 |
|
- | 902 | ; call R5xxFIFOWait |
|
- | 903 | ||
- | 904 | ; wrr R5XX_DP_GUI_MASTER_CNTL, edx |
|
- | 905 | ||
- | 906 | ; mov eax, [esi+FILL.color] |
|
- | 907 | ; wrr R5XX_DP_BRUSH_FRGD_CLR, eax |
|
- | 908 | ||
- | 909 | ; wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF |
|
- | 910 | ||
- | 911 | ; wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM) |
|
- | 912 | ||
- | 913 | ; mov eax, [rhd.dst_pitch_offset] |
|
- | 914 | ; wrr R5XX_DST_PITCH_OFFSET, eax |
|
- | 915 | ||
- | 916 | ; mov ebx, [esi+FILL.y] |
|
- | 917 | ; shl ebx, 16 |
|
- | 918 | ; mov bx, word [esi+FILL.x] |
|
- | 919 | ; wrr R5XX_DST_Y_X, ebx |
|
- | 920 | ||
- | 921 | ; mov ecx, [esp+4] ;x2 |
|
- | 922 | ; sub ecx, [esi+FILL.x] |
|
- | 923 | ; inc ecx ;w |
|
- | 924 | ||
- | 925 | ; mov eax, [esp+8] ;y2 |
|
- | 926 | ; sub eax, [esi+FILL.y] |
|
- | 927 | ; inc eax ;h |
|
- | 928 | ||
- | 929 | ; shl ecx, 16 |
|
735 | mov cx, ax ;w|h |
930 | ; mov cx, ax ;w|h |
- | 931 | ; wrr R5XX_DST_WIDTH_HEIGHT, ecx |
|
736 | wrr R5XX_DST_WIDTH_HEIGHT, ecx |
932 | end if |
737 | popfd |
933 | popfd |
738 | .exit: |
934 | .exit: |
739 | add esp, 8 |
935 | add esp, 8 |