<!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&nbsp; 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&nbsp; is due to a use of <br>
&nbsp;&nbsp;&nbsp; REGION_NOTEMPTY (pScreen, DamageRegion(pExaPixmap-&gt;pDamage)<br>
with pExaPixmap-&gt;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">&nbsp;&nbsp;&nbsp; return REGION_NOTEMPTY (pScreen,
DamageRegion(pExaPixmap-&gt;pDamage)) ||<br>
</blockquote>
because pExaPixmap-&gt;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">&nbsp;&nbsp;&nbsp; if (pScrInitParms-&gt;width)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; PixmapPtr pPixmap;<br>
  <br>
&nbsp;&nbsp;&nbsp; /* create a pixmap with no data, then redirect it to point to<br>
&nbsp;&nbsp;&nbsp; &nbsp;* the screen<br>
&nbsp;&nbsp;&nbsp; &nbsp;*/<br>
&nbsp;&nbsp;&nbsp; pPixmap = (*pScreen-&gt;CreatePixmap)(pScreen, 0, 0,
pScreen-&gt;rootDepth, 0);&nbsp; <br>
  <br>
if (!pPixmap)<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>
  <br>
&nbsp;&nbsp; &nbsp;if (!(*pScreen-&gt;ModifyPixmapHeader)(pPixmap, pScreen-&gt;width,<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; pScreen-&gt;height, pScreen-&gt;rootDepth,<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; BitsPerPixel(pScreen-&gt;rootDepth),<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; PixmapBytePad(pScrInitParms-&gt;width,
pScreen-&gt;rootDepth),<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; pScrInitParms-&gt;pbits))<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; return FALSE;<br>
  <br>
</blockquote>
<br>
pScrInitParms-&gt;width != 0 (and I don't see how it can be differently)<br>
- "pScreen-&gt;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>