diff options
author | Michel Dänzer <michel@tungstengraphics.com> | 2007-09-27 12:53:34 +0200 |
---|---|---|
committer | Michel Dänzer <michel@tungstengraphics.com> | 2007-09-27 12:53:34 +0200 |
commit | 5902e913010a2fb0c17efe01f9aade73f9646f16 (patch) | |
tree | 24c87ebc919b69d768c01dae01f5a9e34eded6de | |
parent | ca728973bce504e03bf6228d18287906c35eaa3f (diff) |
radeon: EXA pitch fixes.
The combined pitch/offset registers only support pitches up to 16320 bytes.
With EXA >= 2.3, set the maxPitchBytes field accordingly. With older versions,
limit maxX such that the pitch of 32bpp pixmaps doesn't exceed the limit.
Also check the limit in RADEONGetOffsetPitch just in case.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=12551 .
-rw-r--r-- | src/radeon_driver.c | 4 | ||||
-rw-r--r-- | src/radeon_exa.c | 2 | ||||
-rw-r--r-- | src/radeon_exa_funcs.c | 11 |
3 files changed, 12 insertions, 5 deletions
diff --git a/src/radeon_driver.c b/src/radeon_driver.c index e7cccf61..89254d33 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -1938,8 +1938,8 @@ static Bool RADEONPreInitAccel(ScrnInfoPtr pScrn) #ifdef USE_EXA if (info->useEXA) { - info->exaReq.majorversion = 2; - info->exaReq.minorversion = 0; + info->exaReq.majorversion = EXA_VERSION_MAJOR; + info->exaReq.minorversion = EXA_VERSION_MINOR; if (!LoadSubModule(pScrn->module, "exa", NULL, NULL, NULL, &info->exaReq, &errmaj, &errmin)) { diff --git a/src/radeon_exa.c b/src/radeon_exa.c index d074f08a..8a12e1b2 100644 --- a/src/radeon_exa.c +++ b/src/radeon_exa.c @@ -157,7 +157,7 @@ static Bool RADEONGetOffsetPitch(PixmapPtr pPix, int bpp, CARD32 *pitch_offset, { RINFO_FROM_SCREEN(pPix->drawable.pScreen); - if (pitch % info->exa->pixmapPitchAlign != 0) + if (pitch > 16320 || pitch % info->exa->pixmapPitchAlign != 0) RADEON_FALLBACK(("Bad pitch 0x%08x\n", pitch)); if (offset % info->exa->pixmapOffsetAlign != 0) diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c index d2338138..8e14cd9f 100644 --- a/src/radeon_exa_funcs.c +++ b/src/radeon_exa_funcs.c @@ -511,8 +511,8 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen) return FALSE; } - info->exa->exa_major = 2; - info->exa->exa_minor = 0; + info->exa->exa_major = EXA_VERSION_MAJOR; + info->exa->exa_minor = EXA_VERSION_MINOR; info->exa->PrepareSolid = FUNC_NAME(RADEONPrepareSolid); info->exa->Solid = FUNC_NAME(RADEONSolid); @@ -564,7 +564,14 @@ Bool FUNC_NAME(RADEONDrawInit)(ScreenPtr pScreen) } #endif +#if EXA_VERSION_MAJOR > 2 || (EXA_VERSION_MAJOR == 2 && EXA_VERSION_MINOR >= 3) + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Setting EXA maxPitchBytes\n"); + + info->exa->maxPitchBytes = 16320; info->exa->maxX = info->exa->Composite ? 2048 : 8192; +#else + info->exa->maxX = info->exa->Composite ? 2048 : 16320 / 4; +#endif info->exa->maxY = info->exa->Composite ? 2048 : 8192; RADEONEngineInit(pScrn); |