Morton,

        From your explanation and my test with rendercheck, I found it more 
complex for the driver to handle these special condition.
        Give the results I tested PictOpOver with the following 
XRenderComposite() call in Xlib app on ATI X1200.
        1)XRenderComposite(dpy, PictOpOver, picture_10x10[0].pict, 0, 
win->pict, 11, 0, 0, 0, 50, 50, 30, 30)  with the picture_10x10 has repeat 
attribute.
        Result: 30x30 rendering region
        2) XRenderComposite(dpy, PictOpOver, picture_10x10[0].pict, 0, 
win->pict, 11, 0, 0, 0, 50, 50, 30, 30)  with the picture_10x10 has no repeat 
attribute.
        Result: no-op
        3) XRenderComposite(dpy, PictOpOver, picture_10x10[0].pict, 0, 
win->pict, -10, 0, 0, 0, 50, 50, 30, 30)  with the picture_10x10 has repeat 
attribute.(negative coordinate)
        Result: 30x30 rendering region
        4) XRenderComposite(dpy, PictOpOver, picture_10x10[0].pict, 0, 
win->pict, -10, 0, 0, 0, 50, 50, 30, 30)  with the picture_10x10 has no repeat 
attribute.(negative coordinate)
        Result: 10x10 rendering region

        Just as you told me in the mail, the source coordinate is allowed to be 
outside of the image--positive and negative. In 1)-4), I gave the both tested, 
you can see the result.
        That is only the PictOpOver, I gave a test to PictOpSrc. The result is 
as you said, black region with no repeat parameter(zero vector).
        What I want to ask is that does driver need handle these all? I think 
it is a huge burden for the driver to judge. Why the server gave such 
parameters to driver? Maybe one of this special condition can make the driver 
rendering result fails, just as geode. And the most important thing is that, if 
the driver found it can not do that rendering, it is to late for put the 
rendering back to Xserver SW method. 
        I can add some code to this special condition, but these questions 
above puzzle me.

Thanks,
Frank

-----Original Message-----
From: Jonathan Morton [mailto:jonathan.mor...@movial.com] 
Sent: 2010?6?14? 18:07
To: Huang, FrankR
Cc: xorg-devel@lists.x.org; xorg-driver-ge...@lists.x.org
Subject: RE: Rendering in geode

On Sun, 2010-06-13 at 16:47 +0800, Huang, FrankR wrote:
>         You know when the driver does the composite, it is called in
> exaTryDriverComposite() function. You guess what? It give a driver a
> composite call that the source's width is less than srcX. That is
> impossible from my point.
>         Make is more simple:
>         A XRenderComposite() call below:
>                 XRenderComposite(dpy, PictOpOver,
> picture_10x10[0].pict,
> 0, win->pict, 11, 0, 0, 0, 50, 50, 40, 40)
> 
>         The source is a 10x10 pixmap, but the srcX is 11. The
> rendering
> result is none! I think the driver should refuse that parameter to do
> the rendering. It will bring chaos operation. That is my thought.

Source (and mask) coordinates are allowed to go outside the image
involved - both positive and negative.  The effect of this depends on
the Repeat attribute on that image.

If Repeat is None (0), then samples outside the image return the
all-zeroes vector, even if the image doesn't have an alpha channel.
This is then sent through the rendering equation as normal.

If Repeat is Normal (1), then the coordinate is wrapped back into the
image using the modulus (%) operation.  This is your usual repeating
tile function.  As a special case, a 1x1 image with Repeat set to Normal
is the usual way of representing a solid colour.

Repeat values of Extend (2) and Mirror (3) are also possible.

Obviously, you should reject attribute values that you cannot support.
But it might happen that the hardware doesn't know how to do the None
mode properly by itself, and failing to support that at CheckComposite
time is pretty useless - but you don't know the coordinates until after
that point.

Let's suppose you support the Src and Over modes.  These need to be
handled differently if the coordinates can fall outside the source
image(s) in No-Repeat mode: Src turns to a fill of the all-zeroes
vector, and Over turns into a no-op.  You can therefore divide the
rendering area into "normal" and "blanked" zones, and issue separate
commands to the hardware for each.

Because Clear mode doesn't use the source or mask data at all, it is
unaffected by this quirk - but it is rarely used.  Other modes have
similar simplifications as Src and Over.

-- 
------
From: Jonathan Morton
      jonathan.mor...@movial.com




_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to