[Spice-devel] Spice Protocol Missing Headers
geoff at hostfission.com
geoff at hostfission.com
Sat Oct 14 07:34:42 UTC 2017
On 2017-10-13 20:05, Frediano Ziglio wrote:
>>
>> > I tried a few years back (spice-protocol 0.12.10) to move these code
>> > generation scripts to spice-protocol, but this did not work out
>> > nicely so this was reverted.
>>
>> I found this too, I opted to use the spice.proto file to write my own
>> header
>> with the basics that were required.
>>
>> >
>> > I agree that having the initial link messages in spice/protocol.h, but
>> > not the rest of the protocol in spice-protocol is unexpected. For now,
>> > I
>> > would suggest that you copy this messages.h file as you suggested, even
>> > if that's suboptimal. I don't expect that file to change that often.
>> >
>> > Can you give more details about the project you are working on?
>>
>> Sure :). I spend most of my time in a Linux environment for work but
>> enjoy the odd game, so I figured I would give a Windows VM a go with
>> VGA
>> passthrough. It works a treat but the issue is getting a video feed
>> back
>> to the host, the solutions that are available IMO are substandard
>> (ShadowPlay or Steam InHouse Streaming) as I want to have full control
>> over the host as well, not just in games.
>>
>> These services compress to h264 and stream it over the network, where
>> it
>> is decoded for display. Since this is all on the local host, I figured
>> all those overheads could be bypassed by writing a windows driver that
>> allows the host to share some memory mapped ram with the guest. Then
>> on
>> the guest I wrote an application that uses NvFBC to capture raw frames
>> of the desktop and copy them into the shared memory segment.
>>
>> This is why I needed a custom client, I am not using spice for the
>> video
>> feed, it's just there for mouse and keyboard input. The end result is
>> outstanding, the latency is near zero and the video quality is
>> lossless.
>
> Maybe a silly question but if it's all local, don't you have a
> physical monitor connected? NcFBC means you passed an Nvidia card to
> the VM. Or basically you have 2 cards, one Nvidia and one Intel but
> you want the output on the Intel one as, for instance, you don't have
> a monitor attached to the Nvidia (this can happens on some laptops) ?
I do have a physical monitor connected, but the point is that I don't
want to have it connected. This would also open doors for those with
integrated graphic cards that have no outputs such as those you mention
on laptops.
>
> In theory you could use a QXL device for memory sharing, copying the
> output to its memory and send draw commands to get the output.
> Unfortunately NvFBC system memory API handle the system buffer so
> this means that you'll probably have 3 copy:
> - Nvidia GPU -> system (NvFBC)
> - system -> shared
> - shared -> host GPU
> But probably is not a problem for you (you possibly can avoid a
> copy using CUDA or GL NvFBC interface).
I am already doing three copies, but I believe I can remove one if I can
get qemu to directly map a texture buffer into the Guest VM. This way it
would be
nVidia GPU -> System (NvFBC) -> Host GPU texture.
I was unaware that it would be possible to map memory through QXL, I
went the easiest route to test this proof of concept before heavily
investing time into a more robust solution. I am new to working with
qemu and windows drivers in general, so it has been a slow start, any
suggestions/pointers would be very welcome.
-Geoff
More information about the Spice-devel
mailing list