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

Reply via email to