I can reproduce this (debian testing amd64). Here's what git bisect says:
6ed0c6224b763e9cbcfb0d46f188883d8425bab5 is the first bad commit
commit 6ed0c6224b763e9cbcfb0d46f188883d8425bab5
Author: Chris Wilson <email address hidden>
Date: Fri Jul 29 13:03:59 2011 +0100
pdf: Remove redundant clip regions
If the extents of the operation is wholly contained within the clip
region, then we can safely not invoke any clipping.
Signed-off-by: Chris Wilson <email address hidden>
:040000 040000 42e4cbdf15d9d1a7a92da02d2fa291c68c6ea6b7 8bef42b00d2da3b1a14e895bb51a598335ba3972 M src
I checked twice and it really does work before this commit. However, trying to revert this changes ontop of current master (by hand) didn't make this work again.
Now someone please tell me how ignoring a clip can cause misplaced glyphs...
In case it turns out that this wasn't the faulty commit:
$ git bisect log
git bisect start
# bad: [9f52261dd7941ec7b338b050479da25c2571f9ac] xcb: Correctly handle a recording surface's extents
git bisect bad 9f52261dd7941ec7b338b050479da25c2571f9ac
# good: [4938e11ffe11781e4e294092807ebc67f362eac6] version: Bump for 1.10.2 release
git bisect good 4938e11ffe11781e4e294092807ebc67f362eac6
# skip: [6b3d53646eb7aa3f13a0a6d133ec2ffcd1df8fdd] image: peek through a snapshot to the recording surface behind
git bisect skip 6b3d53646eb7aa3f13a0a6d133ec2ffcd1df8fdd
# good: [c0dc933efda7672b07e188a1195821340f911a66] xcb: Remove CAIRO_XCB_RENDER_HAS_COMPOSITE_SPANS
git bisect good c0dc933efda7672b07e188a1195821340f911a66
# bad: [2209ec5a15f535b1fae19c84b796f3d11a12de00] test: Make cairo_test_suite depend upon the any2ppm exectuable on all platforms
git bisect bad 2209ec5a15f535b1fae19c84b796f3d11a12de00
# bad: [6155348966b89a216d2e5ee0b4784507a0226a9f] default-context: Do not allow restoring pushed gstates
git bisect bad 6155348966b89a216d2e5ee0b4784507a0226a9f
# good: [e775db35d9306b74867f981a08d253562b15cffd] xcb: Move cairo_xcb_picture_t to cairo-xcb-private.h
git bisect good e775db35d9306b74867f981a08d253562b15cffd
# good: [04ef07ee3bdeab9b2b3d74547214c6735ebb27b3] clip: Embed a single box to avoid a common allocation
git bisect good 04ef07ee3bdeab9b2b3d74547214c6735ebb27b3
# good: [aad2c3dd0f7a512e6d3db087bf94ab53e30e92ed] gl: Use cairo_rectangle_int_t
git bisect good aad2c3dd0f7a512e6d3db087bf94ab53e30e92ed
# skip: [74a86a76a9c32a74d63712b718c90669889820e6] clipper: Detect a incremental change in the general clip-path
git bisect skip 74a86a76a9c32a74d63712b718c90669889820e6
# good: [89cb071d14f02f062d6960b9c49bced8212d032b] script: Initialize recording extents
git bisect good 89cb071d14f02f062d6960b9c49bced8212d032b
# skip: [7c6e1b8db89420fa69ebd8d2ba12dde1aeb47ea8] xcb: Short-circuit multiplying the alpha mask by 1.0
git bisect skip 7c6e1b8db89420fa69ebd8d2ba12dde1aeb47ea8
# bad: [d2ea8bd070f3bff87ec952af490093375cbc1f05] build: Respect CFLAGS and LIBS env settings
git bisect bad d2ea8bd070f3bff87ec952af490093375cbc1f05
# skip: [4032c86127a5f1658c2bddbf1c642fb62e21a208] fallback: Prevent recursion when combining with the clip
git bisect skip 4032c86127a5f1658c2bddbf1c642fb62e21a208
# bad: [0660f62fe5ffdd86eedf8262f3ac50fb039491c1] gl: Rectilinear fast path
git bisect bad 0660f62fe5ffdd86eedf8262f3ac50fb039491c1
# skip: [2787ef4e73fe668edbb938aa82ab569789a39116] pattern: Complete the list of possible pattern errors
git bisect skip 2787ef4e73fe668edbb938aa82ab569789a39116
# bad: [488c94220d46f10a0fa8fa4dfb1beda88d80988e] ps: Apply the clip reduction techniques from pdf
git bisect bad 488c94220d46f10a0fa8fa4dfb1beda88d80988e
# skip: [6ec24760b32da5ca1f0a67f6ff344b91f8bc020c] device: Flush on a finished device is a no-op
git bisect skip 6ec24760b32da5ca1f0a67f6ff344b91f8bc020c
# good: [29a302cc4bc7734129bca8fe242dc7ecb626895d] clipper: Also need to guard against the incoming clip being NULL
git bisect good 29a302cc4bc7734129bca8fe242dc7ecb626895d
# bad: [6ed0c6224b763e9cbcfb0d46f188883d8425bab5] pdf: Remove redundant clip regions
git bisect bad 6ed0c6224b763e9cbcfb0d46f188883d8425bab5
I can reproduce this (debian testing amd64). Here's what git bisect says:
6ed0c6224b763e9 cbcfb0d46f18888 3d8425bab5 is the first bad commit cbcfb0d46f18888 3d8425bab5
commit 6ed0c6224b763e9
Author: Chris Wilson <email address hidden>
Date: Fri Jul 29 13:03:59 2011 +0100
pdf: Remove redundant clip regions
If the extents of the operation is wholly contained within the clip
region, then we can safely not invoke any clipping.
Signed-off-by: Chris Wilson <email address hidden>
:040000 040000 42e4cbdf15d9d1a 7a92da02d2fa291 c68c6ea6b7 8bef42b00d2da3b 1a14e895bb51a59 8335ba3972 M src
I checked twice and it really does work before this commit. However, trying to revert this changes ontop of current master (by hand) didn't make this work again.
Now someone please tell me how ignoring a clip can cause misplaced glyphs...
In case it turns out that this wasn't the faulty commit:
$ git bisect log c7b338b050479da 25c2571f9ac] xcb: Correctly handle a recording surface's extents 7b338b050479da2 5c2571f9ac 1e4e294092807eb c67f362eac6] version: Bump for 1.10.2 release e4e294092807ebc 67f362eac6 3f13a0a6d133ec2 ffcd1df8fdd] image: peek through a snapshot to the recording surface behind f13a0a6d133ec2f fcd1df8fdd 2b07e188a119582 1340f911a66] xcb: Remove CAIRO_XCB_ RENDER_ HAS_COMPOSITE_ SPANS b07e188a1195821 340f911a66 b1fae19c84b796f 3d11a12de00] test: Make cairo_test_suite depend upon the any2ppm exectuable on all platforms 1fae19c84b796f3 d11a12de00 216d2e5ee0b4784 507a0226a9f] default-context: Do not allow restoring pushed gstates 16d2e5ee0b47845 07a0226a9f 74867f981a08d25 3562b15cffd] xcb: Move cairo_xcb_picture_t to cairo-xcb-private.h 4867f981a08d253 562b15cffd 9b2b3d74547214c 6735ebb27b3] clip: Embed a single box to avoid a common allocation b2b3d74547214c6 735ebb27b3 2e6d3db087bf94a b53e30e92ed] gl: Use cairo_rectangle _int_t e6d3db087bf94ab 53e30e92ed 74d63712b718c90 669889820e6] clipper: Detect a incremental change in the general clip-path 4d63712b718c906 69889820e6 062d6960b9c49bc ed8212d032b] script: Initialize recording extents 62d6960b9c49bce d8212d032b fa69ebd8d2ba12d de1aeb47ea8] xcb: Short-circuit multiplying the alpha mask by 1.0 a69ebd8d2ba12dd e1aeb47ea8 f87ec952af49009 3375cbc1f05] build: Respect CFLAGS and LIBS env settings 87ec952af490093 375cbc1f05 658c2bddbf1c642 fb62e21a208] fallback: Prevent recursion when combining with the clip 58c2bddbf1c642f b62e21a208 86eedf8262f3ac5 0fb039491c1] gl: Rectilinear fast path 6eedf8262f3ac50 fb039491c1 8edbb938aa82ab5 69789a39116] pattern: Complete the list of possible pattern errors edbb938aa82ab56 9789a39116 0a0fa8fa4dfb1be da88d80988e] ps: Apply the clip reduction techniques from pdf a0fa8fa4dfb1bed a88d80988e ca1f0a67f6ff344 b91f8bc020c] device: Flush on a finished device is a no-op a1f0a67f6ff344b 91f8bc020c 4129bca8fe242dc 7ecb626895d] clipper: Also need to guard against the incoming clip being NULL 129bca8fe242dc7 ecb626895d 9cbcfb0d46f1888 83d8425bab5] pdf: Remove redundant clip regions cbcfb0d46f18888 3d8425bab5
git bisect start
# bad: [9f52261dd7941e
git bisect bad 9f52261dd7941ec
# good: [4938e11ffe1178
git bisect good 4938e11ffe11781
# skip: [6b3d53646eb7aa
git bisect skip 6b3d53646eb7aa3
# good: [c0dc933efda767
git bisect good c0dc933efda7672
# bad: [2209ec5a15f535
git bisect bad 2209ec5a15f535b
# bad: [6155348966b89a
git bisect bad 6155348966b89a2
# good: [e775db35d9306b
git bisect good e775db35d9306b7
# good: [04ef07ee3bdeab
git bisect good 04ef07ee3bdeab9
# good: [aad2c3dd0f7a51
git bisect good aad2c3dd0f7a512
# skip: [74a86a76a9c32a
git bisect skip 74a86a76a9c32a7
# good: [89cb071d14f02f
git bisect good 89cb071d14f02f0
# skip: [7c6e1b8db89420
git bisect skip 7c6e1b8db89420f
# bad: [d2ea8bd070f3bf
git bisect bad d2ea8bd070f3bff
# skip: [4032c86127a5f1
git bisect skip 4032c86127a5f16
# bad: [0660f62fe5ffdd
git bisect bad 0660f62fe5ffdd8
# skip: [2787ef4e73fe66
git bisect skip 2787ef4e73fe668
# bad: [488c94220d46f1
git bisect bad 488c94220d46f10
# skip: [6ec24760b32da5
git bisect skip 6ec24760b32da5c
# good: [29a302cc4bc773
git bisect good 29a302cc4bc7734
# bad: [6ed0c6224b763e
git bisect bad 6ed0c6224b763e9