[ANNOUNCE] glamor 0.5.0

Zhigang Gong zhigang.gong at linux.intel.com
Fri Aug 10 03:37:17 PDT 2012

After three moths development, I’m pleased to release glamor version 0.5.0.
The major improvements

are as below:


1.       Support tiling large pixmap to multiple small textures.

2.       Enable gradient shader.

3.       Optimize glyphs rendering performance

4.       Implement first shader to generate trapezoids.


Cairo-demo’s spinner on a large picture(12000x12000) get about 10x
improvement, and gradient also

get about 2x improvement. Aa10text and rgb10text also get about 2x


Thanks for Junyan and Michel’s contribution.


Glamor has a restriction with latest xserver. The main issue is that glamor
rely on the module loading

sequence which is not guaranteed by current xserver. We will fix this issue
in next version. If you want

to try a full functional xserver with glamor, it’s recommended to use the
following xserver version:

commit a615b90cab7569fae9d123e4da1d3373c871d84b

Author: Keith Packard <keithp at keithp.com>

Date:   Wed Mar 14 11:32:36 2012 -0700


    Bump version number to


    Now that 1.12 has branched, reset the version on master to a

    development number.


            Signed-off-by: Keith Packard keithp at keithp.com


We have the following work items for next release:


1.       Fix the coexisting problem with glx for latest xserver. Don’t rely
on the module loading sequence.

2.       Continue performance tuning:

a)         Implement delay flushing mechanism to avoid tiny drawing
operation for each DrawElements/DrawArrays call.

b)         Implement atlas for small pixmap.

c)         Optimize trapezoid shader to reduce the overhead for those
non-edge pixels.

d)         Optimize trapezoid/gradient shader to merge the mask/source
creation and compositing into one shader.

e)         Optimize glamor itself’ overhead.

3.       Xv support.


The following changes since commit d5cdad0497ae5f6cd936a74f68169c0910ea1e68:


  Release 0.4. (2012-04-28 17:02:35 +0800)


are available in the git repository at:



tag v0.5


tar ball is at:



Please refer the following wiki page for how to try glamor with Intel



for you to fetch changes up to 9b8a791290af0add84269efdb315f9f58798f6d2:


  Bump to version 0.5. (2012-08-10 13:46:42 +0800)



Junyan He (14):

      Extract the gradient related code out.

      Fix a bugy macro definition.

      Fix the problem of set the same stop several times.

      Fix the problem of vertical and horizontal case error in linear

      Fix the problem of x_source and y_source causing radial error

      Add macro of vertex setting for triangle stripe

      Modilfy the composite logic to two phases

      Add the trapezoid direct render logic

      Use the direct render path for A1

      Fix a bug for trapezoid clip

      Change the trapezoid render to use VBO.

      Just use the shader to generate trapezoid if PolyMode == Imprecise

      Fix the problem of VBO leak.

      Fallback to pixman when trapezoid mask is big.


Michel Dänzer (4):

      Fix translation of clip region for composite fallback.

      Stream vertex data to VBOs.

      Print space between name of missing EGL extension and 'required'.

      Prefer KHR_surfaceless_context EGL extension over


RobinHe (2):

      Create the file glamor_triangles.c

      Use shader to generate the temp trapezoid mask


Zhigang Gong (43):

      We should not call gradient finalization code if we disable it.

      Added strict warning flags to CFLAGS.

      Remove the texture cache code.

      glamor_set_destination_pixmap_priv_nc: set drawable's width x height.

      glamor_largepixmap: first commit for large pixmap.

      largepixmap: Implement infrastructure for large pixmap.

      largepixmap: Enable glamor_composite.

      glamor_putimage: Correct the wrong stride value.

      glamor_getimage: should call miGetimage if failed to get sub-image.

      largepixmap: Add transform/repeat/reflect/pad support.

      largepixmap: Support self composite for large pixmap.

      largepixmap: Fix the selfcopy issue.

      Enable large pixmap by default.

      trapezoid: Fallback to sw-rasterize for largepixmap.

      copyarea: Cleanup the error handling logic.

      glamor_glyphs: Before get upload to cache flush is needed.

      glamor_emit_composite_vert: Optimize to don't do two times vert

      gles2_largepixmap: force clip for a non-large pixmap.

      glamor_fbo: fix a memory leak for large pixmap.

      glamor_create_pixmap: Allocate glyphs pixmap in memory.

      glamor_render: Don't fallback when rendering glyphs with OpOver.

      glamor_glyphs: Detect fake or real glyphs overlap.

      glamor_composite_glyph: Optimize glyphs with non-solid pattern.

      glamor_render: Optimize the two pass ca rendering.

      glamor_largepixmap: Walkaround for large texture's upload.

      glamor_render: Don't allocate buffer for vbo each time.

      glamor_glyphs: Slightly performance tuning.

      glamor_copyarea: Fixed a bug introduced by 996194...

      create_pixmap: use texture for large glyphs.

      optimize: Use likely and unlikely.

      glamor_compositerects: Implement optimized version.

      glamor_glyphs: Use cache picture to store mask picture if possible.

      glamor_copyarea: Use blitcopy if current state is not render.

      glamor_glyphs: Don't merge extents for different lists.

      gles2: Fixed the compilation problem and some bugs.

      Synch with xorg 1.13 change.

      Added the missed header file for xorg 1.13 compat.

      glamor_trapezoid: workaround a glsl like problem.

      glamor_glyphs: When dst arg point to a NULL buffer, dont't flush.

      glamor_largepixmap: Fixed a bug in repeat clipping.

      Silence compilation warnings.

      Increase vbo size to 64K verts.

      Bump to version 0.5.


configure.ac                |    2 +-

src/Makefile.am             |    6 +-

src/compat-api.h            |  107 ++

src/compiler.h              |   59 +

src/glamor.c                |   98 +-

src/glamor.h                |   16 +-

src/glamor_compositerects.c |  278 +++++

src/glamor_copyarea.c       |  356 ++++--

src/glamor_copyplane.c      |    3 -

src/glamor_core.c           |   26 +-

src/glamor_debug.h          |    4 +-

src/glamor_egl.c            |   61 +-

src/glamor_eglmodule.c      |    4 +-

src/glamor_fbo.c            |  274 ++--

src/glamor_fill.c           |  173 ++-

src/glamor_fillspans.c      |    3 -

src/glamor_getimage.c       |    4 +-

src/glamor_glext.h          |    3 +

src/glamor_glyphs.c         | 1452 +++++++++++++++++----

src/glamor_gradient.c       | 1584 +++++++++++++++++++++++

src/glamor_largepixmap.c    | 1324 ++++++++++++++++++++

src/glamor_picture.c        |   16 +-

src/glamor_pixmap.c         |  441 +++++--

src/glamor_polyfillrect.c   |    3 -

src/glamor_polylines.c      |    2 -

src/glamor_priv.h           |  363 +++++-

src/glamor_putimage.c       |    8 +-

src/glamor_render.c         | 2912

src/glamor_tile.c           |  202 ++-

src/glamor_trapezoid.c      | 1810 +++++++++++++++++++++++++++

src/glamor_utils.h          |  841 +++++++++++--

src/glapi.h                 |    6 +-

32 files changed, 9338 insertions(+), 3103 deletions(-) 

create mode 100644 src/compat-api.h

create mode 100644 src/compiler.h

create mode 100644 src/glamor_compositerects.c

create mode 100644 src/glamor_gradient.c

create mode 100644 src/glamor_largepixmap.c

create mode 100644 src/glamor_trapezoid.c


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20120810/f6878740/attachment.html>

More information about the xorg mailing list