[cairo-announce] cairo snapshot 1.9.6 now available

Carl Worth cworth at cworth.org
Thu Feb 25 10:24:24 PST 2010

[This snapshot was created last week, but I only realized now that the
mail I intended to send didn't actually go where I intended to send it.]

A new cairo snapshot 1.9.6 is now available from:


    which can be verified with:

	0e204b2c4f062dc65c1b854d4b1ccf360f3cb255  cairo-1.9.6.tar.gz

	(signed by Carl Worth)

  Additionally, a git clone of the source tree:

	git clone git://git.cairographics.org/git/cairo

    will include a signed 1.9.6 tag which points to a commit named:

    which can be verified with:
	git verify-tag 1.9.6

    and can be checked out with a command such as:
	git checkout -b build 1.9.6

We're happy to share this snapshot of recent cairo development. We
apologize that it has been so long since the last snapshot, (snapshot
1.9.4 was 4 months ago), but we are optimistic that we can finish up
cairo 1.10 in the next month or so. Our goal going forward is to have
major cairo releases on a time-based schedule with releases at the end
of every March and September (or so).

This 1.9.6 snapshot is really exactly that---it's a snapshot of current
development. There hasn't been as much testing through the test suite as
we would normally do for a cairo release. But that's what we'll be doing
From now until cairo 1.10. We also hope that many of you will also test
this snapshot with your cairo applications and report back to us.

One of the most exciting things in the 1.9.6 snapshot is the cairo-gl
backend with dramatic improvements compared to cairo-gl in any previous
snapshots, (it's now using shaders to accelerate many operations). See
Eric's post here for some performance numbers:


and please join me in thanking Eric and T. Zachary Laine (a welcome new
contributor!) for this work.

As usual, Chris Wilson has put in a remarkable amount of effort as
reflected in this snapshot. I give him my heartfelt thanks for keeping
cairo so vibrant while I have not been able to give it much personal
attention lately.

This snapshot also includes the cairo-drm backend worked on by Chris
Wilson and Kristian Høgsber. This is another interesting experimental
backend which currently outperforms cairo-gl in several benchmarks, (and
sets the bar for cairo-gl to reach). This direct-rendering backend only
support Intel graphics chipsets in the i915 and i965 families.

I've written a quick summary of other improvements in 1.9.6 below. I've
certainly missed many interesting things that have been done. If you are
aware of interesting work that I neglected, please let me know so that
we can get that work mentioned for the 1.10 release notes. (Best would
be a patch to the NEWS file adding the information).

I hope that everyone will have lots of fun with cairo!


API additions
    Add cairo_device_t

    The device is a generic method for accessing the underlying interface
    with the native graphics subsystem, typically the X connection or
    perhaps the GL context. By exposing a cairo_device_t on a surface and
    its various methods we enable finer control over interoperability with
    external interactions of the device by applications. The use case in
    mind is, for example, a multi-threaded gstreamer which needs to serialise
    its own direct access to the device along with Cairo's across many

    Secondly, the cairo_device_t is a unifying API for the mismash of
    backend specific methods for controlling creation of surfaces with
    explicit devices and a convenient hook for debugging and introspection.

    The principal components of the API are the memory management of:

      cairo_device_finish() and

    along with a pair of routines for serialising interaction:

      cairo_device_acquire() and

    and a method to flush any outstanding accesses:


    The device for a particular surface may be retrieved using:


    The device returned is owned by the surface.

API changes (to API new in the cairo 1.9.x series)

    These are the replacement names for the functions previously named
    cairo_meta_surface_create and cairo_meta_surface_ink_extents.


    This interface is now changed such that the MIME data will be
    detached if the surface is modified at all. This guarantees that
    the MIME data will not become out of synch due to surface
    modifications, and also means that for the MIME data to be useful,
    it must be set after all modifications to the surface are

API removal (of experiment API)
  The cairo-glitz backend is removed entirely, (in favor of the new
  cairo-gl backend). See below for more on cairo-gl.

Generic fixes

  Many improvements for drawing of dashed strokes

	Fix incorrect handling of negative offset
	Faster computation of first dash (avoids near-infinite looping)
	Approximate extremely fine dash patterns with appropriate alpha value

  Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)

Backend-specific improvements

  This is a new, direct-rendering backend that supports Intel graphics
  chipsets in the i915 and i965 families. It's still experimental and
  will likely remain that way for a while. It's already got extremely
  good performance on the hardware it supports, so if nothing else
  provides a working proof and performance target for the cairo-gl
  work for Intel graphics.


  Start using GLSL to accelerate many operations. Many thanks to Eric
  Anholt and T. Zachary Laine for this work. For the first time, we
  have what looks like what will be a very compelling OpenGL-based
  backend for cairo (in terms of both quality and performance).

  See this writeup from Eric for more details on recent progress of
  cairo-gl (which he presented at FOSDEM 2010):



  The image backend is made dramatically faster (3-5 times faster for
  benchmarks consisting primarily of glyph rendering).

cairo-quartz fixes:

  Many fixes from Robert O'Callahan and Andrea Canciani including:

	Fixed gradient pattern painting
	Improved A8 image handling
	Fixes for "unbounded" and other compositing operators

cairo-pdf fixes:

  Improvements to embedding of JPEG and JPEG2000 data.

cairo-ps fixes:

  Fix printing of rotated user fonts.

Log of all changes from 1.9.4 to 1.9.6
Adrian Johnson (11):
      Provide a builtin implementation of isspace() and isdigit()
      Type 1 subset: Don't add a new line when in binary mode
      Type1-subset: Check for binary eexec data
      PDF: Include Type 1 fixed-content portion in the embedded font
      Type1-subset: Append "cleartomark" operator for binary fonts that don't include it
      PS: Add some missing pdf-operators flushes
      PDF: Remove extraneous \n from end of jpeg/jp2 data
      PDF: Don't specify colorspace in JPEG2000 image dictionary
      Fix bug in _cairo_ft_index_to_ucs4
      Fix incorrect font scale and glyph position in Type 3 fonts
      Fix printing of rotated user fonts

Alexander Shulgin (1):
      surface: Fix detach mime-data after ecda633f887a10da650b4cd3efb17c861a6f519f

Andrea Canciani (35):
      [test] Add surface-pattern-operator
      quartz: Fix compilation
      xlib: Fix double free
      Add new operator-alpha-alpha test
      Fix compilation on MacOS X
      [quartz] Improve A8 image handling
      [quartz] Improve unbounded operators fixup
      [quartz] Fix implied colour of alpha-only surface sources
      [quartz] Fix stroking with unbounded operator
      [quartz] Fix source-unbounded compositing of surface sources
      [quartz] Fix compositing operators
      Add dash-offset test
      Fix odd length dashing with negative offset
      Improve stroke offset computation
      Revert "[test] Reorder dash-infinite-loop to not hit a runaway allocation."
      Improve stroking of densely dashed styles
      [trace] Fix compilation when FreeType is disabled
      [quartz] Improve A8 and A1 support
      [quartz] Approximate dense dashing patterns
      [quartz] Fix generic masking
      [quartz] Leftbehind change from a39075c88f9b2e12e19348ea11c9b3f739818265
      Fix image backend compilation
      Fix compilation on MacOS X
      Constrain subsurface creation
      Silence autoconf on Mac OS X
      Round caps coverage extimate explanation
      Improve dash pattern approximation
      Improve comments style consistency
      Approximate dash patterns in gstate
      Revert "[quartz] Approximate dense dashing patterns"
      Partially revert "Improve stroking of densely dashed styles"
      [quartz] Silence compiler warnings
      [quartz] Fix surface to CGImage conversion
      [quartz] Fix UNSUPPORTED operations
      [quartz] Unbreak mask fallback path

Benjamin Otte (24):
      [xlib] Fix compiler warnings
      [path] Fix compiler warnings
      [clip] Remove non-existing functions from header
      [gstate] Apply target device offsets to patterns immediately
      [test] Update upscale test to expose an Xlib failure
      sphinx: Add required pthread libs
      [test] Add a test exposing bugs in XRenderComposite
      [xlib] Fix new Composite test
      [test] Add "target=raster" to test
      [xlib] Use correct number when checking if points are out of range
      test: Add cases to exercise clipping after no-ops
      [clip] Don't ignore outermost clip when it clips everything
      Apply device transform in surface wrapper
      Satisfy make check
      [test] Add new test checking is_clear is handled properly
      [test] Add a simple multithreading test
      [test] Add pthread-same-source test
      Give cairo_surface_mark_dirty() the slim hidden treatment
      Remove useless pixman version checks
      [png] Simplify coercion code
      build: Fix pthread detection
      docs: appease make check
      build: Remove glitz surface
      build: Add -Wdeclaration-after-statement

Carl Worth (4):
      Increment version to 1.9.5
      NEWS: Add notes for the 1.9.6 snapshot.
      Update version to 1.9.6
      Update REFERENCE_IMAGES list for "make distcheck".

Chris Wilson (140):
      [fallback] Create intermediate surface with same content.
      [image] Clone the format for a similar surface with identical content
      [surface] Don't AND in the desired content.
      [test] Add radial-gradient-source
      [test] Update rotate-image-surface-paint
      [doc] Add comments on when surfaces are cleared on construction.
      Make the surface->is_clear logic common
      [gl] Do not clear internal surfaces.
      Support component-alpha.
      [pattern] Compute zero extents for empty patterns
      wideint: Protect 64_32_div for non-HAVE_UINT16_T systems
      perf: Fix comparisons
      gitignore: Add forgotten cairo-perf-print
      scaled-font: Fix documentation examples with incorrect derefs
      xlib: Set has_component_alpha = FALSE for gradient Pictures
      path: Misclassification of rectilinear after degenerate line-to
      path: Skip any secondary degenerate line-to segments.
      sphinx: Add required pthread libs
      build: Add -pthread to real_pthread_CFLAGS
      test: Tweak Benjamin's xcomposite-projection
      AUTHORS: Add Andrea Canciani
      arc: Just emit a line-to if radius is zero.
      trace: Correctly encode octal values.
      type1: Destroy the output stream.
      test: Add path-stroke-twice
      path: Do not remove anti-parallel line segments in case we are stroking
      test: Fix typo in path-stroke-twice reference image
      test: Add degenerate-arcs
      test: Add linear-uniform
      pattern: Premultiply color-stop when converting to solid
      qt: Make flush() robust.
      gitignore: refresh
      surface-wrapper: Avoid copying patterns and clips unless transformed.
      Move _cairo_error() to a standalone header
      perf: Enable a surface cache for perf-trace
      script: Permit surface operations on the context
      script: Free the correct pattern after failure.
      script: Handle cache allocation failure more gracefully
      Constify stroke style and matrices.
      Unify the two freed object pools
      Add surface-offset internal API.
      Add subsurface.
      Remove content matching from snapshot lookup.
      Real zero-copy cow snapshotting
      configure: Globally define AC_GNU_SOURCE
      Recursive mutex.
      Add cairo_device_t
      script: Port cairo_script_context_t to cairo_device_t
      xml: Port to cairo_device_t
      gl: Port to cairo_device_t
      gl: Exercise Window destinations with boilerplate
      qt: Trivial compile fix for boilerplate.
      spans: Pass multiple rows of identical spans to the renders.
      Alter definition of cairo_composite_rectangles_t
      boxes: Efficient storage for an array of cairo_box_t.
      boxes: Enable tessellation
      boxes: Enable generation of boxes from rectilinear polygons.
      spans: Add a Bentley-Ottmann variant on the Tor scan converter
      spans: Add a rectangular scan converter
      pattern: An EXTEND_NONE surface is not opaque if we sample outside
      test: Add --track-origins=yes to valgrind flags.
      test: Exercise scan converters with large rounded rectangles.
      test: Tweak aligned of text-rotate
      test: Add an xcb surface source test
      test: Add explicit device management to xlib-surface-source
      scaled-font: Use tight glyph bounds when determining overlap.
      pattern: Add convenience patterns for stock colours
      gstate: White space.
      gstate: Check for an invalid matrix before cairo_transform()
      gstate: Skip ops with a clear mask.
      gstate: Reduce operators
      matrix: Do not need to iteratively refine conversion for unity matrices.
      path: Compute coarse bounds upon construction.
      fill: Convert rectilinear paths to boxes.
      stroke: Convert rectilinear paths to boxes.
      color: Add enum value for the largest stock color.
      types: Move cairo_scaled_glyph_t to cairo-types-private.h
      clip: Implement clipping using only the high-level operators.
      surface-fallback: Convert to composite rectangles
      ft: Tidy computation of transformed bitmap, and mark if CA
      image: Implement high level interface.
      drm: Add backends for i915 and i965.
      xcb: Refresh.
      misc: Only use custom lround() under DISABLE_SOME_FLOATING_POINT
      glew: Do not assume that UNIX == GLX
      gl: Acquire the context whilst creating surfaces.
      glew: Silence compiler.
      pdf: Arguments to fill_extents() were reversed.
      ps: Arguments to fill_extents() were reversed.
      ps: Wean off the low-level image composite interface
      scaled-font: Mark an error site with _cairo_error()
      script: Encode octal values correctly.
      win32: Trivially fix the compile error with printing.
      surface-fallback: We no longer own a reference to the clip surface
      image: Prevent deref of NULL clip_region
      test: Erroneous ref image for big-line xlib-fallback.
      clip: Create a fallback clip surface
      xcb: compile errors with lockdep
      configure: dri2 is only required for xcb-drm
      xcb: Make shm optional
      mime-data: Detach existing alternate representations upon modification
      xcb: Fix linking with xcb-drm
      drm: compile fix for cairo_always_inline
      configure: Enable AC_SYS_LARGEFILE for drm
      drm-i915: Ensure surface size for clone is initialized.
      drm/i915: Ensure surface is initialized.
      drm-i915: Don't tile temporary image textures.
      drm-intel: Assert that the bo is unmapped upon release.
      drm-intel: The accumulation bo may be NULL, beware.
      drm-intel: flush in memory modifications to texture.
      drm: Paranoid assert that the fallback is released upon finish.
      drm-intel: Unmap a full glyph cache.
      atomic: Fix up compile on PPC with libatomic-ops
      xlib: Compile fix for no fontconfig
      csi-replay: compile fix
      test: Add clip-empty-save
      clip: Propagate all-clipped when copying
      test: Add linear-step-function
      pattern: Zero-length gradients are not necessary empty
      drm: Handle absence of PCI_ID
      drm/i915: Pass the correct length to dump the batchbuffer.
      drm/i915: Don't tile page sized bo.
      drm/i915: check for batch buffer overflow.
      drm/i915: Increase batch buffer space.
      drm/i915: Free potential leak of cloned textures.
      gl: Use pixman to create the gradient texture
      test: Add linear-gradient-subset
      ps: Propagate NOTHING_TO_DO
      ps: Initialise page bbox to page size
      qt: Fix compile error.
      drm/intel: An interrupted SET_TILING modifies the input parameters
      script: Compile without mmap
      drm/i965: fix use of uninitialized variable whilst dumping errors
      gl: Remove eagle support
      test: Add clip-twice-rectangle
      clip: Restrict composite extents to clip extents
      boilerplate: Include X11.h for GL/GLX
      clip: Avoiding derefencing NULL clip_region
      drm/i915: Use correct linear mode for mask.
      drm/i915: Set a source for unbounded fixups.

Dave Airlie (1):
      gl: initial support for EXT_texture_rectangle extension

Eric Anholt (42):
      [gl] Fix the glyph cache full flush to really try again.
      [gl] Clear the current_target cache when binding a framebuffer in creation.
      [gl] Use ADD instead of SOURCE when making a mask for overlapping glyphs.
      [gl] Use GLSL for fill_rectangles when available.
      [gl] Remove the special-casing of acquiring a pattern surface.
      [gl] Fix the color bits of CAIRO_CONTENT_ALPHA surface patterns to be 0.
      [gl] Use the UNSUPPORTED() macro in more places for fallback debugging.
      [gl] Add support for component-alpha glyph rendering.
      [gl] Use GL_RGBA textures even for CAIRO_CONTENT_COLOR.
      [gl] Composite component-alpha glyphs directly instead of through a mask.
      [gl] Cache a temporary glyph compositing mask for reuse later.
      [gl] Emit rectanges a whole primitive at a time.
      [gl] Release the context acquired in surface_create.
      [gl] Use GL_MESA_pack_invert to flip get_image of windows around.
      [gl] Check for GLSL support once at context init instead of per draw.
      [gl] Avoid macro obfuscation of the shader impl structures.
      [gl] Cut out the abstraction of GL_VERTEX_SHADER vs GL_VERTEX_SHADER_ARB.
      [gl] Convert fill_rectangles to the new GLSL core/arb wrapper.
      [gl] Use GLSL when available for glyph rendering.
      [gl] Move the glyphs shader construction to a more general location.
      [gl] Move normal composites to using GLSL when available.
      [gl] Move the component alpha composite to using GLSL when available.
      [gl] Use the shader source choice from operand setup instead of DIY.
      [gl] Test for required EXT_bgra and explain what it's used for.
      [gl] Convert the spans code to using GLSL when available.
      [gl] Sanity check the sampler uniform binding.
      [gl] Pull the gradient operand setup out to its own function.
      [gl] Fix create_gradient_texture to premultiply alpha.
      [gl] Implement linear gradients acceleration.
      [gl] When filling a gradient texture, multiply alpha after interpolating.
      [gl] When making a boilerplate GLX window, ensure it has alpha.
      [gl] Add radial gradients acceleration.
      [gl] Make the VBO once at startup instead of recreating per glyphs/spans.
      gl: Reduce the size of the gradient texture for small numbers of stops.
      gl: Add GLSL support for ARB_texture_rectangle, and repeat/reflect fallbacks.
      gl: Fix glyphs texture coordinates for ARB_texture_rectangle.
      gl: Implement draw_image for window targets.
      gl: Reduce complexity of radial fragment shaders.
      gl: Remove the old unused radial/linear gradients shaders.
      gl: Stop trying to handle first/last stop offset in the gradient shaders.
      gl: Be sure to do linear interpolation on gradients.
      test: Add an option to explicitly specify a test name to the runner.

Haakon Sporsheim (1):
      win32: Compile fix, rename render_row to render_rows.

Luo Jinghua (1):
      atomic: correct libatomic_ops version of _cairo_atomic_int_cmpxchg

M Joonas Pihlaja (6):
      [meta] Rename cairo_meta_surface_t to cairo_recording_surface_t.
      [test] Add missing mark_dirty() calls to test cases.
      [gstate] Change dash offset normalisation to preserve offsets in range.
      [test] Don't use uninitialised data in surface-source.c
      [dirty] Add more missing surface dirtying notifications.
      [stroker] Fix off-by-one memory allocation in _tessellate_fan().

Robert O'Callahan (2):
      [quartz] Fix gradient pattern painting
      [quartz] Cleanup fallback source

T. Zachary Laine (3):
      [gl] Removed repeated lines of source
      [gl] Clear the is_clear flag on the temporary glyph mask we create.
      [gl] Add function for creating a 1D texture to use for gradient lookups.

Tim Janik (1):
      Fixed documentation typo.

Zach Laine (1):
      [gl] Add shader support code for GL versions < 3.0.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.cairographics.org/archives/cairo-announce/attachments/20100225/2ae1370f/attachment.pgp>

More information about the cairo-announce mailing list