[PATCH 1/3] rootless: ROOTLESS_PROTECT_ALPHA is always set, so unifdef it.

Jeremy Huddleston jeremyhu at apple.com
Thu Jul 15 10:02:13 PDT 2010


Series Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

Thanks for this cleanup effort Jamey, rootless is a big ball of ugly.  I was hoping we would kill it off soon... but it looks like it will be with us for a while now, so this is very much appreciated.

On Jul 15, 2010, at 09:28, Jamey Sharp wrote:

> The settings for each platform in rootlessConfig.h were misleading. On
> Apple builds, ROOTLESS_PROTECT_ALPHA was defined to TRUE; on Windows it
> was defined to NO. Both cases enabled alpha channel protection though,
> because the test in rootlessGC.c was a simple #ifdef.
> 
> Colin Harrison says that for Xming builds he's always patched it to
> define ROOTLESS_PROTECT_ALPHA to TRUE for Windows as well, and that
> unconditionally enabling alpha-channel protection would be appropriate.
> 
> Signed-off-by: Jamey Sharp <jamey at minilop.net>
> Cc: Jeremy Huddleston <jeremyhu at apple.com>
> Cc: Jon TURNEY <jon.turney at dronecode.org.uk>
> Cc: Colin Harrison <colin.harrison at virgin.net>
> ---
> miext/rootless/README.txt       |   34 ++++++++++++++++------------------
> miext/rootless/rootlessConfig.h |    2 --
> miext/rootless/rootlessGC.c     |   15 +++++----------
> 3 files changed, 21 insertions(+), 30 deletions(-)
> 
> diff --git a/miext/rootless/README.txt b/miext/rootless/README.txt
> index 754715d..cea2c01 100644
> --- a/miext/rootless/README.txt
> +++ b/miext/rootless/README.txt
> @@ -76,13 +76,12 @@ rootlessConfig.h to specify compile time options for its platform.
>         The following compile-time options are defined in 
> rootlessConfig.h:
> 
> -      o ROOTLESS_PROTECT_ALPHA: By default for a color bit depth of 24 and
> -        32 bits per pixel, fb will overwrite the "unused" 8 bits to optimize
> -        drawing speed. If this is true, the alpha channel of frames is
> -        protected and is not modified when drawing to them. The bits 
> -        containing the alpha channel are defined by the macro 
> -        RootlessAlphaMask(bpp), which should return a bit mask for 
> -        various bits per pixel.
> +      o RootlessAlphaMask(bpp): By default for a color bit depth of 24 and 32
> +        bits per pixel, fb will overwrite the "unused" 8 bits to optimize
> +        drawing speed. Rootless ensures that the alpha channel of frames is
> +        protected and is not modified when drawing to them. The bits
> +        containing the alpha channel are defined by this macro, which should
> +        return a bit mask for various bits per pixel.
> 
>       o ROOTLESS_REDISPLAY_DELAY: Time in milliseconds between updates to
>         the underlying window server. Most operations will be buffered until
> @@ -126,17 +125,16 @@ functions should be used instead of fb.
> 
> Alpha Channel Protection
> 
> -	If the bits per pixel is greater then the color bit depth, the contents 
> -of the extra bits are undefined by the X11 protocol. Some window systems 
> -will use these extra bits as an alpha channel. The generic rootless layer can 
> -be configured to protect these bits and make sure they are not modified by 
> -other parts of the X server. To protect the alpha channel 
> -ROOTLESS_PROTECT_ALPHA and RootlessAlphaMask(bpp) must be 
> -set appropriately as described under the compile time options. This 
> -ensures that the X11 graphics primitives do not overwrite the alpha 
> -channel in an attempt to optimize drawing. In addition, the window 
> -functions PaintWindow() and Composite() must be replaced by alpha 
> -channel safe variants. These are provided in rootless/safeAlpha.
> +        If the bits per pixel is greater then the color bit depth, the
> +contents of the extra bits are undefined by the X11 protocol. Some window
> +systems will use these extra bits as an alpha channel. The generic rootless
> +layer will protect these bits and make sure they are not modified by other
> +parts of the X server. To protect the alpha channel RootlessAlphaMask(bpp)
> +must be set appropriately as described under the compile time options. This
> +ensures that the X11 graphics primitives do not overwrite the alpha channel
> +in an attempt to optimize drawing. In addition, the window functions
> +PaintWindow() and Composite() must be replaced by alpha channel safe
> +variants. These are provided in rootless/safeAlpha.
> 
> 
> Credits
> diff --git a/miext/rootless/rootlessConfig.h b/miext/rootless/rootlessConfig.h
> index a6c0d25..222be53 100644
> --- a/miext/rootless/rootlessConfig.h
> +++ b/miext/rootless/rootlessConfig.h
> @@ -36,7 +36,6 @@
> 
> #ifdef __APPLE__
> 
> -# define ROOTLESS_PROTECT_ALPHA TRUE
> # define ROOTLESS_REDISPLAY_DELAY 10
> # define ROOTLESS_RESIZE_GRAVITY TRUE
> /*# define ROOTLESSDEBUG*/
> @@ -50,7 +49,6 @@
> 
> #if defined(__CYGWIN__) || defined(WIN32)
> 
> -# define ROOTLESS_PROTECT_ALPHA NO
> # define ROOTLESS_REDISPLAY_DELAY 10
> # undef  ROOTLESS_RESIZE_GRAVITY
> /*# define ROOTLESSDEBUG*/
> diff --git a/miext/rootless/rootlessGC.c b/miext/rootless/rootlessGC.c
> index 68a9dc7..a9cb413 100644
> --- a/miext/rootless/rootlessGC.c
> +++ b/miext/rootless/rootlessGC.c
> @@ -148,12 +148,11 @@ static GCOps rootlessGCOps = {
> };
> 
> /*
> -   If ROOTLESS_PROTECT_ALPHA is set, we have to make sure that the alpha
> -   channel of the on screen windows is always opaque. fb makes this harder
> -   than it would otherwise be by noticing that a planemask of 0x00ffffff
> -   includes all bits when depth==24, and so it "optimizes" the planemask to
> -   0xffffffff. We work around this by temporarily setting depth=bpp while
> -   changing the GC.
> +   We have to make sure that the alpha channel of the on screen windows is
> +   always opaque. fb makes this harder than it would otherwise be by
> +   noticing that a planemask of 0x00ffffff includes all bits when
> +   depth==24, and so it "optimizes" the planemask to 0xffffffff. We work
> +   around this by temporarily setting depth=bpp while changing the GC.
> 
>    So the normal situation (in 32 bit mode) is that the planemask is
>    0x00ffffff and thus fb leaves the alpha channel alone. The rootless
> @@ -331,7 +330,6 @@ RootlessValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
> 
>     if (pDrawable->type == DRAWABLE_WINDOW)
>     {
> -#ifdef ROOTLESS_PROTECT_ALPHA
>         unsigned int depth = pDrawable->depth;
> 
>         // We force a planemask so fb doesn't overwrite the alpha channel.
> @@ -340,9 +338,6 @@ RootlessValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
>         pGC->planemask &= ~RootlessAlphaMask(pDrawable->bitsPerPixel);
>         VALIDATE_GC(pGC, changes | GCPlaneMask, pDrawable);
>         pDrawable->depth = depth;
> -#else
> -        VALIDATE_GC(pGC, changes, pDrawable);
> -#endif
>     } else {
>         pGC->funcs->ValidateGC(pGC, changes, pDrawable);
>     }
> -- 
> 1.7.0
> 



More information about the xorg-devel mailing list