[Help][RS780E][mipsel]Screen corruption sometimes

Chen Jie chenj at lemote.com
Wed Aug 31 03:03:14 PDT 2011


Hi,

I did some tests, the status is collected at
http://dev.lemote.com/files/upload/software/temp/status/
(And sorry, a solid port of newer kernel isn't ready, so the tests
above didn't cover current kernel code)

It seems 'x11perf -compwinwin500' will corrupt windows of other
applications, and is related with Xrender? Any idea?

Update:
I hacked compiz -- display.c eventLoop(): not use
glXCopySubBufferMESA() to update damaged sections, the corruption is
severe(http://dev.lemote.com/files/upload/software/temp/compiz_no_use_glXCopySubBufferMESA.png):
 * It was simply triggered by run 'X + compiz(no window decoration) +
comp-test' on platform 1
 * The screen can be restored by switching between VTs.

The detailed code snippet in compiz:

BoxPtr pBox;
int    nBox, y;

pBox = core.tmpRegion->rects;
nBox = core.tmpRegion->numRects;

// if (s->copySubBuffer)
if (0) // Hack: disable the glXCopySubBufferMESA() way
{
       while (nBox--)
       {
           y = s->height - pBox->y2;

           (*s->copySubBuffer) (d->display,
                                s->output,
                                pBox->x1, y,
                                pBox->x2 - pBox->x1,
                                pBox->y2 - pBox->y1);

           pBox++;
       }
}
else
{
       glEnable (GL_SCISSOR_TEST);
       glDrawBuffer (GL_FRONT);

       while (nBox--)
       {
           y = s->height - pBox->y2;

           glBitmap (0, 0, 0, 0,
                     pBox->x1 - s->rasterX,
                     y - s->rasterY,
                     NULL);

           s->rasterX = pBox->x1;
           s->rasterY = y;

           glScissor (pBox->x1, y,
                      pBox->x2 - pBox->x1,
                      pBox->y2 - pBox->y1);

           glCopyPixels (pBox->x1, y,
                         pBox->x2 - pBox->x1,
                         pBox->y2 - pBox->y1,
                         GL_COLOR);

           pBox++;
       }

       glDrawBuffer (GL_BACK);
       glDisable (GL_SCISSOR_TEST);
       glFlush ();
}



----
Regards,
Chen Jie


More information about the xorg-driver-ati mailing list