Hi,
I start to play with EXA and tried to implement it under kdrive, for a
Davinci implementation
(http://focus.ti.com/docs/prod/folders/print/tms320dm6446.html)
- staring with version 1.7.1 of xserver (getting from xorg 7.5)
- as davinci can be consider as a slow platform, so target kdrive for
that job
- 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.
there is a segfault when using "ExaMigrationSmart" and/or when
"checkDirtyCorrectness" is true.
not happened with "ExaMigrationGreedy",
and the segfault is due to a use of
REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)
with pExaPixmap->pDamage == NULL
(see background informations for the whole details)
Questions:
- does it sound a bell to somebody ?
- does kdrive is still use and tested (I see that lot of kdrive drivers
were removed) ?
- does kdrive still bring some speed / size improvements, compared with
complete xorg server + driver modules
Thanks
(I continue to investigate)
Arnaud
_Background informations :_
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.
I have a segfault at startup
exa/exa_migration_classic.c, line 78, in exaPixmapIsDirty
return REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap->pDamage)) ||
because pExaPixmap->pDamage == NULL
the related pixmap is the first pixmap created at startup in
mi/miscinit.c, line 153, function miCreateScreenResources,
if (pScrInitParms->width)
{
PixmapPtr pPixmap;
/* create a pixmap with no data, then redirect it to point to
* the screen
*/
pPixmap = (*pScreen->CreatePixmap)(pScreen, 0, 0,
pScreen->rootDepth, 0);
if (!pPixmap)
return FALSE;
if (!(*pScreen->ModifyPixmapHeader)(pPixmap, pScreen->width,
pScreen->height, pScreen->rootDepth,
BitsPerPixel(pScreen->rootDepth),
PixmapBytePad(pScrInitParms->width, pScreen->rootDepth),
pScrInitParms->pbits))
return FALSE;
pScrInitParms->width != 0 (and I don't see how it can be differently)
- "pScreen->CreatePixmap == exaCreatePixmap_classic" create the pixmap
with a valid pDamage
- but "ModifyPixmapHeader == exaModifyPixmapHeader_classic" destroy and
remove this pDamage ...
the difference when using "ExaMigrationGreedy", with
"checkDirtyCorrectness" is that "exaPixmapIsDirty" is never called.
_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel