Bug 4165

Summary: A few pixels wrong in some tests on PPC
Product: cairo Reporter: Billy Biggs <billy.biggs>
Component: image backendAssignee: Billy Biggs <billy.biggs>
Status: RESOLVED FIXED QA Contact: cairo-bugs mailing list <cairo-bugs>
Severity: normal    
Priority: high CC: cworth
Version: 0.9.3   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: pixels-off.c
Patch

Description Billy Biggs 2005-08-20 21:48:35 UTC
The following tests all have a bunch of incorrect pixels using the image backend
on my PowerBook G4 running OS X (freetype not ATSUI).  These failures are not
reproducable on Linux/x86, so I suspect they are more endian issues:

  clip-operator
  fill-and-stroke
  linear-gradient
  operator-clear
  operator-source
  unantialiased-shapes
  unbounded-operator
Comment 1 Billy Biggs 2005-08-20 22:13:30 UTC
Created attachment 2954 [details]
pixels-off.c

Attached is a minimal failing test case.  The problem seems to be the mask
created for the path.  Here is the mask on x86:

00 00 00 00 00 00 00 00 00 00 00 00 
00 00 0a 68 c4 f5 f5 c4 68 0a 00 00 
00 2b dd ff ff ff ff ff ff dd 2b 00 
0a e0 ff c5 3d 0a 0a 3d c5 ff e0 0a 
70 ff c2 06 00 00 00 00 06 c2 ff 70 
c7 ff 3a 00 00 00 00 00 00 3a ff c7 
f4 ff 0b 00 00 00 00 00 00 0b ff f4 
f4 ff 0b 00 00 00 00 00 00 0b ff f4 
c7 ff 3a 00 00 00 00 00 00 3a ff c7 
70 ff c2 06 00 00 00 00 06 c2 ff 70 
0a e0 ff c5 3d 0a 0a 3d c5 ff e0 0a 
00 2b dd ff ff ff ff ff ff dd 2b 00 
00 00 0a 68 c4 f5 f5 c4 68 0a 00 00 

And here is the mask on PPC:

00 00 00 00 00 00 00 00 00 00 00 00
00 00 0a 68 c4 f5 f5 c4 68 0a 00 00
00 2b dd ff ff ff ff ff ff dd 2b 00
0a e0 ff c5 3d 0a 0a 3d c5 ff e0 0a
70 ff c2 06 00 00 00 00 06 c2 ff 70
c7 ff 3a 00 00 00 00 00 00 3a ff c7
f4 ff 0b 00 00 00 00 00 00 0b ff f4
bf 76 00 00 00 00 00 00 00 0b ca 50
c7 ff 2d 00 00 00 00 00 00 3a ff a0
70 ff c2 06 00 00 00 00 06 c2 ff 66
0a e0 ff c5 3d 0a 0a 3d c5 ff e0 0a
00 2b dd ff ff ff ff ff ff dd 2b 00
00 00 0a 68 c4 f5 f5 c4 68 0a 00 00
Comment 2 Billy Biggs 2005-08-20 22:43:59 UTC
The list of trapezoids returned by _cairo_path_fixed_stroke_to_traps differs
between my two systems.
Comment 3 Billy Biggs 2005-08-21 11:08:50 UTC
Created attachment 2965 [details] [review]
Patch

The differences are due to a behaviour difference between qsort() on my two
machines.  The attached patch modifies the qsort vertex comparision function in
cairo-hull.c to handle coincident points.  This makes the output of all of the
above tests equal (except for linear-gradient, which seems to also have a
different problem).

When this patch is applied, the output for all of those tests will also need to
be updated.
Comment 4 Billy Biggs 2005-08-21 11:42:24 UTC
2005-08-21  Billy Biggs  <vektor@dumbterm.net>

        Fix for bug #4165:

        * src/cairo-hull.c: (_cairo_hull_vertex_compare): Use pointer
        comparison for coincident points to ensure a well-defined
        ordering, and avoid setting discard on both points.  This fixes
        problems with my Mac's implementation of qsort.  Final patch by
        Bertram Felgenhauer.

        * test/clip-operator-ref.png:
        * test/linear-gradient-ref.png:
        * test/operator-clear-ref.png:
        * test/operator-source-ref.png:
        * test/unantialiased-shapes-ref.png:
        * test/unbounded-operator-ref.png: Update reference images after
        the change.
Comment 5 Carl Worth 2005-08-22 17:14:22 UTC
Move bugs against "cvs" version to "0.9.3" so we can remove the "cvs" version.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.