From 5d19dd9dc09114f39a53cc5a9af37d6bcb89da4c Mon Sep 17 00:00:00 2001 From: "Sergey Semyonov (Serge)" Date: Sun, 13 Apr 2008 08:31:06 +0000 Subject: [PATCH] initialize command processor. little bit close to 3D rendering git-svn-id: svn://kolibrios.org@791 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/drivers/ati2d.asm | 319 ++++++++++++++++++++++++++++++++ kernel/trunk/drivers/r500hw.inc | 232 +++++++++++++++++++++-- 2 files changed, 533 insertions(+), 18 deletions(-) diff --git a/kernel/trunk/drivers/ati2d.asm b/kernel/trunk/drivers/ati2d.asm index dc27bae224..b8b97f1d1d 100644 --- a/kernel/trunk/drivers/ati2d.asm +++ b/kernel/trunk/drivers/ati2d.asm @@ -152,6 +152,64 @@ macro rdr op1, op2 mov op1, [edi+op2] } +macro BEGIN_RING +{ + mov edi, [rhd.ring_base] + mov edx, [rhd.ring_wp] +} + +macro COMMIT_RING +{ + and edx, 0x1FFF + mov [rhd.ring_wp], edx + + lock add [esp], dword 0 ; Flush writes to ring + + wrr RADEON_CP_RB_WPTR, edx + rdr eax, RADEON_CP_RB_RPTR +} + +macro OUT_PACKET0 reg, count +{ + mov eax, (RADEON_CP_PACKET0 + (count shl 16) + (reg shr 2)) + mov [edi+edx*4], eax + inc edx +} + +macro OUT_PACKET3 pkt, count \ +{ + mov eax, (RADEON_CP_PACKET3 or pkt or (count shl 16)) + mov [edi+edx*4], eax + inc edx +} + +macro OUT_RING val +{ + mov eax, val + mov [edi+edx*4], eax + inc edx +} + +macro RADEON_WAIT_UNTIL_IDLE +{ + OUT_PACKET0 RADEON_WAIT_UNTIL, 0 + OUT_RING RADEON_WAIT_2D_IDLECLEAN + \ + RADEON_WAIT_3D_IDLECLEAN + \ + RADEON_WAIT_HOST_IDLECLEAN +} + +macro RADEON_PURGE_CACHE +{ + OUT_PACKET0 R5XX_RB3D_DSTCACHE_CTLSTAT, 0 + OUT_RING R5XX_RB3D_DC_FLUSH_ALL +} + +macro RADEON_PURGE_ZCACHE +{ + OUT_PACKET0 RADEON_RB3D_ZCACHE_CTLSTAT, 0 + OUT_RING RADEON_RB3D_ZC_FLUSH_ALL +} + macro wrr dest, src { mov edi, [ati_io] @@ -1246,6 +1304,267 @@ msgR5xxFIFOWaitLocaltimeout \ db 'R5xxFIFOWaitLocal timeout error', 13, 10,0 msgR5xx2DIdleLocaltimeout \ db 'R5xx2DIdleLocal timeout error', 13,10,0 + +align 4 +R520_cp_microcode: +dd 0x4200e000, 0000000000 +dd 0x4000e000, 0000000000 +dd 0x00000099, 0x00000008 +dd 0x0000009d, 0x00000008 +dd 0x4a554b4a, 0000000000 +dd 0x4a4a4467, 0000000000 +dd 0x55526f75, 0000000000 +dd 0x4a7e7d65, 0000000000 +dd 0xe0dae6f6, 0000000000 +dd 0x4ac54a4a, 0000000000 +dd 0xc8828282, 0000000000 +dd 0xbf4acfc1, 0000000000 +dd 0x87b04ad5, 0000000000 +dd 0xb5838383, 0000000000 +dd 0x4a0f85ba, 0000000000 +dd 0x000ca000, 0x00000004 +dd 0x000d0012, 0x00000038 +dd 0x0000e8b4, 0x00000004 +dd 0x000d0014, 0x00000038 +dd 0x0000e8b6, 0x00000004 +dd 0x000d0016, 0x00000038 +dd 0x0000e854, 0x00000004 +dd 0x000d0018, 0x00000038 +dd 0x0000e855, 0x00000004 +dd 0x000d001a, 0x00000038 +dd 0x0000e856, 0x00000004 +dd 0x000d001c, 0x00000038 +dd 0x0000e857, 0x00000004 +dd 0x000d001e, 0x00000038 +dd 0x0000e824, 0x00000004 +dd 0x000d0020, 0x00000038 +dd 0x0000e825, 0x00000004 +dd 0x000d0022, 0x00000038 +dd 0x0000e830, 0x00000004 +dd 0x000d0024, 0x00000038 +dd 0x0000f0c0, 0x00000004 +dd 0x000d0026, 0x00000038 +dd 0x0000f0c1, 0x00000004 +dd 0x000d0028, 0x00000038 +dd 0x0000e000, 0x00000004 +dd 0x000d002a, 0x00000038 +dd 0x0000e000, 0x00000004 +dd 0x000d002c, 0x00000038 +dd 0x0000e000, 0x00000004 +dd 0x000d002e, 0x00000038 +dd 0x0000e000, 0x00000004 +dd 0x000d0030, 0x00000038 +dd 0x0000e000, 0x00000004 +dd 0x000d0032, 0x00000038 +dd 0x0000f180, 0x00000004 +dd 0x000d0034, 0x00000038 +dd 0x0000f393, 0x00000004 +dd 0x000d0036, 0x00000038 +dd 0x0000f38a, 0x00000004 +dd 0x000d0038, 0x00000038 +dd 0x0000f38e, 0x00000004 +dd 0x0000e821, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x00000043, 0x00000018 +dd 0x00cce800, 0x00000004 +dd 0x001b0001, 0x00000004 +dd 0x08004800, 0x00000004 +dd 0x001b0001, 0x00000004 +dd 0x08004800, 0x00000004 +dd 0x001b0001, 0x00000004 +dd 0x08004800, 0x00000004 +dd 0x0000003a, 0x00000008 +dd 0x0000a000, 0000000000 +dd 0x2000451d, 0x00000004 +dd 0x0000e580, 0x00000004 +dd 0x000ce581, 0x00000004 +dd 0x08004580, 0x00000004 +dd 0x000ce581, 0x00000004 +dd 0x00000047, 0x00000008 +dd 0x0000a000, 0000000000 +dd 0x000c2000, 0x00000004 +dd 0x0000e50e, 0x00000004 +dd 0x00032000, 0x00000004 +dd 0x00022051, 0x00000028 +dd 0x00000051, 0x00000024 +dd 0x0800450f, 0x00000004 +dd 0x0000a04b, 0x00000008 +dd 0x0000e565, 0x00000004 +dd 0x0000e566, 0x00000004 +dd 0x00000052, 0x00000008 +dd 0x03cca5b4, 0x00000004 +dd 0x05432000, 0x00000004 +dd 0x00022000, 0x00000004 +dd 0x4ccce05e, 0x00000030 +dd 0x08274565, 0x00000004 +dd 0x0000005e, 0x00000030 +dd 0x08004564, 0x00000004 +dd 0x0000e566, 0x00000004 +dd 0x00000055, 0x00000008 +dd 0x00802061, 0x00000010 +dd 0x00202000, 0x00000004 +dd 0x001b00ff, 0x00000004 +dd 0x01000064, 0x00000010 +dd 0x001f2000, 0x00000004 +dd 0x001c00ff, 0x00000004 +dd 0000000000, 0x0000000c +dd 0x00000072, 0x00000030 +dd 0x00000055, 0x00000008 +dd 0x0000e576, 0x00000004 +dd 0x0000e577, 0x00000004 +dd 0x0000e50e, 0x00000004 +dd 0x0000e50f, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x00000069, 0x00000018 +dd 0x00c0e5f9, 0x000000c2 +dd 0x00000069, 0x00000008 +dd 0x0014e50e, 0x00000004 +dd 0x0040e50f, 0x00000004 +dd 0x00c0006c, 0x00000008 +dd 0x0000e570, 0x00000004 +dd 0x0000e571, 0x00000004 +dd 0x0000e572, 0x0000000c +dd 0x0000a000, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x0000e568, 0x00000004 +dd 0x000c2000, 0x00000004 +dd 0x00000076, 0x00000018 +dd 0x000b0000, 0x00000004 +dd 0x18c0e562, 0x00000004 +dd 0x00000078, 0x00000008 +dd 0x00c00077, 0x00000008 +dd 0x000700c7, 0x00000004 +dd 0x00000080, 0x00000038 +dd 0x0000e5bb, 0x00000004 +dd 0x0000e5bc, 0000000000 +dd 0x0000a000, 0x00000004 +dd 0x0000e821, 0x00000004 +dd 0x0000e800, 0000000000 +dd 0x0000e821, 0x00000004 +dd 0x0000e82e, 0000000000 +dd 0x02cca000, 0x00000004 +dd 0x00140000, 0x00000004 +dd 0x000ce1cc, 0x00000004 +dd 0x050de1cd, 0x00000004 +dd 0x00400000, 0x00000004 +dd 0x0000008f, 0x00000018 +dd 0x00c0a000, 0x00000004 +dd 0x0000008c, 0x00000008 +dd 0x00000091, 0x00000020 +dd 0x4200e000, 0000000000 +dd 0x00000098, 0x00000038 +dd 0x000ca000, 0x00000004 +dd 0x00140000, 0x00000004 +dd 0x000c2000, 0x00000004 +dd 0x00160000, 0x00000004 +dd 0x700ce000, 0x00000004 +dd 0x00140094, 0x00000008 +dd 0x4000e000, 0000000000 +dd 0x02400000, 0x00000004 +dd 0x400ee000, 0x00000004 +dd 0x02400000, 0x00000004 +dd 0x4000e000, 0000000000 +dd 0x000c2000, 0x00000004 +dd 0x0240e51b, 0x00000004 +dd 0x0080e50a, 0x00000005 +dd 0x0080e50b, 0x00000005 +dd 0x00220000, 0x00000004 +dd 0x000700c7, 0x00000004 +dd 0x000000a4, 0x00000038 +dd 0x0080e5bd, 0x00000005 +dd 0x0000e5bb, 0x00000005 +dd 0x0080e5bc, 0x00000005 +dd 0x00210000, 0x00000004 +dd 0x02800000, 0x00000004 +dd 0x00c000ab, 0x00000018 +dd 0x4180e000, 0x00000040 +dd 0x000000ad, 0x00000024 +dd 0x01000000, 0x0000000c +dd 0x0100e51d, 0x0000000c +dd 0x000045bb, 0x00000004 +dd 0x000080a7, 0x00000008 +dd 0x0000f3ce, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x00cc2000, 0x00000004 +dd 0x08c053cf, 0x00000040 +dd 0x00008000, 0000000000 +dd 0x0000f3d2, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x00cc2000, 0x00000004 +dd 0x08c053d3, 0x00000040 +dd 0x00008000, 0000000000 +dd 0x0000f39d, 0x00000004 +dd 0x0140a000, 0x00000004 +dd 0x00cc2000, 0x00000004 +dd 0x08c0539e, 0x00000040 +dd 0x00008000, 0000000000 +dd 0x03c00830, 0x00000004 +dd 0x4200e000, 0000000000 +dd 0x0000a000, 0x00000004 +dd 0x200045e0, 0x00000004 +dd 0x0000e5e1, 0000000000 +dd 0x00000001, 0000000000 +dd 0x000700c4, 0x00000004 +dd 0x0800e394, 0000000000 +dd 0000000000, 0000000000 +dd 0x0000e8c4, 0x00000004 +dd 0x0000e8c5, 0x00000004 +dd 0x0000e8c6, 0x00000004 +dd 0x0000e928, 0x00000004 +dd 0x0000e929, 0x00000004 +dd 0x0000e92a, 0x00000004 +dd 0x000000c8, 0x00000008 +dd 0x0000e928, 0x00000004 +dd 0x0000e929, 0x00000004 +dd 0x0000e92a, 0x00000004 +dd 0x000000cf, 0x00000008 +dd 0xdeadbeef, 0000000000 +dd 0x00000116, 0000000000 +dd 0x000700d3, 0x00000004 +dd 0x080050e7, 0x00000004 +dd 0x000700d4, 0x00000004 +dd 0x0800401c, 0x00000004 +dd 0x0000e01d, 0000000000 +dd 0x02c02000, 0x00000004 +dd 0x00060000, 0x00000004 +dd 0x000000de, 0x00000034 +dd 0x000000db, 0x00000008 +dd 0x00008000, 0x00000004 +dd 0xc000e000, 0000000000 +dd 0x0000e1cc, 0x00000004 +dd 0x0500e1cd, 0x00000004 +dd 0x000ca000, 0x00000004 +dd 0x000000e5, 0x00000034 +dd 0x000000e1, 0x00000008 +dd 0x0000a000, 0000000000 +dd 0x0019e1cc, 0x00000004 +dd 0x001b0001, 0x00000004 +dd 0x0500a000, 0x00000004 +dd 0x080041cd, 0x00000004 +dd 0x000ca000, 0x00000004 +dd 0x000000fb, 0x00000034 +dd 0x0000004a, 0x00000008 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0x000c2000, 0x00000004 +dd 0x001d0018, 0x00000004 +dd 0x001a0001, 0x00000004 +dd 0x000000fb, 0x00000034 +dd 0x0000004a, 0x00000008 +dd 0x0500a04a, 0x00000008 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 +dd 0000000000, 0000000000 + + end if if 0 diff --git a/kernel/trunk/drivers/r500hw.inc b/kernel/trunk/drivers/r500hw.inc index 00306edab8..32181825bc 100644 --- a/kernel/trunk/drivers/r500hw.inc +++ b/kernel/trunk/drivers/r500hw.inc @@ -66,6 +66,57 @@ if 0 end if +RADEON_CP_ME_RAM_ADDR equ 0x07d4 +RADEON_CP_ME_RAM_RADDR equ 0x07d8 +RADEON_CP_ME_RAM_DATAH equ 0x07dc +RADEON_CP_ME_RAM_DATAL equ 0x07e0 + +RADEON_CP_RB_BASE equ 0x0700 +RADEON_CP_RB_CNTL equ 0x0704 + RADEON_RB_NO_UPDATE equ (1 shl 27) +RADEON_CP_RB_RPTR_ADDR equ 0x070c +RADEON_CP_RB_RPTR equ 0x0710 +RADEON_CP_RB_WPTR equ 0x0714 + +RADEON_CP_CSQ_CNTL equ 0x0740 + RADEON_CSQ_CNT_PRIMARY_MASK equ (0xff shl 0) + RADEON_CSQ_PRIDIS_INDDIS equ (0 shl 28) + RADEON_CSQ_PRIPIO_INDDIS equ (1 shl 28) + RADEON_CSQ_PRIBM_INDDIS equ (2 shl 28) + RADEON_CSQ_PRIPIO_INDBM equ (3 shl 28) + RADEON_CSQ_PRIBM_INDBM equ (4 shl 28) + RADEON_CSQ_PRIPIO_INDPIO equ (15 shl 28) + +RADEON_CP_RB_WPTR_DELAY equ 0x0718 + +RADEON_SCRATCH_UMSK equ 0x0770 +RADEON_SCRATCH_ADDR equ 0x0774 + +RADEON_ISYNC_CNTL equ 0x1724 + RADEON_ISYNC_ANY2D_IDLE3D equ (1 shl 0) + RADEON_ISYNC_ANY3D_IDLE2D equ (1 shl 1) + RADEON_ISYNC_TRIG2D_IDLE3D equ (1 shl 2) + RADEON_ISYNC_TRIG3D_IDLE2D equ (1 shl 3) + RADEON_ISYNC_WAIT_IDLEGUI equ (1 shl 4) + RADEON_ISYNC_CPSCRATCH_IDLEGUI equ (1 shl 5) + +RADEON_AIC_CNTL equ 0x01d0 + RADEON_PCIGART_TRANSLATE_EN equ (1 shl 0) +RADEON_AIC_STAT equ 0x01d4 +RADEON_AIC_PT_BASE equ 0x01d8 +RADEON_AIC_LO_ADDR equ 0x01dc +RADEON_AIC_HI_ADDR equ 0x01e0 +RADEON_AIC_TLB_ADDR equ 0x01e4 +RADEON_AIC_TLB_DATA equ 0x01e8 + +RADEON_WAIT_UNTIL equ 0x1720 + RADEON_WAIT_CRTC_PFLIP equ (1 shl 0) + RADEON_WAIT_2D_IDLE equ (1 shl 14) + RADEON_WAIT_3D_IDLE equ (1 shl 15) + RADEON_WAIT_2D_IDLECLEAN equ (1 shl 16) + RADEON_WAIT_3D_IDLECLEAN equ (1 shl 17) + RADEON_WAIT_HOST_IDLECLEAN equ (1 shl 18) + D1GRPH_PITCH equ 0x6120 D1GRPH_X_END equ 0x6134 D1GRPH_Y_END equ 0x6138 @@ -103,6 +154,11 @@ R5XX_DP_CNTL equ 0x16c0 R5XX_DP_DST_TILE_MICRO equ (2 shl 3) R5XX_DP_DST_TILE_BOTH equ (3 shl 3) +RADEON_RB3D_ZCACHE_CTLSTAT equ 0x3254 + RADEON_RB3D_ZC_FLUSH equ (1 shl 0) + RADEON_RB3D_ZC_FREE equ (1 shl 2) + RADEON_RB3D_ZC_FLUSH_ALL equ 0x5 + RADEON_RB3D_ZC_BUSY equ (1 shl 31) R5XX_RB3D_DSTCACHE_CTLSTAT equ 0x325C R5XX_RB3D_DC_FLUSH equ (3 shl 0) @@ -249,6 +305,9 @@ R5XX_DP_SRC_FRGD_CLR equ 0x15d8 R5XX_DP_WRITE_MASK equ 0x16cc + +RADEON_CP_PACKET0 equ 0x00000000 + struc RHD { .control rd 1 @@ -256,10 +315,15 @@ struc RHD .datatype rd 1 .surface_cntl rd 1 .dst_pitch_offset rd 1 + .ring_base rd 1 + .ring_rp rd 1 + .ring_wp rd 1 }; R5XX_LOOP_COUNT equ 2000000 + + align 4 R5xxFIFOWaitLocal: @@ -484,14 +548,93 @@ R5xx2DPreInit: ret +RADEON_BUS_CNTL equ 0x0030 + RADEON_BUS_MASTER_DIS equ (1 shl 6) + +align 4 +R5xxCpInit: + stdcall CreateRingBuffer, 0x8000, PG_SW+PG_NOCACHE + test eax, eax + jz .fail + + mov [rhd.ring_base], eax + call GetPgAddr + + wrr RADEON_CP_RB_BASE, eax + + wrr RADEON_CP_RB_WPTR_DELAY, 0 + + rdr ebx, RADEON_CP_RB_RPTR + wrr RADEON_CP_RB_WPTR, ebx + + mov [rhd.ring_rp], ebx + mov [rhd.ring_wp], ebx + + wrr RADEON_CP_RB_RPTR_ADDR, 0 ;ring buffer read pointer + ;no update + + wrr RADEON_CP_RB_CNTL, RADEON_RB_NO_UPDATE + 12 + wrr RADEON_SCRATCH_UMSK, 0 ;no scratch update + + rdr ebx, RADEON_BUS_CNTL + and ebx, not RADEON_BUS_MASTER_DIS + + wrr RADEON_BUS_CNTL, ebx + + ; wrr RADEON_LAST_FRAME_REG, 0 + ; wrr RADEON_LAST_DISPATCH_REG, 0 + ; wrr RADEON_LAST_CLEAR_REG, 0 + + call R5xx2DIdleLocal + + wrr RADEON_ISYNC_CNTL, RADEON_ISYNC_ANY2D_IDLE3D + \ + RADEON_ISYNC_ANY3D_IDLE2D + \ + RADEON_ISYNC_WAIT_IDLEGUI + \ + RADEON_ISYNC_CPSCRATCH_IDLEGUI +.fail: + ret + +align 4 +load_microcode: + + pushfd + cli + + call R5xx2DIdleLocal + + wrr RADEON_CP_ME_RAM_ADDR, 0 + + lea esi, [R520_cp_microcode] + mov ecx, 256 +@@: + mov eax, [esi] + mov ebx, [esi+4] + wrr RADEON_CP_ME_RAM_DATAH, ebx + wrr RADEON_CP_ME_RAM_DATAL, eax + add esi, 8 + loop @B + + popfd + ret + + align 4 R5xx2DInit: call R5xx2DPreInit wrr R5XX_RB3D_CNTL, 0 + call R5xx2DReset call R5xx2DSetup + rdr eax, RADEON_AIC_CNTL ;disable GART + and eax, not RADEON_PCIGART_TRANSLATE_EN + wrr RADEON_AIC_CNTL, eax + + call load_microcode + + call R5xxCpInit + rdr eax, D1GRPH_X_END rdr ebx, D1GRPH_Y_END dec eax @@ -502,6 +645,14 @@ R5xx2DInit: mov [__xmax], eax mov [__ymax], ebx + wrr RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM + + ; BEGIN_RING + ; RADEON_PURGE_CACHE + ; RADEON_PURGE_ZCACHE + ; RADEON_WAIT_UNTIL_IDLE + ; COMMIT_RING + ret proc R5xxSetupForSolidFill stdcall,color:dword, rop:dword, planemask:dword @@ -665,6 +816,17 @@ end virtual GXcopy equ 3 +RADEON_CP_PACKET3 equ 0xC0000000 + +PAINT_MULTI equ 0xC0009A00 + +DST_PITCH_OFFSET_CNTL equ ( 1 shl 1) +BRUSH_SOLID_COLOR equ ( 13 shl 4) +COLOR_ARGB equ ( 6 shl 8) +SRC_DATATYPE_COLOR equ ( 3 shl 12) + +;RADEON_ROP3_P equ + ; esi= input params align 4 solid_fill: @@ -696,32 +858,30 @@ solid_fill: test eax, eax jnz .exit - mov edx, [R5xxRops+4+GXcopy*8] - or edx, [rhd.control] - or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR) + ;mov edx, [R5xxRops+4+GXcopy*8] + ;or edx, [rhd.control] + ;or edx, (R5XX_GMC_BRUSH_SOLID_COLOR or R5XX_GMC_SRC_DATATYPE_COLOR) pushfd cli - mov eax, 7 - call R5xxFIFOWait - wrr R5XX_DP_GUI_MASTER_CNTL, edx + BEGIN_RING + OUT_PACKET3 PAINT_MULTI, 4 + OUT_RING (DST_PITCH_OFFSET_CNTL + \ + BRUSH_SOLID_COLOR + \ + COLOR_ARGB + \ + SRC_DATATYPE_COLOR + \ + (1 shl 28)+(1 shl 30) + \ + R5XX_ROP3_P) - mov eax, [esi+FILL.color] - wrr R5XX_DP_BRUSH_FRGD_CLR, eax - - wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF - - wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM) - - mov eax, [rhd.dst_pitch_offset] - wrr R5XX_DST_PITCH_OFFSET, eax + OUT_RING [rhd.dst_pitch_offset] + OUT_RING [esi+FILL.color] mov ebx, [esi+FILL.y] shl ebx, 16 mov bx, word [esi+FILL.x] - wrr R5XX_DST_Y_X, ebx + OUT_RING ebx mov ecx, [esp+4] ;x2 sub ecx, [esi+FILL.x] @@ -732,8 +892,44 @@ solid_fill: inc eax ;h shl ecx, 16 - mov cx, ax ;w|h - wrr R5XX_DST_WIDTH_HEIGHT, ecx + mov cx, ax ;w|h + + OUT_RING ecx + COMMIT_RING + +if 0 +; mov eax, 7 +; call R5xxFIFOWait + +; wrr R5XX_DP_GUI_MASTER_CNTL, edx + +; mov eax, [esi+FILL.color] +; wrr R5XX_DP_BRUSH_FRGD_CLR, eax + +; wrr R5XX_DP_WRITE_MASK, 0xFFFFFFFF + +; wrr R5XX_DP_CNTL, (R5XX_DST_X_LEFT_TO_RIGHT or R5XX_DST_Y_TOP_TO_BOTTOM) + +; mov eax, [rhd.dst_pitch_offset] +; wrr R5XX_DST_PITCH_OFFSET, eax + +; mov ebx, [esi+FILL.y] +; shl ebx, 16 +; mov bx, word [esi+FILL.x] +; wrr R5XX_DST_Y_X, ebx + +; mov ecx, [esp+4] ;x2 +; sub ecx, [esi+FILL.x] +; inc ecx ;w + +; mov eax, [esp+8] ;y2 +; sub eax, [esi+FILL.y] +; inc eax ;h + +; shl ecx, 16 +; mov cx, ax ;w|h +; wrr R5XX_DST_WIDTH_HEIGHT, ecx +end if popfd .exit: add esp, 8