#12542 HIGH 13.2.0: Screen rotation causes graphics corruption on XO-4

Zarro Boogs per Child bugtracker at laptop.org
Tue Apr 16 11:41:04 EDT 2013


#12542: Screen rotation causes graphics corruption on XO-4
---------------------------------------+------------------------------------
           Reporter:  greenfeld        |       Owner:  dsd                              
               Type:  defect           |      Status:  new                              
           Priority:  high             |   Milestone:  13.2.0                           
          Component:  x window system  |     Version:  Development build as of this date
         Resolution:                   |    Keywords:                                   
        Next_action:  diagnose         |    Verified:  0                                
Deployment_affected:                   |   Blockedby:                                   
           Blocking:                   |  
---------------------------------------+------------------------------------

Comment(by dsd):

 Chris Wilson thinks this is a problem in the dove DDX. To get more of a
 grasp on the problem, here is an audit of the CreatePixmap2,
 ModifyPixmapHeader and DestroyPixmap calls that arrive in the driver, when
 running an X session which does the following.

  1. Start X
  2. xrandr -o left
  3. xrandr -o normal
  4. Run "moon.py" (program that draws a pixmap of a moon image on screen,
 exits after a couple of seconds)
  5. Close X

 == Upon X init ==

  * CreatePixmap w=0 h=0 (note that '''this pixmap is never destroyed''')
  * ModifyPixmapHeader on that pixmap, w=0 h=0
  * ModifyPixmapHeader on that pixmap, w=1200 h=1200

  * Create 3 internal 1200x900 pixmaps used for EXA operations (one for
 each of alpha, mask, repeat)

  * CreatePixmap w=16 h=16
  * ModifyPixmapHeader on that pixmap, w=16 h=16 (note that '''this pixmap
 is never destroyed''')

  * CreatePixmap w=16 h=16
  * ModifyPixmapHeader on that pixmap, w=16 h=16
  * DestroyPixmap on that pixmap

  * CreatePixmap w=16 h=16
  * ModifyPixmapHeader on that pixmap, w=16 h=16
  * DestroyPixmap on that pixmap

 == Upon xrandr -o left ==

  * Destroy 3 internal EXA pixmaps
  * Create 3 internal 900x1200 pixmaps used for EXA operations

  * CreatePixmap w=0 h=0 ('''lets call this one "pixmap A"''' for later
 reference)
  * ModifyPixmapHeader on that pixmap, w=0 h=0
  * ModifyPixmapHeader on that pixmap, w=1200 h=900

 == Upon xrandr -o normal ==

  * Destroy 3 internal EXA pixmaps
  * Create 3 internal 1200x900 pixmaps used for EXA operations (these
 pixmaps are never destroyed, but this is clearly an internal/unrelated
 driver bug)

 == Upon launching moon.py ==

  * CreatePixmap w=1 h=1
  * ModifyPixmapHeader on that pixmap, w=1 h=1

  * CreatePixmap w=726 h=726
  * ModifyPixmapHeader on that pixmap, w=726 h=726

  * ModifyPixmapHeader on '''pixmap A''', w=1536 h=64, '''happens 37
 times''' at this point

  * CreatePixmap w=726 h=726
  * DestroyPixmap on that pixmap

  * DestroyPixmap on the 1x1 pixmap that was created when moon.py was
 launched
  * DestroyPixmap on the 726x726 pixmap that was created when moon.py was
 launched

 == Upon X shutdown ==

  * DestroyPixmap on '''pixmap A'''

 == Observations ==

 The very first pixmap created (1200x1200) is never destroyed. A 16x16
 pixmap also created during X init is never destroyed.

 There are 37 consecutive calls to ModifyPixmapHeader that happen at the
 same time when the image is being drawn on screen, I assume that
 corresponds to the drawing of the image. I am a little concerned that the
 pixmap in question here was created when the screen was rotated left (we
 have since returned to normal orientation) - it just seems a little odd to
 be using that "stale" pixbuf (whereas using one that was freshly created
 or one that was created before any rotation happened would make a bit more
 sense to me).

-- 
Ticket URL: <http://dev.laptop.org/ticket/12542#comment:10>
One Laptop Per Child <http://laptop.org/>
OLPC bug tracking system


More information about the Bugs mailing list