From 12a8acf64d745d0981e2b7360cf95f589a72827d Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Thu, 25 Nov 2004 10:19:03 +0000 Subject: [PATCH] setup move_overlay() functionality (part 2), not yet ready.. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10224 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../accelerants/matrox/engine/mga_bes.c | 39 ++++++++++++++++++- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/add-ons/accelerants/matrox/engine/mga_bes.c b/src/add-ons/accelerants/matrox/engine/mga_bes.c index 0efdd612a9..2ac5fbaf97 100644 --- a/src/add-ons/accelerants/matrox/engine/mga_bes.c +++ b/src/add-ons/accelerants/matrox/engine/mga_bes.c @@ -317,12 +317,47 @@ static void gx00_bes_calc_move_overlay(move_overlay_info *moi) moi->a1orgv &= 0x01fffff0; /* field 1 weight: AND below required by hardware, also make sure 'sign' is always 'positive' */ - moi->v1srcstv &= 0x0000fffc;//fixme: was v1wghtv + moi->v1srcstv &= 0x0000fffc; } -//fixme: impl: static void gx00_bes_program_move_overlay(move_overlay_info moi) { + /************************************* + *** sync to BES (Back End Scaler) *** + *************************************/ + + /* Make sure reprogramming the BES completes before the next retrace occurs, + * to prevent register-update glitches (double buffer feature). */ + + LOG(3,("Overlay: starting register programming beyond Vcount %d\n", CR1R(VCOUNT))); + /* Even at 1600x1200x90Hz, a single line still takes about 9uS to complete: + * this resolution will generate about 180Mhz pixelclock while we can do + * upto 360Mhz. So snooze about 4uS to prevent bus-congestion... + * Appr. 200 lines time will provide enough room even on a 100Mhz CPU if it's + * screen is set to the highest refreshrate/resolution possible. */ + while ((uint16)CR1R(VCOUNT) > (si->dm.timing.v_total - 200)) snooze(4); + + + /************************************** + *** actually program the registers *** + **************************************/ + + BESW(HCOORD, moi.hcoordv); + BESW(VCOORD, moi.vcoordv); +// BESW(HISCAL, hiscalv); + BESW(HSRCST, moi.hsrcstv); + BESW(HSRCEND, moi.hsrcendv); +// BESW(HSRCLST, hsrclstv); +// BESW(VISCAL, viscalv); + BESW(A1ORG, moi.a1orgv); + BESW(V1WGHT, moi.v1srcstv); +// BESW(V1SRCLST, v1srclstv); +// BESW(GLOBCTL, globctlv); +// BESW(CTL, ctlv); + + /* on a 500Mhz P3 CPU just logging a line costs 400uS (18-19 vcounts at 1024x768x60Hz)! + * programming the registers above actually costs 180uS here */ + LOG(3,("Overlay: completed at Vcount %d\n", CR1R(VCOUNT))); } status_t gx00_configure_bes