Skip to content
  1. Oct 11, 2016
  2. Jan 23, 2016
  3. Oct 15, 2015
  4. Sep 04, 2015
  5. Aug 13, 2015
    • Rui Matos's avatar
      compositor: Handle fences in the frontend X connection · 916070cc
      Rui Matos authored
      Since mutter has two X connections and does damage handling on the
      frontend while fence triggering is done on the backend, we have a race
      between XDamageSubtract() and XSyncFenceTrigger() causing missed
      redraws in the GL_EXT_X11_sync_object path.
      
      If the fence trigger gets processed first by the server, any client
      drawing that happens between that and the damage subtract being
      processed and is completely contained in the last damage event box
      that mutter got, won't be included in the current frame nor will it
      cause a new damage event.
      
      A simple fix for this would be XSync()ing on the frontend connection
      after doing all the damage subtracts but that would add a round trip
      on every frame again which defeats the asynchronous design of X
      fences.
      
      Instead, if we move fence handling to the frontend we automatically
      get the right ordering between damage subtracts and fence triggers.
      
      https://bugzilla.gnome.org/show_bug.cgi?id=728464
      916070cc
    • Ting-Wei Lan's avatar
    • Aaron Plattner's avatar
      compositor: Fix GL_EXT_x11_sync_object race condition · c77e482b
      Aaron Plattner authored and Rui Matos's avatar Rui Matos committed
      
      
      The compositor maintains a ring of shared fences with the X server in order to
      properly synchronize rendering between the X server and the compositor's GPU
      channel.  When all of the fences have been used, the compositor needs to reset
      one so that it can be reused.  It does this by first waiting on the CPU for the
      fence to become triggered, and then sending a request to the X server to reset
      the fence.
      
      If the compositor's GPU channel is busy processing other work (e.g. the desktop
      switcher animation), then the X server may process the reset request before the
      GPU has consumed the fence.  This causes the GPU channel to hang.
      
      Fix the problem by having the compositor's GPU channel trigger its own fence
      after waiting for the X server's fence.  Wait for that fence on the CPU before
      sending the reset request to the X server.  This ensures that the GPU has
      consumed the X11 fence before the server resets it.
      
      Signed-off-by: default avatarAaron Plattner <aplattner@nvidia.com>
      
      https://bugzilla.gnome.org/show_bug.cgi?id=728464
      c77e482b
    • Rui Matos's avatar
      compositor: Add support for GL_EXT_x11_sync_object · 9cc80497
      Rui Matos authored
      If GL advertises this extension we'll use it to synchronize X with GL
      rendering instead of relying on the XSync() behavior with open source
      drivers.
      
      Some driver bugs were uncovered while working on this so if we have
      had to reboot the ring a few times, something is probably wrong and
      we're likely to just make things worse by continuing to try.  Let's
      err on the side of caution, disable ourselves and fallback to the
      XSync() path in the compositor.
      
      https://bugzilla.gnome.org/show_bug.cgi?id=728464
      9cc80497
  6. Aug 02, 2015
  7. Aug 01, 2015
  8. Jul 30, 2015
    • Rui Matos's avatar
      window: Remove fullscreen_after_placement special case · 0765963a
      Rui Matos authored
      This was introduced in commit c6793d47
      to prevent window self-maximisation. It turns out that that bug seems
      to have been fixed meanwhile in a different way since the reproducer
      in https://bugzilla.gnome.org/show_bug.cgi?id=461927#c37 now works
      fine with this special handling removed.
      
      In fact, failing to set window->fullscreen immediately when loading
      the initial set of X properties causes us to create a UI frame for a
      window that sets _NET_WM_STATE_FULLSCREEN.
      
      This, in turn, might cause the fullscreen constrain code to fail if
      the window also sets min_width/min_height size hints to be the monitor
      size since the UI frame size added to those makes the rectangle too
      big to fit the monitor. If the window doesn't set these hints, we
      fullscreen it but the window will get sized such that the UI frame is
      taken into account while it really shouldn't (see the reproducer
      above).
      
      https://bugzilla.gnome.org/show_bug.cgi?id=753020
      0765963a
  9. Jul 29, 2015
  10. Jul 15, 2015
  11. Jul 14, 2015
  12. Jul 02, 2015
  13. Jun 30, 2015
  14. Jun 26, 2015
    • Jasper St. Pierre's avatar
      surface-actor-x11: Make sure to set a size when unredirected · 351f444f
      Jasper St. Pierre authored and Florian Müllner's avatar Florian Müllner committed
      When we're unredirected, we don't have a pixmap, and thus our allocation
      becomes 0x0. So when events come in, they pass right through our actor,
      going to the one underneath in the stack.
      
      Fix this by having a fallback size on the shaped texture actor when
      we're unredirected, causing it to always have a valid allocation.
      
      This fixes clicking on stuff in sloppy / mouse mode focus.
      351f444f
    • Jasper St. Pierre's avatar
      theme: Make sure to clear the entirety of buttons properly · 67f2e507
      Jasper St. Pierre authored and Florian Müllner's avatar Florian Müllner committed
      In commit cc5def10, buttons were changed from GdkRectangles to
      MetaButtonSpace units, but the corresponding memset hack was not.
      
      This means that the clickable portion of the unshade rectangle
      was always set to uninitalized memory. The effects of this were
      random, but in cases where the moon is aligned just right, the
      rectangle would graze over the borders, and so it would take priority
      over other borders and show a pointer cursor instead of a resize
      cursor.
      67f2e507
  15. Jun 20, 2015
  16. May 28, 2015
  17. May 22, 2015
  18. May 14, 2015
  19. May 08, 2015
  20. May 01, 2015
  21. Apr 30, 2015
  22. Apr 27, 2015
  23. Apr 17, 2015
  24. Apr 15, 2015
  25. Apr 14, 2015