<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Hi,<br>
<br>
I start to play with EXA and tried to implement it under kdrive, for a
Davinci implementation<br>
(<a class="moz-txt-link-freetext" href="http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html">http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html</a>)<br>
<br>
- staring with version 1.7.1 of xserver (getting from xorg 7.5)<br>
- as davinci can be consider as a slow platform, so target kdrive for
that job<br>
- copy/paste hw/kdrive/fbdev as a starting point (working fine) and
looks at what hw/kdrive/ephyr is doing for EXA init, and with a EXA
implementation that does nothing first.<br>
<br>
there is a segfault when using "ExaMigrationSmart" and/or when
"checkDirtyCorrectness" is true.<br>
not happened with "ExaMigrationGreedy", <br>
<br>
and the segfault is due to a use of <br>
REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)<br>
with pExaPixmap->pDamage == NULL<br>
(see background informations for the whole details)<br>
<br>
<br>
Questions:<br>
- does it sound a bell to somebody ?<br>
- does kdrive is still use and tested (I see that lot of kdrive drivers
were removed) ?<br>
- does kdrive still bring some speed / size improvements, compared with
complete xorg server + driver modules<br>
<br>
Thanks <br>
(I continue to investigate)<br>
<br>
Arnaud <br>
<br>
<br>
<br>
<br>
<u>Background informations :</u><br>
<br>
<br>
the goal was mainly to understand how EXA is working in details, and by
the way, add some acceleration on a platform some people are using.<br>
<br>
<br>
I have a segfault at startup <br>
<br>
exa/exa_migration_classic.c, line 78, in exaPixmapIsDirty<br>
<blockquote type="cite"> return REGION_NOTEMPTY (pScreen,
DamageRegion(pExaPixmap->pDamage)) ||<br>
</blockquote>
because pExaPixmap->pDamage == NULL<br>
<br>
<br>
the related pixmap is the first pixmap created at startup in <br>
mi/miscinit.c, line 153, function miCreateScreenResources, <br>
<blockquote type="cite"> if (pScrInitParms->width)<br>
{<br>
PixmapPtr pPixmap;<br>
<br>
/* create a pixmap with no data, then redirect it to point to<br>
* the screen<br>
*/<br>
pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0,
pScreen->rootDepth, 0); <br>
<br>
if (!pPixmap)<br>
return FALSE;<br>
<br>
if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width,<br>
pScreen->height, pScreen->rootDepth,<br>
BitsPerPixel(pScreen->rootDepth),<br>
PixmapBytePad(pScrInitParms->width,
pScreen->rootDepth),<br>
pScrInitParms->pbits))<br>
return FALSE;<br>
<br>
</blockquote>
<br>
pScrInitParms->width != 0 (and I don't see how it can be differently)<br>
- "pScreen->CreatePixmap == exaCreatePixmap_classic" create the
pixmap with a valid pDamage<br>
- but "ModifyPixmapHeader == exaModifyPixmapHeader_classic" destroy and
remove this pDamage ...<br>
<br>
<br>
the difference when using "ExaMigrationGreedy", with
"checkDirtyCorrectness" is that "exaPixmapIsDirty" is never called.<br>
<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>