EXA/Composite acceleration for R300

Patrick Forget patrick.forget2 at gmail.com
Tue Sep 5 20:33:23 PDT 2006


Hello,

As you may be aware, the radeon driver only support exa core operation for
R300 and above.  I do have a R300 (M11 I think) and try to include support
for exa for this card.  However, with a lot of effort, i wasn't able to make
it work.  Someone in this list may be more aware on the internal of the R300
to point me towards a solution.

I am using Ubuntu Dapper with xorg 7.0.  I did use the driver source tarball
from xorg 7.0.  Currently, I got DRI enable, using 3D open source driver.  I
have try also to disable glx and DRI for some tests.  I have changed the
code in radeon_exa_render.c to add the function R300PrepareComposite,
R300CheckComposite, R300TextureSetup, R300CheckCompositeTexture by starting
will the R200 path and replacing with the appropriate register for R300
(taken in R300_reg.h from Mesa).  Some of them are straightforward, but
other are just guess.

The mean issues is a hang of the OS which prevent me of finding the good set
of registers.  This is expected if the wrong set of command are send to the
video card.  I have trace back the freeze to the function RadeonComposite
(path is ACCEL_CP).  Putting a #if 0 to avoid sending the command stream to
the video card in this function alone prevent the freeze.

As a reference, here the offending bit in RadeonComposite() that trigger the
problem.  I have check in the sourceforge r300 project for the r300_demo.c
and the current Mesa r300 driver.  Both use the same code path for immediate
rendering (the register name have changed, but the numerical values are kept
the same)

BEGIN_ACCEL(1 + VTX_REG_COUNT * 4);
OUT_ACCEL_REG(RADEON_SE_VF_CNTL,
           (RADEON_VF_PRIM_TYPE_QUAD_LIST |
                      RADEON_VF_PRIM_WALK_DATA |
                      4 << RADEON_VF_NUM_VERTICES_SHIFT));
VTX_OUT(dstX,     dstY,     srcX,    srcY,    maskX,    maskY);
VTX_OUT(dstX,     dstY + h, srcX,    srcYend, maskX,    maskYend);
VTX_OUT(dstX + w, dstY + h, srcXend, srcYend, maskXend, maskYend);
VTX_OUT(dstX + w, dstY,     srcXend, srcY,    maskXend, maskY);
FINISH_ACCEL();

If that part of the code is correct, any other reason could trigger a frozen
screen (OS freeze)?  If I don't setup the card icorrectly in
R300PrepareComposite, should I only expect garbage/image corruption on the
screen?

Any suggestion.  Maybe someone with more experience on the driver side could
check the code.  What is the best way to discuss of this issue.  Is it
better to open a bug in Buzilla and attach the code or simply use the
mailing list?

Patrick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20060905/7c0736e5/attachment.html>


More information about the xorg mailing list