diff options
author | hasso <hasso@pkgsrc.org> | 2009-10-14 18:50:20 +0000 |
---|---|---|
committer | hasso <hasso@pkgsrc.org> | 2009-10-14 18:50:20 +0000 |
commit | 7f0d126ae87e90175f59115b49ebf008474c2bfb (patch) | |
tree | d611dda19538e7379d1cb1bcedc20c0c642b7e0b /x11/xf86-video-radeonhd | |
parent | f5bd0eed0ccf4c8053165f26c296fb542e57e087 (diff) | |
download | pkgsrc-7f0d126ae87e90175f59115b49ebf008474c2bfb.tar.gz |
Update to 1.3.0. Version 1.3.0 improvements:
- Added support for RV740, M92, M93, M97.
- Added support for HDMI audio on RS690 and R700.
- Added support for power management.
- Implemented almost correct analysis of PowerPlay AtomBIOS tables.
- 2D acceleration (EXA) is enabled by default now, except on RV740.
- Backlight handling finally fixed - compatible with xbacklight 1.1.1.
- Overhaul of memory controller setup. Fixes many "MC not idle" issues.
- Overhaul of cursor handling. Fixes most cursor bugs.
- Selectable color space for XVideo on R6xx/R7xx.
- Tons of bug fixes (DDC, EXA, LUT, RandR, AtomBIOS).
- More quirk table entries.
- Shave support (cleaner compilation output).
- All warnings fixed.
- Some start of Developer's documentation in README.coding.
Diffstat (limited to 'x11/xf86-video-radeonhd')
-rw-r--r-- | x11/xf86-video-radeonhd/Makefile | 5 | ||||
-rw-r--r-- | x11/xf86-video-radeonhd/distinfo | 9 | ||||
-rw-r--r-- | x11/xf86-video-radeonhd/patches/patch-aa | 360 |
3 files changed, 6 insertions, 368 deletions
diff --git a/x11/xf86-video-radeonhd/Makefile b/x11/xf86-video-radeonhd/Makefile index 175ee4cda90..a06f53cefa1 100644 --- a/x11/xf86-video-radeonhd/Makefile +++ b/x11/xf86-video-radeonhd/Makefile @@ -1,8 +1,7 @@ -# $NetBSD: Makefile,v 1.14 2009/06/11 07:00:31 hasso Exp $ +# $NetBSD: Makefile,v 1.15 2009/10/14 18:50:20 hasso Exp $ # -DISTNAME= xf86-video-radeonhd-1.2.5 -PKGREVISION= 2 +DISTNAME= xf86-video-radeonhd-1.3.0 CATEGORIES= x11 MASTER_SITES= ${MASTER_SITE_XORG:=driver/} EXTRACT_SUFX= .tar.bz2 diff --git a/x11/xf86-video-radeonhd/distinfo b/x11/xf86-video-radeonhd/distinfo index a2d66cd3b9f..612a6469ed6 100644 --- a/x11/xf86-video-radeonhd/distinfo +++ b/x11/xf86-video-radeonhd/distinfo @@ -1,6 +1,5 @@ -$NetBSD: distinfo,v 1.10 2009/06/11 07:00:31 hasso Exp $ +$NetBSD: distinfo,v 1.11 2009/10/14 18:50:20 hasso Exp $ -SHA1 (xf86-video-radeonhd-1.2.5.tar.bz2) = 64fc0eb5209adba5479396bafe53b50ded6c0940 -RMD160 (xf86-video-radeonhd-1.2.5.tar.bz2) = e30a896cd08e82b8a1bbc73e6f0ab862fe564a8a -Size (xf86-video-radeonhd-1.2.5.tar.bz2) = 751941 bytes -SHA1 (patch-aa) = de3176186b4780be2ae68b3eeb070f3262f0afcf +SHA1 (xf86-video-radeonhd-1.3.0.tar.bz2) = 4cdcdbcdc6ec7cd4caa19afdbfc34a8bec461f56 +RMD160 (xf86-video-radeonhd-1.3.0.tar.bz2) = 1f396df814872caf2b58f36929f7b6d1db16959f +Size (xf86-video-radeonhd-1.3.0.tar.bz2) = 772985 bytes diff --git a/x11/xf86-video-radeonhd/patches/patch-aa b/x11/xf86-video-radeonhd/patches/patch-aa deleted file mode 100644 index 948d513b424..00000000000 --- a/x11/xf86-video-radeonhd/patches/patch-aa +++ /dev/null @@ -1,360 +0,0 @@ -$NetBSD: patch-aa,v 1.7 2009/06/11 07:00:31 hasso Exp $ - -Accumulated cursor fixes from upstream repository. Should fix cursor -corruption issues: - -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=f668cc06 -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=6f378a0d -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=669e0bef -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=4be5f715 -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=dd287015 -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=08461642 -http://cgit.freedesktop.org/xorg/driver/xf86-video-radeonhd/commit/?id=23d25fe7 - ---- src/rhd_cursor.c.oorig 2009-06-10 22:02:08 +0300 -+++ src/rhd_cursor.c 2009-06-10 22:02:47 +0300 -@@ -62,13 +62,16 @@ - static void - lockCursor(struct rhdCursor *Cursor, Bool Lock) - { -- /* Double Buffering: Set _UPDATE_LOCK bit */ -+ /* Locking disables double buffering of HW cursor registers. -+ * Set D*CURSOR_UPDATE_LOCK bit to 1 to lock. -+ * We want *_DISABLE_MULTIPLE_UPDATE to always be 0, and since all other -+ * meaningful bits are read-only for D*CUR_UPDATE registers, it is safe -+ * to use RHDRegWrite() instead of RHDRegMask(); the latter is slower. -+ */ - if (Lock) -- RHDRegMask(Cursor, Cursor->RegOffset + D1CUR_UPDATE, -- 0x00010000, 0x00010000); -+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_UPDATE, 0x00010000); - else -- RHDRegMask(Cursor, Cursor->RegOffset + D1CUR_UPDATE, -- 0x00000000, 0x00010000); -+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_UPDATE, 0x00000000); - } - - /* RadeonHD has hardware support for hotspots, but doesn't allow negative -@@ -89,13 +92,23 @@ setCursorPos(struct rhdCursor *Cursor, C - } - - static void -+setCursorSize(struct rhdCursor *Cursor, CARD32 width, CARD32 height) -+{ -+ ASSERT ((width > 0) && (width <= MAX_CURSOR_WIDTH)); -+ ASSERT ((height > 0) && (height <= MAX_CURSOR_HEIGHT)); -+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SIZE, -+ (width - 1) << 16 | (height - 1)); -+} -+ -+static void - enableCursor(struct rhdCursor *Cursor, Bool Enable) - { -+ /* Make sure mode stays the same even when disabled; bug #13405 */ - if (Enable) - /* pre-multiplied ARGB, Enable */ - RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0x00000201); - else -- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0); -+ RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_CONTROL, 0x00000200); - } - - /* Activate already uploaded cursor image. */ -@@ -106,10 +119,6 @@ setCursorImage(struct rhdCursor *Cursor) - - RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SURFACE_ADDRESS, - rhdPtr->FbIntAddress + Cursor->Base); -- ASSERT ((Cursor->Width > 0) && (Cursor->Width <= MAX_CURSOR_WIDTH)); -- ASSERT ((Cursor->Height > 0) && (Cursor->Height <= MAX_CURSOR_HEIGHT)); -- RHDRegWrite(Cursor, Cursor->RegOffset + D1CUR_SIZE, -- (Cursor->Width - 1) << 16 | (Cursor->Height - 1)); - } - - /* Upload image. -@@ -121,7 +130,7 @@ uploadCursorImage(struct rhdCursor *Curs - RHDPtr rhdPtr = RHDPTRI(Cursor); - - memcpy(((CARD8 *) rhdPtr->FbBase + Cursor->Base), img, -- MAX_CURSOR_WIDTH * Cursor->Height * 4); -+ MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4); - } - - static void -@@ -192,6 +201,8 @@ convertBitsToARGB(struct rhd_Cursor_Bits - CARD8 *mask = src + srcPitch * bits->height; - int x, y; - -+ memset(dest, 0, MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4); -+ - for (y = 0; y < bits->height; y++) { - CARD8 *s = src, *m = mask; - CARD32 *d = dest; -@@ -210,41 +221,24 @@ convertBitsToARGB(struct rhd_Cursor_Bits - } - } - --/* Enable/disable cursor according to visibility, and set cursor pos */ --static void --displayCursor(struct rhdCrtc *Crtc) -+/* -+ * Returns if CRTC has a visible cursor -+ */ -+static Bool -+hasVisibleCursor(struct rhdCrtc *Crtc) - { - struct rhdCursor *Cursor = Crtc->Cursor; -+ if (Cursor->X >= Crtc->X - MAX_CURSOR_WIDTH && -+ Cursor->X < Crtc->X + Crtc->Width && -+ Cursor->Y >= Crtc->Y - MAX_CURSOR_HEIGHT && -+ Cursor->Y < Crtc->Y + Crtc->Height) { - -- /* Hardware doesn't allow negative cursor pos. Use hardware -- * hotspot support for that. Cannot exceed width, but cursor is -- * not visible in this case. */ -- -- /* xorg bug#13405: Cursor corruptions -- * With both CRTC enabled but HW cursor active only on one, the reported -- * corruption is seen. If HW cursor for both CRTC is forced to stay on, then no -- * corruption occurs. */ --#if 0 -- if (Cursor->X >= Crtc->X - Cursor->Width && -- Cursor->X < Crtc->X + Crtc->Width && -- Cursor->Y >= Crtc->Y - Cursor->Height && -- Cursor->Y < Crtc->Y + Crtc->Height) { --#endif -- int X, Y, HotX, HotY; -- -- X = Cursor->X >= 0 ? Cursor->X : 0; -- Y = Cursor->Y >= 0 ? Cursor->Y : 0; -- HotX = Cursor->X >= 0 ? 0 : -Cursor->X; -- HotY = Cursor->Y >= 0 ? 0 : -Cursor->Y; -- -- enableCursor(Cursor, TRUE); -- setCursorPos(Cursor, X, Y, HotX, HotY); --#if 0 -+ return TRUE; - } else -- enableCursor(Cursor, FALSE); --#endif -+ return FALSE; - } - -+ - /* - * Internal Driver + Xorg Interface - */ -@@ -258,12 +252,10 @@ rhdShowCursor(ScrnInfoPtr pScrn) - for (i = 0; i < 2; i++) { - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - -- if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -+ if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex -+ && hasVisibleCursor(Crtc)) { - -- lockCursor (Cursor, TRUE); -- displayCursor(Crtc); -- lockCursor (Cursor, FALSE); -+ rhdCrtcShowCursor(Crtc); - } - } - } -@@ -278,11 +270,7 @@ rhdHideCursor(ScrnInfoPtr pScrn) - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - - if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -- -- lockCursor (Cursor, TRUE); -- enableCursor(Cursor, FALSE); -- lockCursor (Cursor, FALSE); -+ rhdCrtcHideCursor(Crtc); - } - } - } -@@ -339,14 +327,7 @@ rhdReloadCursor(ScrnInfoPtr pScrn) - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - - if (Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -- -- lockCursor (Cursor, TRUE); -- uploadCursorImage(Cursor, rhdPtr->CursorImage); -- setCursorImage (Cursor); -- if (Crtc->Active) -- displayCursor(Crtc); -- lockCursor (Cursor, FALSE); -+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage); - } - } - } -@@ -363,16 +344,11 @@ rhdSetCursorPosition(ScrnInfoPtr pScrn, - for (i = 0; i < 2; i++) { - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - -- if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -+ if (Crtc->Active && Crtc->scrnIndex == pScrn->scrnIndex -+ && hasVisibleCursor(Crtc)) { - - /* Given cursor pos is always relative to frame - make absolute */ -- Cursor->X = x + pScrn->frameX0; -- Cursor->Y = y + pScrn->frameY0; -- -- lockCursor (Cursor, TRUE); -- displayCursor(Crtc); -- lockCursor (Cursor, FALSE); -+ rhdCrtcSetCursorPosition(Crtc, x+pScrn->frameX0, y+pScrn->frameY0); - } - } - } -@@ -397,12 +373,7 @@ rhdSetCursorColors(ScrnInfoPtr pScrn, in - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - - if (Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -- -- lockCursor (Cursor, TRUE); -- uploadCursorImage(Cursor, rhdPtr->CursorImage); -- setCursorImage (Cursor); -- lockCursor (Cursor, FALSE); -+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage); - } - } - } -@@ -422,15 +393,7 @@ rhdLoadCursorImage(ScrnInfoPtr pScrn, un - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - - if (Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -- -- Cursor->Width = bits->width; -- Cursor->Height = bits->height; -- -- lockCursor (Cursor, TRUE); -- uploadCursorImage(Cursor, rhdPtr->CursorImage); -- setCursorImage (Cursor); -- lockCursor (Cursor, FALSE); -+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage); - } - } - } -@@ -455,24 +418,19 @@ rhdLoadCursorARGB(ScrnInfoPtr pScrn, Cur - rhdPtr->CursorBits = NULL; - - /* Hardware only supports 64-wide cursor images. */ -- for (i = 0; i < cur->bits->height; i++) -- memcpy(rhdPtr->CursorImage + MAX_CURSOR_WIDTH*i, -+ memset(rhdPtr->CursorImage, 0, MAX_CURSOR_WIDTH * MAX_CURSOR_HEIGHT * 4); -+ for (i = 0; i < cur->bits->height; i++) { -+ CARD32 *img = rhdPtr->CursorImage + MAX_CURSOR_WIDTH*i; -+ memcpy(img, - cur->bits->argb + cur->bits->width*i, - cur->bits->width*4); -+ } - - for (i = 0; i < 2; i++) { - struct rhdCrtc *Crtc = rhdPtr->Crtc[i]; - - if (Crtc->scrnIndex == pScrn->scrnIndex) { -- struct rhdCursor *Cursor = Crtc->Cursor; -- -- Cursor->Width = cur->bits->width; -- Cursor->Height = cur->bits->height; -- -- lockCursor (Cursor, TRUE); -- uploadCursorImage(Cursor, rhdPtr->CursorImage); -- setCursorImage (Cursor); -- lockCursor (Cursor, FALSE); -+ rhdCrtcLoadCursorARGB(Crtc, rhdPtr->CursorImage); - } - } - } -@@ -588,10 +546,9 @@ void - rhdCrtcShowCursor(struct rhdCrtc *Crtc) - { - struct rhdCursor *Cursor = Crtc->Cursor; -- -- lockCursor (Cursor, TRUE); -- displayCursor(Crtc); -- lockCursor (Cursor, FALSE); -+ lockCursor (Cursor, TRUE); -+ enableCursor(Cursor, TRUE); -+ lockCursor (Cursor, FALSE); - } - - /* -@@ -613,12 +570,58 @@ rhdCrtcHideCursor(struct rhdCrtc *Crtc) - void - rhdCrtcSetCursorPosition(struct rhdCrtc *Crtc, int x, int y) - { -+ RHDPtr rhdPtr = RHDPTRI(Crtc); - struct rhdCursor *Cursor = Crtc->Cursor; -+ int hotx, hoty, width, cursor_end, frame_end; -+ - Cursor->X = x; - Cursor->Y = y; - -+ hotx = 0; -+ hoty = 0; -+ -+ /* Hardware doesn't allow negative cursor pos; compensate using hotspot */ -+ if (x < 0) { -+ hotx = -x; -+ x = 0; -+ } -+ if (y < 0) { -+ hoty = -y; -+ y = 0; -+ } -+ - lockCursor (Cursor, TRUE); -- displayCursor(Crtc); -+ -+ /* Work around rare corruption cases by adjusting cursor size; -+ * related to bug #13405 -+ * For dual-screen: -+ * - Cursor's right-edge must not end on multiples of 128px. -+ * - For panning, cursor image cannot horizontally extend past end of viewport. -+ */ -+ if (rhdPtr->Crtc[0]->Active && rhdPtr->Crtc[1]->Active) { -+ width = MAX_CURSOR_WIDTH; -+ cursor_end = x + width; -+ frame_end = Crtc->X + Crtc->Width; -+ -+ if (cursor_end > frame_end) { -+ width -= cursor_end - frame_end; -+ cursor_end = x + width; -+ } -+ if (! (cursor_end & 0x7f)) { -+ width--; -+ } -+ /* If the cursor is effectively invisible, move it out of visible area */ -+ if (width <= 0) { -+ width = 1; -+ x = 0; -+ y = Crtc->Y + Crtc->Height; -+ hotx = 0; -+ hoty = 0; -+ } -+ setCursorSize(Cursor, width, MAX_CURSOR_HEIGHT); -+ } -+ -+ setCursorPos (Cursor, x, y, hotx, hoty); - lockCursor (Cursor, FALSE); - } - -@@ -642,12 +645,10 @@ rhdCrtcLoadCursorARGB(struct rhdCrtc *Cr - { - struct rhdCursor *Cursor = Crtc->Cursor; - -- Cursor->Width = MAX_CURSOR_WIDTH; -- Cursor->Height = MAX_CURSOR_HEIGHT; -- - lockCursor (Cursor, TRUE); - uploadCursorImage(Cursor, Image); - setCursorImage (Cursor); -+ setCursorSize (Cursor, MAX_CURSOR_WIDTH, MAX_CURSOR_HEIGHT); - lockCursor (Cursor, FALSE); - } - |