Looking GlassWhat is looking glass? It is a program that uses DXGI (or NvFBC if you're on Quadros or better on Nvidia) to directly capture what is displayed on a video card in a windows virtual machine and then display that on a QEMU/KVM Linux Host in near real-time.
Aren't there programs like Remote Desktop, VNC, etc that do this?Those programs provide remote access, yes, but in this case we are copying uncompressed the actual RGBA frames from the render pipeline on the virtual machine for display on the host. It seems similar, but is entirely different. For one we have extremely low latency (probably even less as time goes on since most of our latency seems to be down to the render pipeline in vendors' drivers rather than our own code...).
If you are using IOMMU graphics in a virtual machine, and want to use productivity apps on that windows virtual machine at full speed/native performance, you should give this project a look.
Known IssuesThis program is *alpha* quality. It's got bugs. Lots of bugs. It might be more bugs than substrate at this point (not really, but you know). Please read this thread very carefully before posting for help. Many known issues are posted on Geoff's site as well.
Note: QEMU currently has a bug in relative-movement mouse pointers that is being worked on. For now, we still recommend using a separate input device (or toggling USB input passthrough between) because of these bugs in QEMU. They’re aware of them, will be fixed soon.
Note2: For now, you probably still need something plugged into the passed-through GPU. This seems to depend, a bit, on the GPU but you can use a secondary input on your monitor (often) but not have to actually switch inputs to that display. We have also tested “dummy” EDID DisplayPort plugs as seen in the video, and those work fine, but it is hard to find dummy plugs that have a wide variety of supported display modes. We’ll probably link to some known good ones soon.
OMG You Guys Rock!This is the help thread. Please kindly direct any flames or praise to this thread here. Please, and thank you!
Documentation/Getting StartedBe sure to start with the documentation on Geoff's site: https://looking-glass.io/quickstart
If you have questions, post them here, or alternatively join the Looking Glass Discord server, or the #LookingGlass channel on the
FreeNode Libera.Chat IRC network
Enough pillow talk, let's do this thing!
The repo is located here:
Please understand, there are several components:
- A windows driver, for the shared memory driver. This has been signed by RedHat – Kudos and thanks guys.
- A windows program, for capturing the frame buffer and copying it into the shared memory driver.
- A Linux program for reading and displaying the shared frame buffer (and acting as a spice client, basically).
Compiling the windows program does require visual studio from Microsoft, but fortunately the community edition (free) of Visual Studio works fine for this purpose. Once the program matures a bit, we are sure that packagers will provide signed binary downloads for Windows.
The compilation process on Linux is not super complicated.
We have experimented with many different techniques for minimizing latency and optimizing throughput. We are sure that advanced developers will want to tweak the source code for their particular setup to optimize latency, frame speed, etc. It isn’t perfect yet, but it can be extremely good.
I have done a lot of testing with a Windows guest at 95hz and 60hz and the host machine at 60, 95 and 144hz.
I can report that it is possible to tweak the source, read the rendered frame from the Windows Guest and then display that frame on the host, via FreeSync, than it takes for vblank to roll around (up to 16ms @ 60hz). Technically this means I am using FreeSync on a GTX 1080ti But the reality of this is that only the closed binary drivers from AMD are providing working FreeSync, so we don’t recommend this route yet. Kernel 4.15 has great AMD graphics support, but we are having trouble achieving over 30fps with Vega, for whatever reason, the second frame in the GL buffer just never displays on Vega. We are looking into it and thanks to the generous support from both companies and the community, we will have everything we need to work through those issues.
Again, massive thanks to everyone in the Level1 community, and especially
Gigabyte/Aorus, and PLE Computers Australia – without their support, this project would not have been possible.
Level1, changing the world one community project at a time?