Commit Graph

7174 Commits

Author SHA1 Message Date
Chris Wilson 4dfd7674d8 intel: Select SNA as the default acceleration method
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 15:18:29 +01:00
Chris Wilson 42d94356f6 sna: Add XMir support
With lots of updates by Christopher James Halse Rogers as he updated the
XMir API - but now supposedly frozen!

"<RAOF> ickle: I think the xmir api should be pretty much stable now,
barring people coming up with more awesome ways of doing things."

Signed-off-by: Christopher James Halse Rogers <raof@ubuntu.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 15:18:29 +01:00
Chris Wilson f906a4de62 sna: WriteThrough support is now upstream
Now that the WriteThrough ABI is upstream, we can rely on runtime
detection of the current interface.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 15:18:29 +01:00
Chris Wilson 6f49a413aa configure: Check for required UMS headers before enabling
Prevents the build failing with i810 if we can not find vgaHW.h

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 15:18:28 +01:00
Chris Wilson ecb3c303f8 sna: Fix sna_pixmap_move_area_to_gpu() to return the sna_pixmap
Like it's sibling sna_pixmap_move_to_gpu(), it helps to know the private
sna_pixmap after the operation rather than just a boolean success/fail
result, and make it more robust in the process.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 12:25:47 +01:00
Chris Wilson ad774cf3a2 sna/dri: Refine proposed async swap interface
The latest proposal for passing swap_interval==0 is through the normal
ScheduleSwap() call, so we can remove the specialised function.

Link: http://lists.x.org/archives/xorg-devel/2013-September/037661.html
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-04 11:39:08 +01:00
Chris Wilson d2f19d5a1f sna: Tidy walking the window tree for updating our pixmaps
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-03 19:37:29 +01:00
Chris Wilson 47e718bf32 sna/dri: Handle failure to move the pixmap into the GPU for CopyRegion
It should not fail, except in extreme cicumstances, and even then we shall
not crash.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-03 18:06:07 +01:00
Chris Wilson 5c51cd4e91 sna: Mark imported PRIME fd as starting in DOMAIN_NONE
Or rather, do not assume anything about the initial domains.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-03 18:06:07 +01:00
Chris Wilson 92b7500668 sna: Add some more DBG
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-03 17:02:12 +01:00
Chris Wilson efc960b135 intel-virtual-output: Clear send flags when doing XSync
When falling back to using XSync rather than XSendEvent it is imperative
that we remember to clear the flag so that we don't keep on performing
the synchronous RTT every time.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-03 01:00:23 +01:00
Chris Wilson 6f090044d1 intel-virtual-output: Remember to mark the timer as active when moving the mouse
Otherwise we throttle mouse updates to the next display update...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 23:52:52 +01:00
Chris Wilson 91aca61c83 intel-virtual-output: Don't clobber the XID inside the ShmSegmentInfo
As there is an XID inside the ShmSegmentInfo we cannot share one between
both endpoints, or else it gets clobbered and rendering is lost (unless
by happy coincidence the last XID is available in both Xservers).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 23:44:23 +01:00
Chris Wilson d54f0fa16d intel-virtual-output: Remove the stray 1
The 'output-is-changed' flags was accidentally initialised to 01 rather
than 0, causing all attached outputs to be considered to have changed
everytime.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 22:56:03 +01:00
Chris Wilson 84b66849fc intel-virtual-output: Don't set the SHM active flag along !SHM composite paths
Otherwise we may end up waiting for an event that will never be sent.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 22:55:17 +01:00
Chris Wilson 13a28f607f intel-virtual-overlay: Try to shutdown gracefully
Attempt to clean up the VIRTUAL mess when we exit.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 22:42:48 +01:00
Chris Wilson e6e6572ac8 intel-virtual-output: Fallback to probing GetScreenResources
If the Display doesn't support the more recent non-forced-detection
GetScreenResources, use the older version instead.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 22:27:42 +01:00
Chris Wilson 7c5d269f25 intel-virtual-overlay: Keep bumblebeed awake
bumbledeed will shutdown its Xserver when the last connection to it
closes. For the moment, leak the control socket so that the display
stays alive. However, we will want to attach to any Xservers created by
bumblebee as opposed to creating them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 22:07:46 +01:00
Chris Wilson c8dc27e00e intel-virtual-overlay: Disable the timer after flushing
As the flush may queue work that causes the timer to be reactivated
prior to draining the queue, we need to flush first then turn off the
timer if idle.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 21:54:42 +01:00
Chris Wilson d355825177 intel-virtual-overlay: Don't do a sibling search if bumblebee is explicitly requested
If either all or bumblee is explicitly requested, don't automatically
perform the other search.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 21:46:35 +01:00
Chris Wilson d2f7f85cd2 intel-virtual-overlay: Fix the bumblebee query parsing
It supplies both a trailing newline, NUL byte and length.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 21:42:50 +01:00
Chris Wilson 5fed6e2499 intel-virtual-output: Perform pixel type conversion from XfixesCursorImage
For whatever reason, Xfixes uses "unsigned long" in its protocol
definition for the cursor pixels.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 21:19:24 +01:00
Chris Wilson b955622cc2 intel-virtual-ouptput: Filter and rate-limit cursor events
Make sure we are not responding to cursor motion on other screens, by
checking for our root window.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 20:45:12 +01:00
Chris Wilson 5af9d69485 intel-virtual-output: Reorder the fds
We can't place the record fd at after the displays as we may wish to
clone more displays later and use the simplification that they are in a
linear, contiguous block at the end of the fd array.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 19:50:17 +01:00
Chris Wilson 88d43dc2ae intel-virtual-output: Refactor the image resizing code
And add lots of debug and robustness.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 19:50:11 +01:00
Chris Wilson 1b07f16ffe intel-virtual-overlay: Fix logic inversion from previous commit
"if (!active == 0)"

Whoops, but keep the debugging that highlighted the error.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 19:49:35 +01:00
Chris Wilson 088ff35b39 intel-virtual-output: Don't forget to name the mode
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 16:51:57 +01:00
Chris Wilson 4b3669548a intel-virtual-output: Fallback to Xinerama if RandR is not supported by the target
With Xinerama, we do not support reconfiguration of the target's CRTCs
but we can still paint!

This will require some more work to try and minimise the incompatibility
between configuring Randr displays locally and the static arrangement
remotely. But you can paint!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 16:39:17 +01:00
Chris Wilson 0ee287af22 intel-virtual-overlay: Prevent buffer overrun reading the XEvent
When calling XNextEvent() you must provide it with space for any event,
i.e. XEvent, and not be tempted to pass in the specific type you are
waiting for!

Reported-by: Philipp Adolf
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 15:44:04 +01:00
Chris Wilson dd5f17ed3a intel-virtual-output: Decouple the fake mode before deleting
When we install a fake mode on the output, we have to perform a
round-trip for a reprobe. During that time, some other client (such as
gnome-shell) will be notify of the change in output status and may
attempt to configure it. This leaves us unable to delete the mode as it
is currently active - so first disable the new head and then delete the
mode.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 15:13:44 +01:00
Chris Wilson 529db4d5ed sna: Check for output->randr_output before dereferencing
As we may call the ->detect() routines during the fallback initial
probing, we need to handle the case where the output callbacks are
called before RandR is setup.

Regresion from
commit 8ecb758697
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Sat Aug 31 19:44:50 2013 +0100

    sna: Expand the array of fake outputs if the last is used

Reported-by: Andreas Reis <andreas.reis@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=68843
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 13:06:54 +01:00
Chris Wilson 9ac895fccb sna: Process winSize region
Sometimes the window size is not a simple box, but a full region. In
which case we do need to process it and not just assert that it is a
box!

Reported-by: Jiri Slaby <jirislaby@gmai.com>
References: https://bugs.freedesktop.org/show_bug.cgi?id=47597
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 13:03:33 +01:00
Chris Wilson 962460c0e1 intel-virtual-output: Probe and automatically enable sibling screens
Look for screens on the same display that we can enable automatically.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-02 12:33:55 +01:00
Chris Wilson f5fdbf6f23 intel-virtual-output: Add missing whitespace, s/while(1)/while (1)/
No functional changes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 17:12:20 +01:00
Chris Wilson 8654bd7f66 intel-virtual-output: Restore the lost POLLIN on the timerfd
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 17:07:49 +01:00
Chris Wilson 3f03cafcb5 intel-virtual-output: Refer to the new memory block after realloc
When updating pointers to point into the new memory block after a
realloc, it helps to pass the new locations around rather than the old.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 16:51:27 +01:00
Chris Wilson 7e6472cfcc intel-virtual-output: Rebuild pointers after realloc
If reallocs gives us a new memory block, we need to update everything
that pointed into the old blocks.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 16:45:32 +01:00
Chris Wilson a41acee728 intel-virtual-output: Register as a singleton
If the user tries to use multiple commands to combine multiple displays,
reroute those to the first instance.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 16:07:03 +01:00
Chris Wilson 3f75e95f26 intel-virtual-output: Fix overun with the record Display connection
When converting to the auto-extending arrays, I forgot to include room
for the extra connection for the recording Display. By using an
explicit variable within the global state it is a little more clear.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 11:49:18 +01:00
Chris Wilson 89dc44ae45 intel-virtual-output: Prevent cloning the same output twice
And prevent cloning the localhost! The caveat is that the transport
string (Display name) must match, so it still would be possible to
connect to the same display with different transports (local sockets and
TCP sockets for socket) and so cause confusion.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 11:46:26 +01:00
Chris Wilson d1d277db9b intel-virtual-output: Manage multiple destination CRTCs
Don't try to assign all the remote outputs to the same crtc.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-09-01 11:38:49 +01:00
Chris Wilson 47b7e334c1 intel-virtual-output: Try to hide races with gnome-shell
As we try to create VirtualHeads, gnome-shell tries to enable them.
Leading to a lot of flashing and extraneous modes appearing. Without
being able to grab the screen configuration for the duration of our
pruning, there does not seem much we can do other than try and squelch
the worst of the errors.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 22:40:48 +01:00
Chris Wilson 7228bd3910 intel-virtual-output: Clone all outputs on the remote display
Now that we allocate VirtualHeads on the fly, we can query the list of
available outputs on the target display and clone them all, rather than
manually passingthe  list of outputs to clone.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 22:10:56 +01:00
Chris Wilson 028412faa7 intel-virtual-output: Third time lucky for computing the correct stride?
Aligning a 16-bpp image to a 32-byte boundary is tricky, apparently. Or
at least I make it look so.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 20:58:48 +01:00
Chris Wilson 8ecb758697 sna: Expand the array of fake outputs if the last is used
Always maintain one spare so that we can reconfigure for any number of
desired outputs on the fly.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 20:48:24 +01:00
Chris Wilson 57904e8d3d intel-virtual-output: Fix calculation of image stride to include bitmap unit
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 18:58:07 +01:00
Chris Wilson 9742ff3ae1 intel-virtual-output: use depth-16 transfers for remote hosts or low bpp targets
Avoid up-converting to a depth-24 image and wasting extra bandwidth if
either end-point is only using depth-16.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 18:44:49 +01:00
Chris Wilson 6509e46eca intel-virtual-output: use XRender for format conversion if required
Support rendering between mixed depths by using Render to stage the
transfer into our x8r8g8b8 image. An improvement would be to use the gcd
intermediate depth so we don't waste bw unecessarily.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 17:45:24 +01:00
Chris Wilson ead32f4a14 configure; Remember to disable building the tools
If we find that the headers for the tools are not available on the
system, simply disable building them as they are not essential features
of the driver.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 16:19:21 +01:00
Chris Wilson 8067255dc9 tools: Add intel-virtual-output to extend the local desktop with remote outputs
Based on the original implementation (hybrid-screenclone) by
Tomáš Janoušek, and Bumblebee integration by Kevin Puetz.

intel-virtual-output utilizes local VirtualHeads to present a contiguous
desktop to the local display manager, but maps the drawing on those
outputs to the remote display, and provides bidirectional RandR proxy so
that you can resize the remote display and configure it within your
desktop. The remote display should also send hotplug events back to the
local desktop, for reconfiguration on the fly.

Ideally the remote display is a discrete GPU on the same host so that we
can use local Shared Memory transport and avoid sending data over the
wire (though it will work in that setup). Ideally you would have userptr
support to provide zero-copy rendering between the GPUs, or have dma-buf
(in which case you would be using PRIME). For remote rendering, no
compression is done so this fares worse than VNC.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2013-08-31 15:49:01 +01:00