Commit Graph

1192 Commits

Author SHA1 Message Date
Pekka Paalanen bcdd579a58 gles2: update texture only if needed
When a surface is on a non-primary plane (overlay), we do not need to
keep the GL texture up-to-date, since we are not using it. Avoid calling
glTex(Sub)Image2D in that case, and accumulate the texture damage
separately.

This is especially useful for backends, that can put wl_shm buffers into
overlays.

The empty damage check has to be moved from surface_accumulate_damage()
into gles2_renderer_flush_damage(), because it really needs to check the
accumulated damage, not only the current damage. Otherwise, if a surface
migrates from a plane to the primary plane, and does not have new
damage, the texture would not be updated even for accumulated damage.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-11-08 16:56:26 -05:00
Pekka Paalanen a51e6fa322 build: make default backend configurable
Instead of hardcoding drm-backend.so as the default if environment
presents neither Wayland nor X11, have a ./configure option to change
it. It still defaults to drm-backend.so, if not given.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-11-08 16:56:25 -05:00
Ander Conselvan de Oliveira f97f811cf3 shell: Remove the old repaint debug mode
This was obsoleted by fan repaint debug.
2012-11-08 16:56:25 -05:00
Ander Conselvan de Oliveira 27508c2045 gles2: Add a debug binding for highlighting shaded content
Pressing mode-shift-space s will cause the fragment shaders to be
recompiled, adding a green tint to all composited content.
2012-11-08 16:56:25 -05:00
Ander Conselvan de Oliveira c509d2b152 compositor: Add debug key bindings infrastructure
Add the concept of debug key bindings, that are bindings that activate
debug features in the compositor. The bindings are added to a list in
the compositor, but the triggering them is left to the shell.

On the shell side, a global debug key binding is added. When the user
presses mod-shift-space, the shell will invoke the debug bindings based
on the next key press.

This also converts the debug shortcuts for repaint debugging, fan
repaint debugging and the hide overlays shortcut in compositor-drm to
use the new infrastructure.
2012-11-08 16:56:25 -05:00
Ander Conselvan de Oliveira 11f8d403a8 Add a headless backend
Add a headless backend and a noop renderer, mainly for testing
purposes. Although no rendering is performed with this backend,
this allow some of the code paths inside Weston and shm clients
to be tested without any windowing system or any need for drm
access.
2012-11-08 16:56:25 -05:00
Jan Arne Petersen cf18a32a39 shell: Do not insert input panel layer when locked
Do not try to insert the input panel layer in the layer list when the
shell is locked in show_input_panels(). The layer will already be
insrted in resume_desktop() anyways.

https://bugs.freedesktop.org/show_bug.cgi?id=56543

Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
2012-11-08 11:45:09 -05:00
Kristian Høgsberg 4d0214c62b compositor: Use pixman_region32_intersect_rect() instead of temp region
We avoid reusing 'opaque' and don't leak the region.
2012-11-08 11:36:02 -05:00
Daniel Stone b4f4a5980f Reset pending surface delta x and y on commit
The following sequence:
	wl_surface::attach(s, b, 1, 2)
	wl_surface::commit(s)
	wl_surface::commit(s)
would actually result in the surface getting moved by (2,4) as the
pending attach delta wasn't reset on commit, only by another attach.

This only shows up on single-buffered surfaces.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-11-08 11:32:29 -05:00
Daniel Stone d8e8271e94 Clip surface damage to the surface area
Otherwise glTexSubImage2D will reject our co-ordinates as being out of
bounds.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-11-08 11:32:24 -05:00
Daniel Stone c31f3dd679 SHM: Don't flush damage when there is none
Every single frame, we were calling the flush_damage handler in the
renderer.  For GLES2 with subimage, this wasn't too bad as we'd never
call glTexSubImage2D, but without it, we'd upload the entire frame
through glTexImage2D every time.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
2012-11-08 11:31:37 -05:00
Kristian Høgsberg de37d67ac5 compositor-drm: Always disable sprites for now
Until the nuclear pageflip work lands in KMS, we can't use sprites
reliably.
2012-11-02 15:19:02 -04:00
Ran Benita 7109cc8b06 compositor-x11: verify that detectable repeat was really set
Since the XKB says that support for detectable repeat is in fact
optional:
http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Querying_and_Changing_Per_Client_Flags
we might as well be good citizens and check that it was really set. With
the X server this would never happen, though.

Signed-off-by: Ran Benita <ran234@gmail.com>
2012-11-01 11:14:04 -04:00
Ran Benita 6a39d8790e compositor-x11: properly initialize XKB extension
In order to use XKB capabilities (as we do), the client must issue an
XkbUseExtension request:
http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Initializing_the_X_Keyboard_Extension

The reason this succeeds currently is that XOpenDisplay from Xlib does
this for us. But it is better not to rely on that, but do it explicitly
in XCB with the rest of the XKB init sequence.

Signed-off-by: Ran Benita <ran234@gmail.com>
2012-11-01 11:13:35 -04:00
Ran Benita 7b5e3cd9b1 compositor-x11: free or discard XCB generic_error's
Where we don't look at the error details, pass NULL to the 'error'
argument and test using the reply return value instead.
Where we do need it, remember to free it.

Signed-off-by: Ran Benita <ran234@gmail.com>
2012-11-01 11:12:14 -04:00
Ander Conselvan de Oliveira da1c908a2b compositor-drm: Add key binding for hidding overlays
Pressing ctrl-alt-o will cause the overlays to be hidden, but surfaces
will still be assigned to different planes. This helps with debugging
of repaint culling below surfaces in other planes.
2012-10-31 13:37:23 -04:00
Ander Conselvan de Oliveira 4bcf3a5fce compositor: Fix culling of repaints behind opaque surfaces
Culling of the repaint of a surface behind an opaque surface on the
same plane was broken by commit 547149a9 [1]. The idea of that commit
is that the damage obscured by an overlay would remain on the primary
plane damage and be repainted when the overlay moved. However, in the
case the two surfaces are on the same plane, the opaque one is not
obscured, so it ends up being repainted.

This commit adds an opaque field to struct weston_plane, that is built
incrementally when accumulating damage. The opaque region of surfaces
on the same plane are removed from the plane's damage, restoring the
previous culling behavior. But since damage behind opaque region of
other planes is maintained, the bug solved in the mentioned commit is
not regressed.

https://bugs.freedesktop.org/show_bug.cgi?id=56537
2012-10-31 13:37:01 -04:00
Ran Benita 424ae0151e compositor-x11: use _checked() with xkb_select_events to test for error
In order to use xcb_request_check(), given a request without a reply,
you need to use the _checked() variant of the request function.
See xcb-requests(3).

Signed-off-by: Ran Benita <ran234@gmail.com>
2012-10-31 10:50:40 -04:00
Kristian Høgsberg 57e090746e shell: End popups if we trigger a shell grab
Clicking outside popups closes them except in case of a shell grab
(move, resize or rotate), in which case we move the parent window away
from under the popup.  Instead, just end the popup in those cases.

https://bugs.freedesktop.org/show_bug.cgi?id=55674
2012-10-30 14:09:36 -04:00
Ander Conselvan de Oliveira 5df8ecac5d compositor: Fix partial repaints
Partial repaints have been broken since the introduction of the atomic
surface updates. The problem was that surface_commit would set the
geometry dirty flag unconditionally, causing transform updates on every
frame which would in turn cause weston_surface_damage_below() to damage
the whole surface area.

This patch changes this so that flag is only set if the pending buffer
has a different size, the location of the surface changed or the opaque
region changed.

Note that changing the opaque region will cause a full repaint of the
affected surface, because of the transform update.

https://bugs.freedesktop.org/show_bug.cgi?id=56538
2012-10-30 13:53:51 -04:00
Kristian Høgsberg 7330862f9e compositor-x11: Grab pointer on button press, ungrab on release
This lets us confine the X pointer to the Weston X window, which corresponds
better with the rendered Wayland cursor actually moves.

https://bugs.freedesktop.org/show_bug.cgi?id=53558
2012-10-30 11:04:54 -04:00
David Herrmann 0af066ff25 compositor-drm: prefer PCI boot_vga GPU over other GPUs
If we can find a boot_vga PCI GPU, we should prefer it over any other GPU
that is connected to the system. The boot_vga flag tells us that this GPU
is the primary system GPU.

This fixes problems on two-GPU-systems were the wrong GPU is used. It also
fixes systems were DisplayLink GPUs are available with lower IDs than PCI
GPUs (although, this seems unlikely).

Note that udev_enumerate guarantees that the entry-list is sorted. So for
systems that have platform-GPUs, these should almost always be reported
prior to hotpluggable (PCI, USB, ...) GPUs, as the kernel probes them
first.

https://bugs.freedesktop.org/show_bug.cgi?id=56237

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-10-29 16:31:38 -04:00
Kristian Høgsberg aac8693cf3 compositor-x11: Inherit initial modifier state from XKB
https://bugs.freedesktop.org/show_bug.cgi?id=52419
2012-10-29 14:15:40 -04:00
Tiago Vignatti ac78bb1017 xwm: Fail safely if cursor is not found
It will use the stock 'x' cursor instead when the system cursors are not
provided.

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-10-29 13:44:33 -04:00
Pekka Paalanen 9249f93057 compositor-drm: remove a stale comment
This comment became stale in:

commit 65a11e1039
Author: Kristian Høgsberg <krh@bitplanet.net>
Date:   Fri Aug 3 11:30:18 2012 -0400

    compositor: Accumulate damage per plane

Now it is just misleading. Remove it.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-25 14:59:30 -04:00
Pekka Paalanen 035a0323ef gles2: check eglBindWaylandDisplayWL return value
If the bind fails, do not bother pretending the EGL Wayland extension
is usable, and no need to unbind, either.

Print some important details about the GLESv2 renderer configuration
into the log.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-25 14:58:59 -04:00
Pekka Paalanen 9c3fe25b4d gles2: log EGL config info
Interesting in new environments.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-25 14:57:17 -04:00
Kristian Høgsberg 00fbbe6b60 compositor: Clip pointer coordinates on pointer enter as well
When tiling window managers resize a non-resizable window they're violating
ICCCM.  Not some hippie-community standard like EWMH, but ICCCM, which is
about as old and sacred as the constitution.  If they want to force a window
to be a size it wasn't designed for, at least they could have the decency to
reparent the client window into a bigger containing window of whatever size
they think it should be.  But apparently ICCCM compliance is too much to ask.

Anyway, all that just to say that it's really not our fault when we get an
enter event with coordinates outside the valid output region.  But we'll
clip it anyway and work around mis-behaving tiling WMs.
2012-10-24 09:54:42 -04:00
Kristian Høgsberg 1d1e0a5ffa compositor-drm: Disable hw cursor if allocation fails
Instead of crashing later, we can just fall back to gl rendered cursors.
2012-10-21 13:29:26 -04:00
Kristian Høgsberg 8c31a4c025 Define our own container_of as well
Don't rely on libwayland-client/server to define this for us.
2012-10-19 23:05:37 -04:00
Kristian Høgsberg 5717b6dbf1 Stop relying on ARRAY_LENGTH being defined in wayland-util.h
Time to break a bad habit.
2012-10-19 17:12:38 -04:00
John Kåre Alsaker 7a92ea494c util: Check result of weston_surface_animation_run. 2012-10-16 11:51:53 -04:00
John Kåre Alsaker 5e48a85e6b compositor-x11: Fix a memory leak. 2012-10-16 11:50:05 -04:00
John Kåre Alsaker e2e3d07beb compositor: Check if surface creation failed in weston_compositor_fade. 2012-10-16 11:39:09 -04:00
John Kåre Alsaker 143a898fcc compositor-x11: Clean up event handling. 2012-10-16 11:31:45 -04:00
John Kåre Alsaker 5b90d8f374 weston-launch: Check result of pam_start. 2012-10-16 11:26:00 -04:00
Jonas Ådahl b984e40c28 evdev: Update axis notifications to follow protocol
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-16 10:33:03 -04:00
Kristian Høgsberg 5ca8728ece Make distcheck pass 2012-10-15 21:10:10 -04:00
Matt Roper 47c1b98292 compositor: Call into grab handler for touch events
Rather than delivering touch events directly to clients, we'll now
call through the touch grab handler.  The default handler (in
wayland-server) will deliver these events the same way they worked
before.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
2012-10-15 20:54:43 -04:00
Jonas Ådahl d9f5819e8f evdev-touchpad: Implement two finger scroll
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-15 20:54:43 -04:00
Jonas Ådahl b0b87baf7c shell: Update bindings to conform to pointer axis protocol
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-15 20:54:43 -04:00
Jonas Ådahl 62efe20cb9 compositor-x11: Update axis notifications to follow protocol
Axis events are in the same coordinate space as motion events, thus
measured in pixels. To emulate axis events for discrete events move the
axis by a number of pixels every step.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-15 20:54:43 -04:00
Jonas Ådahl 87b0735273 evdev-touchpad: Add a finite-state machine
The finite-state machine is so far used to implement support for tapping
and dragging.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-15 20:54:43 -04:00
Jonas Ådahl c689493b1a evdev-touchpad: Cleanup and refactoring
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2012-10-15 20:54:43 -04:00
Kristian Høgsberg feb3c1d33b clients: Use wl_display_dispatch_pending() 2012-10-15 20:54:43 -04:00
Ander Conselvan de Oliveira 5fd5580c88 compositor: Unmap drag icon surface when its released
libwayland-server was changed to emit the new drag icon signal instead
of faking an attach event with a NULL buffer so this has to be done on
this side.
2012-10-11 09:47:50 -04:00
Pekka Paalanen 8ec4ab64f0 compositor: fix event-test
event-test assumes, that even without the very first wl_surface.attach
(and commit), the surface will have infinite (previously undef) input
region. event-test simply has test-client to create a wl_surface, and
then it forcefully sets its position and size, and assumes the input
region is now the full surface, so that notify_motion() will hit it.

Change Weston to initialize the input region to infinite, instead of
empty.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10 21:39:23 -04:00
Pekka Paalanen bc10638cd9 compositor, clients: apply wl_surface.frame on commit
Apply wl_surface.frame request only on the next wl_surface.commit
according to the new protocol.

This makes it explicit, which repaint actually triggered the frame
callback, since commit schedules a repaint. Otherwise, something causing
a repaint before a commit could trigger the frame callback too early.

Ensure all demo clients send commit after wl_surface.frame. Note, that
GL apps rely on eglSwapBuffers() sending commit. In toytoolkit, it is
assumed that window_flush() always does a commit.

compositor-wayland assumes renderer->repaint_output does a commit.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10 21:39:11 -04:00
Pekka Paalanen 6c71ee1ba2 compositor: fix surface pointer cast
In weston, the wl_resource:data field for a wl_surface object always
contains struct weston_surface *, never struct wl_surface *.

Even though this is just a cosmetic fix, it should reduce confusion.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10 21:39:00 -04:00
Pekka Paalanen b89b004e57 shell: do not double-init input region
weston_surface_create() already inits the input region.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10 21:38:52 -04:00