Commit Graph

14 Commits

Author SHA1 Message Date
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