B7 Release Candidate 1 (B7-rc1)
After many months of hard work from our team, I am pleased to announce Beta 7 Release Candidate 1 which again contains a huge amount of changes along with some very exciting new features.
Donations
If you like this project and find it useful and would like to help out you can support this project directly by using the following platforms.
- GitHub
- Ko-Fi
- Patreon
- Paypal
- BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
- ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85
- XMR - 47xM4zG7b2tEj4mnSywHve4ydZzn3wzhf22snDRB7aSEcXrgUBpoT2Z4phTnyFMi1sMyQtHbdufMYRQ2PzMn3PGUJAE1dpc
Links
Downloads (Sources and Pre-Compiled Windows Binary):
https://looking-glass.io/downloads
Documentation
https://looking-glass.io/docs/B7-rc1/
New Features of Note
DirectX12
As many of you might be aware, LG has had a D3D12 back end in the DXGI capture interface for a while now. Unfortunately this back end has always been bugged with some synchronisation issues that have caused all sorts of issues which is why we never encouraged it’s use and disabled it by default.
With a few recent discoveries and misuses (abuses?) of the DirectX12 API, we have found a way to create a ID3D12Resource (DX12’s version of a texture) that is directly backed by memory we provide. As such we can create this texture directly inside the IVSHMEM shared memory, and then use the GPUs hardware copy engine to stream the textures directly from GPU directly into the shared memory segment.
We have been looking for a way do to this since the creation of this project, not only does it remove an additional memory copy, it offloads the copy we still need to perform from the GPU’s render and compute engine.
Note: D12 still is using Microsoft’s DXGI layer, but in a very different way, so it’s still technically DXGI. It was just unfortunate that we
named the capture interface DXGI
in Looking Glass in the first instance, confusing things.
Known Issues
It seems that some earlier AMD GPUs such as the RX570 and RX580 do not work with this new capture engine. If you have one of these GPUs if LG fails to initialize D12
it will fall back to the older capture engine, dxgi
. This appears to be a driver bug in Windows and has been reported to the AMD Radeon Technology Group.
EDIT: We may have solved this, read the next post if you are having issues.
What does all this mean for you?
Lower latency, higher frame rates, lower memory bandwidth pressure, better performance in the guest, and enormously lower CPU usage. The difference this has made can not be overstated, this new capture backed is now faster and lighter then even the proprietary NvFBC interface from NVIDIA.
Combine this with the KVMFR module (provided you set it up) on the host system allowing the GPU to perform DMA transfers from shared memory, the CPU is no longer involved at all in shuffling any frame data directly anymore.
For laptop/iGPU users especially this has made a night and day difference. We have users reporting 300+UPS using the D12 capture interface, while also reporting an increased rendering performance in the guest VM.
What will happen to the old D3D12 copy backend?
We have removed the buggy and broken DirectX12 support from the older DXGI capture interface, and the new D12 capture interface is now the default unless you have overridden it in your looking-glass-host.ini
file.
If you had dxgi
configured to use the d3d12
copy backend in the host application’s configuration file, it will now be ignored.
What will happen to the old DXGI capture interface?
It’s not going anywhere, we know many people are using this on older versions of windows, and as the new D12 capture interface requires DirectX 12, obviously Windows 10 or later is required.
What about the Indirect Display Driver (IDD)
This was put on hold while the above was developed, debugged and tested to avoid needlessly duplicating testing and debugging effort. Once B7 has released focus will move almost entirely onto fininshing the Looking Glass IDD host.
Change Log
B7-rc1
- Added the ability to specify the default playback and record devices for PipeWire
- [EGL] fixed a rounding issue in the shaders on hardware that actually uses half precision floats (nvidia)
- [X11] fixed issue with window managers (i3) that prevented focus following the mouse from working correctly
- Detect and warn on improper guest CPU configuration
- Update LGMP to support building under MSVC for the incoming Idd support
- Fixed RGB10 support to handle both HDR and non-HDR content by means of HDR to SDR mapping (this does not mean HDR support in linux yet!)
- added new input:captureOnFocus feature to automatically enter capture mode when the window has been focused by the user.
- If the client is running on i3, make use of the IPC to allow LG to run global full screen (spans all monitors) if the new option
i3:globalFullScreen
is enabled. - added new win:requestActivation option to opt-out of activation requests from the guest
- [X11] changed the cursor dot to a more visible cursor and added an optional larger cursor for the vision impared which may be enabled with the new option
spice:largeCursorDot
- [EGL] Added configuration parameters to disable and adjust the HDR to SDR mapping
- [D12] Implemented new DirectX12 capture engine using DXGI Desktop Duplication
- [DXGI & D12] Convert RGB16 to RGB10 when in HDR for a 50% memory transfer bandwidth saving (note that this has overheads and may not benefit everyone)
- [DXGI] Removed buggy/broken D3D12 copyBackend
- [doc] updated and restructured the documentation addressing various issues people have had with the installation and configuraiton of Looking Glass.