Nothing Special   »   [go: up one dir, main page]

Skip to content

Tags: gnif/LookingGlass

Tags

B7-rc1

Toggle B7-rc1's commit message
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.

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](https://github.com/sponsors/gnif)
* [Ko-Fi](https://ko-fi.com/lookingglass)
* [Patreon](https://www.patreon.com/gnif)
* [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESQ72XUPGKXRY)
* BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
* ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85
* XMR - 47xM4zG7b2tEj4mnSywHve4ydZzn3wzhf22snDRB7aSEcXrgUBpoT2Z4phTnyFMi1sMyQtHbdufMYRQ2PzMn3PGUJAE1dpc

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.

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.

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.

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.

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.

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.

B6

Toggle B6's commit message
B6

After many months of hard work from our team, I am pleased to announce
Beta 6 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](https://github.com/sponsors/gnif)
* [Ko-Fi](https://ko-fi.com/lookingglass)
* [Patreon](https://www.patreon.com/gnif)
* [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESQ72XUPGKXRY)
* BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
* ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85
* XMR - 47xM4zG7b2tEj4mnSywHve4ydZzn3wzhf22snDRB7aSEcXrgUBpoT2Z4phTnyFMi1sMyQtHbdufMYRQ2PzMn3PGUJAE1dpc

------------------
Major New Features
------------------

Audio Support
-------------
Up until this release getting audio from the Virtual Machine has always
been problematic. Looking Glass now supports the audio transport via the
SPICE protocol. Currently we support output via PulseAudio and PipeWire
so this should just work out of the box for most people. See the
documentation for how to configure your Virtual Machine to make use of
this feature.

For those that are not using SPICE for input or clipboard sync note that
you can use just the audio component alone if you desire.

Thanks to a new team member @spencercw the new audio support has also
been enhanced with [audio skew compensation][1] which corrects for audio
clock drift between the virtual machine and your physical audio hardware
and makes it possible to achieve extremely low latency audio.

Please note that there are still the usual limitations due to QEMUs
implementation of the virtual audio hardware (Intel ICH), such as
48,000Hz 16-bit support only. Also the SPICE audio protocol does not
support greater then two channels (stereo) output.

With these changes we no longer recommend or support the usage of
alternative solutions such as QEMU direct audio output, or the SCREAM
network audio device.

[1]: https://hci.rwth-aachen.de/publications/werner2005a.pdf

Virtual Display Support
-----------------------
Previously it was required to remove the virtual video device from the
virtual machine leaving you blind if you have a VM issue, this is no
longer the case. This update brings with it not only compatibility with
the virtual device being present, but also the ability to use it.

If you have a virtual video device present and the Looking Glass host
service has not started/crashed or you have disabled the video feed, the
client application will fall-back to the SPICE display feed and show an
indicator in the corner to show it has done this.

Please note that if the LG host application is not running or responding
you will need to capture the mouse/keyboard (ScrollLock) to control VM
via SPICE.

----------
Change Log
----------

B6
--

* Added retry logic to NvFBC on restart failure
* Improved the host warning output when the ini file is missing or
  corrupt.
* wayland: implement window size setting for xdg-shell, This should
  allow win:autoResize to work on Wayland when the compositor supports
  such an operation.
* [host] windows: log to stderr that logs will continue in file

B6-rc1
------

* Installer now supports installing IVSHMEM drivers
* Installer is now built with high DPI support
* Audio via SPICE support added for PipeWire
* Cursor scaling support added
* Audio output & input via SPICE via PulseAudio and PipeWire added
* Documentation has a new look based off of readthedocs
* Refactored PureSpice and added logging
* Enhance the KVMFR protocol to pass guest information to connected
  clients
* If spice is in use, check that it's connected to the correct guest
  using it's UUID
* Add LGMP memory corruption detection and recovery for more reliable startups
* Added new message boxes when things go wrong
* Playback and volume keys now supported in capture mode
* Fixed incorrect drawing of masked color mouse pointers on EGL
* Added the ability to specify a startup EGL filter preset
  (`egl:preset=Name`)
* Audio stretching support was added thanks to @spencercw
* Added forwarding of (Windows) guest window flashing to activation
  requests in hosts
* Add microphone privacy features: prompt to allow/deny recording and
  input indicator glyph.
* ScrollLock+Up/Down to simulate volume control keys and ScrollLock+M to
  simulate mute key in guest
* Add new host side down-sample feature to DXGI D3D11 & NvFBC to reduce
  memory bandwidth  & CPU load for DSR/VSR users.
* Updated AMD FSR to v1.0.2
* The input:escapeKey option can now accept string values such as
  `KEY_F1`, and will print a list of valid values if an invalid value is
  provided.
* [X11] Positioning the window and setting full screen via config or
  command line now works as expected
* Docs layout update with straightforward Usage section
* Implemented spice display support
* Added spice display fallback status indicator
* Unified the splash screen for the renderers into an overlay
* Added new `win:overlayDimsDesktop` option for easier A/B filter
  testing/comparisons.
* Allow microphone recording to be stopped/restarted at will
* [EGL] Fix incorrect window letter boxing causing garbage on the bottom
  edge of the screen in some scenarios
* spice cursor channel is implemented, allowing hardware cursors to be
  displayed with spice video
* fixed a wayland protocol error when toggling capture mode at the same
  time as closing the options overlay
* fix a clipboard-related wayland crash in presence of misbehaving third
  party apps
* allow default microphone state to configured at runtime
* improve error message when no display server is loaded

B6-rc1

Toggle B6-rc1's commit message
B6 Release Candidate 1 (B6-rc1)

After many months of hard work from our team, I am pleased to announce
Beta 6 Release Candidate 1 which again contains a huge amount of changes
along with some very exciting new features.

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](https://github.com/sponsors/gnif)
* [Ko-Fi](https://ko-fi.com/lookingglass)
* [Patreon](https://www.patreon.com/gnif)
* [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESQ72XUPGKXRY)
* BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
* ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85
* XMR - 47xM4zG7b2tEj4mnSywHve4ydZzn3wzhf22snDRB7aSEcXrgUBpoT2Z4phTnyFMi1sMyQtHbdufMYRQ2PzMn3PGUJAE1dpc

Up until this release getting audio from the Virtual Machine has always
been problematic. Looking Glass now supports the audio transport via the
SPICE protocol. Currently we support output via PulseAudio and PipeWire
so this should just work out of the box for most people. See the
documentation for how to configure your Virtual Machine to make use of
this feature.

For those that are not using SPICE for input or clipboard sync note that
you can use just the audio component alone if you desire.

Thanks to a new team member @spencercw the new audio support has also
been enhanced with [audio skew compensation][1] which corrects for audio
clock drift between the virtual machine and your physical audio
hardware and makes it possible to achieve extremely low latency audio.

Please note that there are still the usual limitations due to QEMUs
implementation of the virtual audio hardare (Intel ICH), such as
48,000Hz 16-bit support only. Also the SPICE audio protocol does not
support greater then two channels (stereo) output.

With these changes we no longer recommend or support the usage of
alternative solutions such as QEMU direct audio output, or the SCREAM
network audio device.

[1]: https://hci.rwth-aachen.de/publications/werner2005a.pdf

Previously it was required to remove the virtual video device from the
virtual machine leaving you blind if you have a VM issue, this is no
longer the case. This update brings with it not only compatibillity with
the virtual device being present, but also the abillity to use it.

If you have a virtual video device present and the Looking Glass host
service has not started/crashed or you have disabled the video feed, the
client application will fall-back to the SPICE display feed and show an
indicator in the corner to show it has done this.

Please note that if the LG host application is not running or responding
you will need to capture the mouse/keyboard (ScrollLock) to control VM
via SPICE.

* Installer now supports installing IVSHMEM drivers
* Installer is now built with high DPI support
* Audio via SPICE support added for PipeWire
* Cursor scaling support added
* Audio output & input via SPICE via PulseAudio and PipeWire added
* Documentation has a new look based off of readthedocs
* Refactored PureSpice and added logging
* Enhance the KVMFR protocol to pass guest information to connected
  clients
* If spice is in use, check that it's connected to the correct guest
  using it's UUID
* Add LGMP memory corruption detection and recovery for more reliable
  startups
* Added new message boxes when things go wrong
* Playback and volume keys now supported in capture mode
* Fixed incorrect drawing of masked color mouse pointers on EGL
* Added the ability to specify a startup EGL filter preset
  (`egl:preset=Name`)
* Audio stretching support was added thanks to @spencercw
* Added forwarding of (Windows) guest window flashing to activation
  requests in hosts
* Add microphone privacy features: prompt to allow/deny recording and
  input indicator glyph.
* ScrollLock+Up/Down to simulate volume control keys and ScrollLock+M to
  simulate mute key in guest
* Add new host side down-sample feature to DXGI D3D11 & NvFBC to reduce
  memory bandwidth  & CPU load for DSR/VSR users.
* Updated AMD FSR to v1.0.2
* The input:escapeKey option can now accept string values such as
  KEY_F1, and will print a list of valid values if an invalid value is
  provided.
* [X11] Positioning the window and setting full screen via config or
  command line now works as expected
* Docs layout update with straightforward Usage section
* Implemented spice display support
* Added spice display fallback status indicator
* Unified the splash screen for the renderers into an overlay
* Added new win:overlayDimsDesktop option for easier A/B filter
  testing/comparisons.
* Allow microphone recording to be stopped/restarted at will
* [EGL] Fix incorrect window letter boxing causing garbage on the bottom
  edge of the screen in some scenarios
* spice cursor channel is implemented, allowing hardware cursors to be
  displayed with spice video
* fixed a wayland protocol error when toggling capture mode at the same
  time as closing the options overlay
* fix a clipboard-related wayland crash in presence of misbehaving third
  party apps
* allow default microphone state to configured at runtime
* improve error message when no display server is loaded

B5.0.1

Toggle B5.0.1's commit message
B5.0.1

Fixes a segfault if the video stream is disabled and the cursor is moved
into the window.

B5

Toggle B5's commit message
B5

After many months of hard work from our team, I am pleased to announce
Beta 5 which brings with it a huge number of improvements.

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](https://github.com/sponsors/gnif)
* [Ko-Fi](https://ko-fi.com/lookingglass)
* [Patreon](https://www.patreon.com/gnif)
* [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESQ72XUPGKXRY)
* BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
* ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85

Annoucement and Rundown Video:
* https://www.youtube.com/watch?v=1DHp74s3Smw

Changelog:

**B5**
* Documentation improvements
* Allow EGL usage with dmabuf on platforms without GL_EXT_buffer_storage
  suport.
* Fixed cursor grab retry logic (fixes issues on i3/awesomewm)
* Don't allow in-source builds.
* Wayland curor and keyboard related crash fixes
* jitRender performance optimizations on x11
* Added EWMH event support for better window focus tracking on x11

**B5-rc1**
* removed SDL displayserver
* reduced amount of GPU buffer allocations in DMABUF import path
* implemented frame damage tracking, used to reduce amount of data
  copies needed
* added frame damage display mode in EGL backend
* added cimgui/imgui to the project
* added frame timings collection and display
* improved LGMP cursor performance by releasing the memory faster
* implemented eglSwapBuffersWithDamage for X11
* don't allow the mouse to trigger redraws if the video feed is disabled
* New "Overlay Mode" which allows interaction with imgui windows/widgets
* Allow the FPS display to be moved
* Observe XDG_CONFIG_DIR when looking for the configuration
* Added EGL texture import timing graph
* Alerts are now rendered using ImGui
* Added high DPI support
* add JIT rendering mode for wayland
* improve fractional scaling for wayland
* made numbering of IVSHMEM devices consistent
* Added guest cursor warp support to the KVMFR protocol
* Added the ability to have post-processing filters
* Added AMD FidelityFX CAS post-processor
* Added AMD FidelityFX FSR upscaling post-processor
* add DMABUF import support in OBS plugin
* add keyboard LED synchronization
* fix EGL backend not being detected on some systems (e.g. mesa without
  libglvnd)
* fix cursor blinking issue on certain hardware
  (e.g. old Intel integrated graphics)
* Guest cursor is now aligned to the local cursor on window entry using
  guest cursor warp (Fixes mouse acceleration issues)
* add ability to reorder post-processing filters
* add ability to load and save post-processing filter presets.
* add ability to capture via xdg-desktop-portal+PipeWire on Linux
* windows host installers are now distributed as 64-bit executables

B5-rc1

Toggle B5-rc1's commit message
[release] B5-rc1

After many months of hard work from our team, I am pleased to announce Beta 5 Release Candidate 1 which brings with it a huge number of improvements.

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](https://github.com/sponsors/gnif)
* [Ko-Fi](https://ko-fi.com/lookingglass)
* [Patreon](https://www.patreon.com/gnif)
* [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESQ72XUPGKXRY)
* BTC - 14ZFcYjsKPiVreHqcaekvHGL846u3ZuT13
* ETH - 0x6f8aEe454384122bF9ed28f025FBCe2Bce98db85

Changelog:

**B4-rc1**
* removed SDL displayserver
* reduced amount of GPU buffer allocations in DMABUF import path
* implemented frame damage tracking, used to reduce amount of data copies needed
* added frame damage display mode in EGL backend
* added cimgui/imgui to the project
* added frame timings collection and display
* improved LGMP cursor performance by releasing the memory faster
* implemented eglSwapBuffersWithDamage for X11
* don't allow the mouse to trigger redraws if the video feed is disabled
* New "Overlay Mode" which allows interaction with imgui windows/widgets
* Allow the FPS display to be moved
* Observe XDG_CONFIG_DIR when looking for the configuration
* Added EGL texture import timing graph
* Alerts are now rendered using ImGui
* Added high DPI support
* add JIT rendering mode for wayland
* improve fractional scaling for wayland
* made numbering of IVSHMEM devices consistent
* Added guest cursor warp support to the KVMFR protocol
* Added the ability to have post-processing filters
* Added AMD FidelityFX CAS post-processor
* Added AMD FidelityFX FSR upscaling post-processor
* add DMABUF import support in OBS plugin
* add keyboard LED synchronization
* fix EGL backend not being detected on some systems (e.g. mesa without libglvnd) (edited)
* fix cursor blinking issue on certain hardware (e.g. old Intel integrated graphics)
* Guest cursor is now aligned to the local cursor on window entry using guest cursor warp (Fixes mouse acceleration issues)
* add ability to reorder post-processing filters
* add ability to load and save post-processing filter presets.
* add ability to capture via xdg-desktop-portal+PipeWire on Linux
* windows host installers are now distributed as 64-bit executables

B4

Toggle B4's commit message
[doc] faq: Correct misinformed question about mouse warp issue

B4-rc3

Toggle B4-rc3's commit message
[host] dxgi: print out the adapter details earlier

Before we try and perhaps fail to init DXGI, we should print out what
the device is so that when there is an error report we can immediately
see if the user has the QXL device attached still.

B4-rc2

Toggle B4-rc2's commit message
[doc] faq: B4-rc2 touchups

B4-rc1

Toggle B4-rc1's commit message
[host] app: always send the cursor position to the client

If the guest VM is not showing a cursor when it starts such as on the
Windows login screen, the client never gets the current position of the
cursor, which prevents the client from attempting to send mouse
movements. This change ensures the client gets the mouse location on
startup.