[NEW] Looking Glass Beta 7 Release Candidate 1

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.
14 Likes

AMD USERS

We think we have identified why D12 is not working for some people and it appears to be REBAR related (of-course it is).

I have managed to replcalite the fault and solve it on a RX 6600 XT (and now on a 7900XT).

  1. Do not enable REBAR in the BIOS, or alternatively, resize BAR2 (resource2) via the sysfs interface to 2MB before starting your VM (edit: this may not be needed, further experimentation is needed here, exceeding 8MB seems to cause issues with the GPU initializing in general)

  2. Resize BAR0 (resource0) using the sysfs interface to the maximum size permitted by your GPU (in my case, 8GB).

  3. Ensure the following patch is applied to QEMU if you are running QEMU 8.0 or earlier, especially for Radeon 7000 series GPUs:
    https://gitlab.com/qemu-project/qemu/-/commit/b5048a4cbfa0362abc720b5198fe9a35441bf5fe

How To Adjust the BAR size:

Step 1 - Find the PCI bus ID

Find the PCI bus address of your GPU using lspci | grep VGA:

root@testbench:~# lspci | grep VGA
03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 23 [Radeon RX 6600/6600 XT/6600M] (rev c1)
0f:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Raphael (rev c2)

In my case the address is 03:00.0, From here on in, we will refer to this as {BUSID}

Step 2 - Discover your active BAR configuration

Find out the current configuration of your BARs with lspci -s {BUSID} -vv (note: run this as root or via sudo).

For example:

root@testbench:~# lspci -s 03:00.0 -vv
03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 23 [Radeon RX 6600/6600 XT/6600M] (rev c1) (prog-if 00 [VGA controller])
	Subsystem: Tul Corporation / PowerColor PowerColor Red Devil RX 6600 XT
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 91
	IOMMU group: 13
	Region 0: Memory at a00000000 (64-bit, prefetchable) [size=8G]
	Region 2: Memory at 900000000 (64-bit, prefetchable) [size=2M]
	Region 4: I/O ports at f000 [size=256]
	Region 5: Memory at fcc00000 (32-bit, non-prefetchable) [size=1M]
	Expansion ROM at fcd00000 [disabled] [size=128K]
	Capabilities: [48] Vendor Specific Information: Len=08 <?>
	Capabilities: [50] Power Management version 3
		Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
		Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [64] Express (v2) Legacy Endpoint, MSI 00
		DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
			ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
		DevCtl:	CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
			RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
			MaxPayload 256 bytes, MaxReadReq 512 bytes
		DevSta:	CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
		LnkCap:	Port #0, Speed 16GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
			ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
		LnkCtl:	ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
			ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
		LnkSta:	Speed 16GT/s, Width x16
			TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
		DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR+
			 10BitTagComp+ 10BitTagReq+ OBFF Not Supported, ExtFmt+ EETLPPrefix+, MaxEETLPPrefixes 1
			 EmergencyPowerReduction Form Factor Dev Specific, EmergencyPowerReductionInit-
			 FRS-
			 AtomicOpsCap: 32bit+ 64bit+ 128bitCAS-
		DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- 10BitTagReq+ OBFF Disabled,
			 AtomicOpsCtl: ReqEn-
		LnkCap2: Supported Link Speeds: 2.5-16GT/s, Crosslink- Retimer+ 2Retimers+ DRS-
		LnkCtl2: Target Link Speed: 16GT/s, EnterCompliance- SpeedDis-
			 Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
			 Compliance Preset/De-emphasis: -6dB de-emphasis, 0dB preshoot
		LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete+ EqualizationPhase1+
			 EqualizationPhase2+ EqualizationPhase3+ LinkEqualizationRequest-
			 Retimer- 2Retimers- CrosslinkRes: unsupported
	Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
		Address: 00000000fee00000  Data: 0000
	Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
	Capabilities: [150 v2] Advanced Error Reporting
		UESta:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UEMsk:	DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
		UESvrt:	DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
		CESta:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
		CEMsk:	RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
		AERCap:	First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
			MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
		HeaderLog: 00000000 00000000 00000000 00000000
	Capabilities: [200 v1] Physical Resizable BAR
		BAR 0: current size: 8GB, supported: 256MB 512MB 1GB 2GB 4GB 8GB
		BAR 2: current size: 2MB, supported: 2MB 4MB 8MB 16MB 32MB 64MB 128MB 256MB
	Capabilities: [240 v1] Power Budgeting <?>
	Capabilities: [270 v1] Secondary PCI Express
		LnkCtl3: LnkEquIntrruptEn- PerformEqu-
		LaneErrStat: 0
	Capabilities: [2a0 v1] Access Control Services
		ACSCap:	SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
		ACSCtl:	SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
	Capabilities: [2d0 v1] Process Address Space ID (PASID)
		PASIDCap: Exec+ Priv+, Max PASID Width: 10
		PASIDCtl: Enable- Exec- Priv-
	Capabilities: [320 v1] Latency Tolerance Reporting
		Max snoop latency: 1048576ns
		Max no snoop latency: 1048576ns
	Capabilities: [410 v1] Physical Layer 16.0 GT/s <?>
	Capabilities: [440 v1] Lane Margining at the Receiver <?>
	Kernel driver in use: vfio-pci
	Kernel modules: amdgpu

These are the specific lines you are looking for:

	Capabilities: [200 v1] Physical Resizable BAR
		BAR 0: current size: 256MB, supported: 256MB 512MB 1GB 2GB 4GB 8GB
		BAR 2: current size: 2MB, supported: 2MB 4MB 8MB 16MB 32MB 64MB 128MB 256MB

As you can see here, my BAR 0 is set to 256MB, and BAR2 is set to 2MB, while BAR 0 has a maximum supported size of 8GB.

As the VM can not resize the BAR we must do it manually before starting the VM.

Step 3 - Figure out what you need to change

For the 6600 atleast (possibly for other models too) BAR 2 MUST be 2MB, increasing this renders the GPU unable to start in the guest, if you enabled REBAR in your BIOS, the BIOS will have already assigned this to 256MB and you will need to change it back.

To make D12 work in the guest, and also improve general performance, if you do not have REBAR enabled in the bios, BAR 0 will be on the default of 256MB and will need to be increased. In my case, the desired value is 8GB based on the upper limit that is supported as reported by the lspci output in step 2.

Step 4 - Unbind the GPU from the kernel module

The linux kernel will not allow you to adjust the size unless the GPU has nothing using it, as such we must first unbind the GPU from the current kernel module, in my case (as it should be in yours too), this is vfio-pci.

To do so run the following command as root, where {BUSID} is the value determined in step 1.

echo 0000:{BUSID} > /sys/bus/pci/devices/0000:{BUSID}/driver/unbind

Step 5 - Adjust the BAR

There are two sysfs files for this for AMD GPUs, resource0_resize and resource2_resize, where 0/2 corresponds to the BAR that needs adjusting.

The value to provide to the sysfs interface is a bit value, not the actual size. Below is a table of values for this:

Value Size
1 2MB
2 4MB
3 8MB
4 16MB
5 32MB
6 64MB
7 128MB
8 256MB
9 512MB
10 1GB
11 2GB
12 4GB
13 8GB
14 16GB
15 32GB
16 64GB

To change the size as root simply run

echo {VALUE} > /sys/bus/pci/devices/0000:{BUSID}/resource{BAR}_resize`

For example, to set BAR 0 to 16GB for the device at BUS address 03:00.0.

echo 14 > /sys/bus/pci/devices/0000:03:00.0/resource0_resize`

Step 6 - Verify the changes

Simply repeat step 2 and check that the now active BAR sizes are correct. If they are, you’re ready to start the VM. You do not need to worry about re-binding vfio-pci to the GPU if you are using libvirt as it will do this for you.

In the VM, you should now see this in Adrenalin:

If you do not, the guest drivers still have not programmed the GPU to use REBAR even though you have resized it. If you are running QEMU 8.0 or earlier you need to either apply the patch provided at the start of this guide, or upgrade to 8.1 or later.

5 Likes

Silly question: How do I upgrade from B6 to B7?
Do I need to redo all the installation steps, or just rebuild the Looking Glass binary and reinstall the Windows host program?

Mostly the latter. Install a new host app, rebuild the new client, update the new module (if you use it), and build/install the new OBS module (if you use it).

This is incredibly cool. Immediately noticeable improvement from B6, which was already very good.

@gnif I don’t want to file an issue for a B7-rc1, but compiling the client with libdecor for Wayland/GNOME does not work on the new B7-rc1, while it does for perfectly fine for B6.

An update that addresses that regression has been committed to bleeding-edge. Try building bleeding-edge. This will be available in rc2 and later.

1 Like

Thank you, maybe I’ll wait for rc2. I wanted to see the improved UPS’s with the new backend though.

Any metrics on latency vs NVFBC? My concern is extremely well optimized games that run Vulkan like Doom Eternal would still hitch the DXGI capture framework vs NVFBC which runs hardware level.

NvFBC is faster to capture but because of where it puts the capture, and the fact that it doesn’t use the copy engine puts it at an extreme disadvantage.

The D12 interface is lower latency, lower guest GPU load, and consumes less CPU and memory bandwidth.

Also, NvFBC does not run at the hardware level any more then DXGI Desktop Duplication does.

2 Likes

All I’m curious about is how it runs with Doom Eternal when Doom encounters a area with high GPU load. (tons of enemies) Most DXGI implementations through OBS around the time of the game’s release suffered severe capture lag when the engine was doing a lot of work.

You can’t compare how we are doing it to OBS and other capture software. Like I said, it offloads the copy from the render engine to the GPU copy engine, it has a huge impact but you will need to test.

Our method of capture is unique, so much so that I am still working with AMD to fix issues caused by our method of usage.

@gnif I’m try Beta 7 with AMD 6900XT and Intel iGPU but unable to have d12 capture working.
I tried steps to resize the BAR:

  • Disable BAR in the BIOS
    • Above 4G encoding: Disabled
    • Above 4gb MMIO bios assignment: Enabled (if disabled this, resize resource0_resize result with no space left on device)
    • Resizable BAR: disabled
  • Set resource0_resize to 16GB
  • Set resource2_resize to 2MB
    My windows 11 VM have resizable BAR enabled, but when I connect to VM with Looking Glass result in black screen
    Log in window VM:
00:00:00.004 [I]              time.c:85   | windowsSetTimerResolution      | System timer resolution: 976.5 μs
00:00:00.004 [I]               app.c:861  | app_main                       | Looking Glass Host (B7-rc1)
00:00:00.005 [I]           cpuinfo.c:38   | cpuInfo_log                    | CPU Model: 12th Gen Intel(R) Core(TM) i7-12700K
00:00:00.006 [I]           cpuinfo.c:39   | cpuInfo_log                    | CPU: 1 sockets, 6 cores, 12 threads
00:00:00.008 [I]           ivshmem.c:132  | ivshmemInit                    | IVSHMEM 0* on bus 0x0, device 0x4, function 0x0
00:00:00.040 [I]               app.c:879  | app_main                       | IVSHMEM Size     : 256 MiB
00:00:00.040 [I]               app.c:880  | app_main                       | IVSHMEM Address  : 0x23FAFAB0000
00:00:00.041 [I]               app.c:881  | app_main                       | Max Pointer Size : 1024 KiB
00:00:00.041 [I]               app.c:882  | app_main                       | KVMFR Version    : 20
00:00:00.041 [I]               app.c:901  | app_main                       | Trying           : D12
00:00:00.041 [I]               d12.c:185  | d12_create                     | debug:0 trackDamage:1
00:00:00.048 [I]               d12.c:905  | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:00:00.049 [I]               d12.c:906  | d12_enumerateDevices           | Device Description: AMD Radeon RX 6900 XT
00:00:00.049 [I]               d12.c:907  | d12_enumerateDevices           | Device Vendor ID  : 0x1002
00:00:00.049 [I]               d12.c:908  | d12_enumerateDevices           | Device Device ID  : 0x73bf
00:00:00.050 [I]               d12.c:909  | d12_enumerateDevices           | Device Video Mem  : 16337 MiB
00:00:00.050 [I]               d12.c:911  | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:00:00.050 [I]               d12.c:913  | d12_enumerateDevices           | Shared Sys Mem    : 16005 MiB
00:00:00.657 [I]               d12.c:367  | d12_init                       | D12 Created Effect: Downsample
00:00:00.659 [I]               d12.c:367  | d12_init                       | D12 Created Effect: HDR16to10
00:00:00.659 [I]               app.c:445  | captureStart                   | ==== [ Capture Start ] ====
00:00:00.660 [I]               app.c:932  | app_main                       | Using            : D12
00:00:00.660 [I]               app.c:933  | app_main                       | Capture Method   : Synchronous
00:00:00.661 [I]               app.c:768  | lgmpSetup                      | Max Frame Size   : 126 MiB
00:00:00.661 [I]               app.c:455  | captureStop                    | ==== [ Capture Stop ] ====
00:00:00.723 [I]               d12.c:905  | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:00:00.724 [I]               d12.c:906  | d12_enumerateDevices           | Device Description: AMD Radeon RX 6900 XT
00:00:00.724 [I]               d12.c:907  | d12_enumerateDevices           | Device Vendor ID  : 0x1002
00:00:00.724 [I]               d12.c:908  | d12_enumerateDevices           | Device Device ID  : 0x73bf
00:00:00.724 [I]               d12.c:909  | d12_enumerateDevices           | Device Video Mem  : 16337 MiB
00:00:00.725 [I]               d12.c:911  | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:00:00.725 [I]               d12.c:913  | d12_enumerateDevices           | Shared Sys Mem    : 16005 MiB
00:00:00.789 [I]               d12.c:367  | d12_init                       | D12 Created Effect: Downsample
00:00:00.791 [I]               d12.c:367  | d12_init                       | D12 Created Effect: HDR16to10
00:00:00.791 [I]               app.c:445  | captureStart                   | ==== [ Capture Start ] ====
   115421237 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   173490090 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
00:01:07.704 [I]               app.c:455  | captureStop                    | ==== [ Capture Stop ] ====
00:01:07.821 [I]               d12.c:905  | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:01:07.821 [I]               d12.c:906  | d12_enumerateDevices           | Device Description: AMD Radeon RX 6900 XT
00:01:07.822 [I]               d12.c:907  | d12_enumerateDevices           | Device Vendor ID  : 0x1002
00:01:07.822 [I]               d12.c:908  | d12_enumerateDevices           | Device Device ID  : 0x73bf
00:01:07.823 [I]               d12.c:909  | d12_enumerateDevices           | Device Video Mem  : 16337 MiB
00:01:07.823 [I]               d12.c:911  | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:01:07.824 [I]               d12.c:913  | d12_enumerateDevices           | Shared Sys Mem    : 16005 MiB
00:01:07.902 [I]               d12.c:367  | d12_init                       | D12 Created Effect: Downsample
00:01:07.904 [I]               d12.c:367  | d12_init                       | D12 Created Effect: HDR16to10
00:01:07.904 [I]               app.c:445  | captureStart                   | ==== [ Capture Start ] ====
   203516133 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   263582056 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   323626770 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   341106520 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   341639503 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   342165219 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   342700485 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   343231823 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   343823322 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
00:03:49.536 [I]               app.c:455  | captureStop                    | ==== [ Capture Stop ] ====
00:03:52.062 [I]               d12.c:905  | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:03:52.064 [I]               d12.c:906  | d12_enumerateDevices           | Device Description: AMD Radeon RX 6900 XT
00:03:52.066 [I]               d12.c:907  | d12_enumerateDevices           | Device Vendor ID  : 0x1002
00:03:52.068 [I]               d12.c:908  | d12_enumerateDevices           | Device Device ID  : 0x73bf
00:03:52.070 [I]               d12.c:909  | d12_enumerateDevices           | Device Video Mem  : 16337 MiB
00:03:52.071 [I]               d12.c:911  | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:03:52.072 [I]               d12.c:913  | d12_enumerateDevices           | Shared Sys Mem    : 16005 MiB
00:03:52.164 [I]               d12.c:367  | d12_init                       | D12 Created Effect: Downsample
00:03:52.166 [I]               d12.c:367  | d12_init                       | D12 Created Effect: HDR16to10
00:03:52.166 [I]               app.c:445  | captureStart                   | ==== [ Capture Start ] ====
   346945306 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   353426268 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   353974166 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
   356093819 [E]                d12.c:966  | d12_frameBufferToResource      | Failed to create the FrameBuffer ID3D12Resource: 0x887a0005 (The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.)
00:04:06.337 [I]               app.c:455  | captureStop                    | ==== [ Capture Stop ] ====
00:38:56.685 [I]               d12.c:905  | d12_enumerateDevices           | Device Name       : \\.\DISPLAY1
00:38:56.686 [I]               d12.c:906  | d12_enumerateDevices           | Device Description: AMD Radeon RX 6900 XT
00:38:56.686 [I]               d12.c:907  | d12_enumerateDevices           | Device Vendor ID  : 0x1002
00:38:56.686 [I]               d12.c:908  | d12_enumerateDevices           | Device Device ID  : 0x73bf
00:38:56.687 [I]               d12.c:909  | d12_enumerateDevices           | Device Video Mem  : 16337 MiB
00:38:56.687 [I]               d12.c:911  | d12_enumerateDevices           | Device Sys Mem    : 0 MiB
00:38:56.687 [I]               d12.c:913  | d12_enumerateDevices           | Shared Sys Mem    : 16005 MiB
...

Log from looking-glass-client:

./looking-glass-client -f /dev/kvmfr0 -a
00:00:00.000 [I]              main.c:1859 | main                           | Looking Glass (B7-rc1-21-gecd3692e1e)
00:00:00.000 [I]              main.c:1860 | main                           | Locking Method: Atomic
00:00:00.000 [I]           cpuinfo.c:38   | cpuInfo_log                    | CPU Model: 12th Gen Intel(R) Core(TM) i7-12700K
00:00:00.000 [I]           cpuinfo.c:39   | cpuInfo_log                    | CPU: 1 sockets, 12 cores, 20 threads
00:00:00.006 [I]              main.c:1185 | lg_run                         | Using font: /usr/share/fonts/gnu-free/FreeMono.otf
00:00:00.006 [I]           ivshmem.c:128  | ivshmemOpenDev                 | KVMFR Device     : /dev/kvmfr0
00:00:00.010 [I]             audio.c:159  | audio_init                     | Using AudioDev: PipeWire
00:00:00.010 [I]                ps.c:245  | purespice_connect              | Connecting to socket 127.0.0.1:5900
00:00:00.016 [I]               rsa.c:178  | rsa_encryptPassword            | Using Nettle
00:00:00.017 [I]                ps.c:268  | purespice_connect              | Connected
00:00:00.017 [I]             agent.c:103  | agent_connect                  | Connected to the spice guest agent
00:00:00.017 [I]      channel_main.c:167  | onMessage_mainName             | Guest name: win11_base_1
00:00:00.017 [I]      channel_main.c:183  | onMessage_mainUUID             | Guest UUID: 51827f02-12c1-4ffe-8565-491dce645ba6
00:00:00.023 [I]                ps.c:644  | ps_connectChannel              | RECORD channel connected
00:00:00.029 [I]                ps.c:644  | ps_connectChannel              | PLAYBACK channel connected
00:00:00.036 [I]                ps.c:644  | ps_connectChannel              | INPUTS channel connected
00:00:00.036 [I]           channel.c:323  | onMessage_notify               | [notify] keyboard channel is insecure
00:00:00.036 [I]               egl.c:289  | egl_initialize                 | Double buffering is off
00:00:00.036 [I]              main.c:1139 | tryRenderer                    | Using Renderer: EGL
00:00:00.036 [I]           wayland.c:120  | waylandInit                    | Compositor: Hyprland
00:00:00.036 [I]           wayland.c:130  | waylandInit                    | Selected  : xdg
00:00:00.041 [I]                gl.c:58   | waylandGetEGLDisplay           | Using eglGetPlatformDisplay
00:00:00.055 [I]               egl.c:856  | egl_renderStartup              | Single buffer mode
00:00:00.056 [I]               egl.c:883  | egl_renderStartup              | EGL     : 1.5
00:00:00.056 [I]               egl.c:884  | egl_renderStartup              | Vendor  : Intel
00:00:00.056 [I]               egl.c:885  | egl_renderStartup              | Renderer: Mesa Intel(R) UHD Graphics 770 (ADL-S GT1)
00:00:00.056 [I]               egl.c:886  | egl_renderStartup              | Version : OpenGL ES 3.2 Mesa 24.0.5-arch1.1
00:00:00.056 [I]               egl.c:887  | egl_renderStartup              | EGL APIs: OpenGL OpenGL_ES 
00:00:00.056 [I]               egl.c:958  | egl_renderStartup              | Debug messages disabled, enable with egl:debug=true
00:00:00.074 [I]           eglutil.c:35   | swapWithDamageInit             | Using EGL_KHR_swap_buffers_with_damage
00:00:00.077 [I]              main.c:1491 | lg_run                         | ================================================================================
00:00:00.077 [I]              main.c:1492 | lg_run                         | The host application seems to not be running
00:00:00.077 [I]              main.c:1493 | lg_run                         | Waiting for the host application to start...
00:00:00.084 [I]              main.c:1590 | lg_run                         | Guest Information:
00:00:00.084 [I]              main.c:1591 | lg_run                         | Version  : B7-rc1
00:00:00.084 [I]              main.c:1612 | lg_run                         | UUID     : 51827f02-12c1-4ffe-8565-491dce645ba6
00:00:00.084 [I]              main.c:1621 | lg_run                         | CPU Model: 12th Gen Intel(R) Core(TM) i7-12700K
00:00:00.084 [I]              main.c:1622 | lg_run                         | CPU      : 1 sockets, 6 cores, 12 threads
00:00:00.084 [I]              main.c:1624 | lg_run                         | Using    : D12
00:00:00.084 [I]              main.c:1710 | lg_run                         | OS       : Windows
00:00:00.084 [I]              main.c:1712 | lg_run                         | OS Name  : Windows 10 Pro (Build: 22631) 
00:00:00.084 [I]              main.c:1734 | lg_run                         | Starting session
00:00:00.085 [I]              main.c:553  | main_frameThread               | Using DMA buffer support
00:00:08.581 [I]              main.c:710  | main_frameThread               | Format: FRAME_TYPE_BGRA 2560x1440 (2560x1440) stride:2560 pitch:10240 rotation:0 hdr:0 pq:0

Windows 7 support when?

Unfortunately, DXGI in Windows 7 is woefully underequipped and not supported for LG’s higher performance and lower latency capture options.

Your best bet is to enable NVFBC and cross your fingers your versions of supporting frameworks meet the requirements for the LG executable.

1 Like

never, Windows7 does not have a performant capture interface that is suitable.

is there an AMD equivalent to nvfbc? or even one for virtio-gpu?

DirectDMA is only on the enterprise level cards and is not easy to implement. Even worse is that Windows 7 support for that might be next to none.

1 Like