Geoffrey McRae
875242fe15
[host] app: improve throttleFPS logic
2022-11-07 22:56:20 +11:00
Geoffrey McRae
697bbcd6d4
[host] app: correct timer restart on lgmp corruption recovery
2022-11-07 13:36:57 +11:00
Geoffrey McRae
ecca5720a9
[host] app: ensure that rand
will be random
2022-11-07 13:26:52 +11:00
Geoffrey McRae
8e706636d3
[host] app: don't stop the lgmpTimer on session recovery
2022-11-07 12:20:25 +11:00
Geoffrey McRae
97c5b8c3a7
[host] fix building under void linux
...
Closes #1012
2022-07-13 07:02:17 +10:00
Quantum
a8521b821e
[all] cmake: standardize indentation to 2 spaces
2022-05-29 11:16:16 +10:00
Geoffrey McRae
a41ab81a90
[host] nvfbc: try all NVIDIA adapters in the system
...
This will allow LG to start if the VM still has a virtual device as
the primary output.
2022-05-18 16:27:17 +10:00
Geoffrey McRae
0f8c0b5fb3
[host] dxgi: fix incorrect skip logic
2022-05-18 15:59:31 +10:00
Geoffrey McRae
57e20007db
[host] dxgi: don't try to use devices without d3d support
...
This change should allow LG to work even if a virtual device is still
attached to the VM even though it might be capturing the wrong display.
2022-05-18 15:38:42 +10:00
Geoffrey McRae
6b9fa2b628
[host] capture: fix compilation with NvFBC C++ sources
...
The prior commit to expose the FrameBuffer internals makes use of an
atomic from `stdatomic.h`. Unfortunatly C++ has no notion of _Atomic and
as such `stdatomic.h` is not compatible. To work around this we instead
just forward declare the type here.
2022-05-16 22:09:11 +10:00
matthewjmc
53c843d9dd
[common] Update framebuffer metadata + references
2022-05-16 20:01:09 +10:00
Geoffrey McRae
87077dfe6e
[host] nvfbc: add downscale support
2022-05-04 13:38:49 +10:00
Geoffrey McRae
7ed18e24e2
[host] linux/pw: add missing include for min
define
2022-05-04 12:28:20 +10:00
Geoffrey McRae
60834a5719
[host] xcb/pipewire/nfbc: use min
and correct inverted logic
2022-05-04 12:23:20 +10:00
Geoffrey McRae
d5e2689d64
[host] nvfbc: fix inverted truncated frame logic
2022-05-04 11:58:04 +10:00
Geoffrey McRae
81f91caf0e
[host] pw: fix build due to frame info structure changes
2022-05-04 10:59:44 +10:00
Geoffrey McRae
3d727a2254
[host] xcb: fix build due to frame info structure changes
2022-05-04 10:58:19 +10:00
Geoffrey McRae
e4a4e2331a
[host] nvfbc: fix build due to frame info structure changes
2022-05-04 10:37:52 +10:00
Geoffrey McRae
8682ec207e
[host] dxgi: check for invalid usage of d3d12 & downsampling
2022-05-04 10:23:42 +10:00
Geoffrey McRae
c8a5293645
[host] dxgi: refactor dxgi_copyFrame
2022-05-04 09:27:52 +10:00
Geoffrey McRae
15334c89d6
[host] dxgi: match the last entry in the downsample rule list
2022-05-03 17:58:41 +10:00
Geoffrey McRae
2eec459b47
[host] dxgi: finish downsample support for d3d11 backend
2022-05-03 12:15:24 +10:00
Geoffrey McRae
947325e00d
[host] dxgi: fix failure to copy to texture with sub resources
...
`CopyResource` will silently fail when trying to copy from a texture
with no subresources to one with. Instead we must use `ResolveSubresource`
2022-05-02 15:53:20 +10:00
Geoffrey McRae
3134ec84de
[host] dxgi: add support for downsampling the capture before sending
...
This is an experimental & incomplete feature for those using
supersampling. Anything > 1200p will be downsampled by 50% before
copying out of the GPU to save on memory bandwidth.
Unfinished! Has issues with damage tracking and currently can not
be configured. Only dx11 has been tested at this point, everything
else will likely have problems/crash.
2022-05-01 19:45:44 +10:00
vmfortress
6c76d6ada5
[host] xcb: fixed early start of pointer thread by adding xcb_start
2022-03-08 06:12:17 +11:00
vmfortress
36f97f08ad
[host] dxgi: add nanosecond-scale sleep capability to d3d12
...
The nsleep() call lets d3d12 sleep for a more precise amount of
time while maintaining the current millisecond-scale sleep
interface in the configuration file.
2022-03-06 17:21:14 +11:00
Tudor Brindus
eeefc15e46
[host] build with -Wstrict-prototypes
2022-02-25 20:38:44 +11:00
Quantum
fc96b6691e
[host] linux: remove useless libX11 dependency
2022-02-14 15:08:29 +11:00
Quantum
5a94f82f10
[host] linux: remove useless GL dependency
2022-02-14 15:08:29 +11:00
Quantum
f01489720f
[host] linux: build with PipeWire by default
...
Since the client already depends on PipeWire by default, there is no
reason why the host shouldn't.
2022-02-12 22:13:31 +11:00
Geoffrey McRae
8b4551c39c
[all] convert KVMFR frame bools to flags in a bitfield
...
This will allow us to add additional flags in the future while remaining
backwards compatible with the host.
2022-02-10 20:32:38 +11:00
Tudor Brindus
9ddfa585ec
[host] cleanup some missing (void) parameters
2022-02-08 16:37:17 +11:00
Tudor Brindus
809e1095bd
[host] windows: plumb guest activation request to host
2022-02-08 15:27:27 +11:00
Tudor Brindus
fd28d0604e
[host/client] kvmfr: request activation based on guest state
2022-02-08 15:27:27 +11:00
Quantum
d93510e9f2
[host] linux: allow getting system version
...
Result is something like:
Debian GNU/Linux 11 (bullseye), kernel: Linux 5.14.0-0.bpo.2-amd64 on x86_64
2022-01-27 05:47:53 +11:00
Quantum
75ec3c0478
[host] nvfbc: shorten nvfbc_getName() result
...
To avoid client showing "Using : NVFBC (NVidia Frame Buffer Capt".
This happens because the string is truncated to 31 characters to fit
in the char capture[32]; member of KVMFRRecord_VMInfo.
2022-01-26 23:06:47 +11:00
Quantum
e85fd68d82
[host] windows: read ProductName from registry if possible
...
For Windows 10, it so happens that the major.minor is 10.0. This is not
usually a given, e.g. on Windows 7 where it would read 6.1, on
Windows 8 it would read 6.2, and on Windows 8.1 it would read 6.3.
This is obviously undesirable, so we should just read the ProductName
from registry if possible. This results in something like:
OS Name: Windows 10 Pro for Workstations (Build: 19043)
2022-01-26 23:06:14 +11:00
Quantum
f247d7f0da
[host] app: don't read from UUID if none is returned
...
This allows the Linux host to start.
2022-01-26 23:05:31 +11:00
Geoffrey McRae
db3d20f935
[host] windows: report windows version information
2022-01-26 19:58:46 +11:00
Geoffrey McRae
ccdf7b7c0e
[host] app: report the full capture name to the client
2022-01-26 19:32:55 +11:00
Geoffrey McRae
99536eaf9d
dxgi: check for memory leaks in d3d12
2022-01-19 09:58:14 +11:00
Geoffrey McRae
f8b4874799
dxgi: cosmetics
2022-01-19 09:58:14 +11:00
Geoffrey McRae
cff64ee7d3
dxgi: cache shared handles instead of re-creating them
...
This will cache up to 10 handles, in practice I have never seen DXGI
return anything but the same resource each time but we allow for more
anyway should MS change something in the future.
Should the cache get over filled it is disabled entirely and we revert
to the original behaviour.
2022-01-19 09:58:07 +11:00
Quantum
afd5e2d057
[host] dxgi: remove duplicate AcquireLock print
2022-01-17 15:12:54 +11:00
Quantum
508c491967
[host] dxgi: allow the debug layer to be turned on via config
2022-01-17 15:12:54 +11:00
Quantum
b117bbafe5
[host] dxgi: add ability to capture OutputDebugMessage
...
This is how Direct3D 12's debug layer outputs messages. Normally, these
are read by the debugger, but we want them logged instead.
2022-01-17 15:12:54 +11:00
Quantum
4c271f8744
[host] dxgi: move d3d12.h to vendor/directx
2022-01-17 15:12:54 +11:00
Chris Spencer
3d0a8f6987
[host] dxgi: fix frame damage method parameters
...
The buffer input sizes to the `IDXGIOutputDuplication` methods are measured
in bytes. This dramatically increases the number of dirty/move rects that
can be handled.
2022-01-13 09:34:14 +11:00
Chris Spencer
f145225dbc
[host] dxgi: fix d3d11 assertion failure
...
`DEBUG_ASSERT(!this)` in `d3d11_create` is firing on the second
instantiation because we are not clearing `this` in `d3d11_free`.
2022-01-13 08:17:59 +11:00
vmfortress
7da2becfbd
[host] dxgi: Replace standard asserts with DEBUG_ASSERT
2022-01-11 11:11:42 +11:00
Quantum
042a7d0925
[host] dxgi: add configurable sleep before D3D12 copy
2022-01-10 14:45:51 +11:00
Quantum
c69b19e68f
[host] dxgi: add option to disable damage-aware copies
2022-01-10 14:45:51 +11:00
Quantum
cf7d501bc4
[host] dxgi: allow copy backend selection
2022-01-10 14:45:51 +11:00
Quantum
68e5b812a9
[host] dxgi: add preRelease callback
...
This is meant to avoid freeing the texture before the copy has finished.
2022-01-10 14:45:51 +11:00
Quantum
5a93f1e00c
[host] dxgi: implement Direct3D 12 texture copy backend
2022-01-10 14:45:51 +11:00
Quantum
891f00a011
[host] dxgi: add d3d12.h from latest MinGW
...
This header was added in late 2020 and hasn't made its way into the GitHub
Actions image yet.
2022-01-10 14:45:51 +11:00
Quantum
137171a8a2
[host] dxgi: refactor to support additional copy backends
2022-01-10 14:45:51 +11:00
Geoffrey McRae
fd12d9901a
[host] app: dont use pointers when realloc may have changed them
...
This code was completely broken and corrupts the stack, replace it with
something that is actually safe.
2022-01-09 21:19:17 +11:00
Geoffrey McRae
c05282c38c
[host] cmake: add ubsan and asan to CMake (needs clang64 on windows)
...
Note that this still is a pain to make work as you require the MS
runtime DLLs, and to build with clang64.
2022-01-09 21:18:32 +11:00
Quantum
a391e271c3
[host] dxgi: damage all textures when skipping frame
2022-01-09 16:36:26 +11:00
Quantum
bf059a6eda
[host] app: send CPU socket count information
2022-01-07 21:03:20 +11:00
Quantum
194241c5a3
[common] cpuinfo: add sockets to interface
2022-01-07 21:03:20 +11:00
Johnathon Weaver
0f998582b9
[host] nvfbc: Fix dwmapi linking error
...
Fixed linking for DwmFlush and also rearranged as per how DXGI is.
2022-01-07 01:46:35 +11:00
Geoffrey McRae
34e5f7e968
[host] windows: fix usage of MCSS and try to get priority "Capture"
2022-01-06 20:14:55 +11:00
Geoffrey McRae
2f8b139131
[host] windows: set DwmFlush default to off
...
This new feature while helps on some systems, others using freesync or
higher refresh rates where the capture can't keep up will limit to
fractions of the refresh rate. Better to disable and allow users to
opt-in.
2022-01-06 19:20:08 +11:00
Geoffrey McRae
b058cbe9fe
[host] nvfbc: add DwmFlush here too as it makes a large difference
2022-01-06 19:01:29 +11:00
Geoffrey McRae
443f98d2fa
[host] windows: opt into the Multimedia Class Schedule Service
...
This improves overall application performance as windows will give this
process higher priority for low latency multimedia tasks.
2022-01-06 18:41:48 +11:00
Geoffrey McRae
92f27cc0f0
[host] dxgi: use DwmFlush to sync to presentation interval
...
This change reduces the host GPU and CPU load by a large margin
improving guest system performance along with removing latency spikes
when moving the mouse. This is default enabled but can be disabled with
the new option `dxgi:dwmFlush=no` as it limits the capture rate to the
refresh rate of the guests output which may not be desireable.
2022-01-06 18:39:08 +11:00
Geoffrey McRae
5bb1f01dea
[host] windows: parse the UUID from the SMBIOS
2022-01-06 14:22:38 +11:00
Geoffrey McRae
fdb38a227e
[host] app: implement stubs for platform specific guest information
2022-01-05 21:04:57 +11:00
Geoffrey McRae
b3f6c75ade
[host] app: zero memory allocated for lgmp userdata
2022-01-05 20:13:12 +11:00
Geoffrey McRae
952ebea2c5
[all] refresh copyright dates
2022-01-05 19:42:46 +11:00
Geoffrey McRae
0d27092ef5
[all] move min/max and upcast macros into common/util.h
2022-01-05 19:41:57 +11:00
Geoffrey McRae
ebf20dd108
[host] nvfbc: fix failure to startup
2022-01-05 19:31:47 +11:00
Geoffrey McRae
7cc9b5f77c
[host] app: remove debug line and fix my failure to count
2022-01-05 19:25:51 +11:00
Geoffrey McRae
0ccc84959e
[host] app: fix out by one compiler warning
2022-01-05 19:23:19 +11:00
Geoffrey McRae
ba9f2b85b6
[host/client] kvmfr: update to include extra user data about the VM
...
This change allows the host to provide information to the client about
how the VM is configured, information such as the UUID, CPU
configuration and capture method both for informational display in the
client as well as debugging in the client's logs.
The format of the records allows this to be extended later with new
record types without needing to bump the KVMFR version.
2022-01-05 19:18:43 +11:00
Geoffrey McRae
ac2c62e560
[host] intiialize the app state earlier to prevent ovewriting re-inits
...
If there is LGMP corruption the LGMP thread will set the state to
REINIT which if this happens early enough will get overwritten if the
inital app state is set too late. Instead set the application initial
state early to avoid this.
2022-01-04 10:40:00 +11:00
Geoffrey McRae
6f39434bdc
[host] correct reinit logic when LGMP corruption is detected
2021-12-30 14:34:45 +11:00
Geoffrey McRae
9b202d5566
[host] detect header corruption and re-initialize if so
2021-12-30 13:49:33 +11:00
Quantum
e7fdf7e77a
[host] pipewire: report stream state
...
This should provide some useful debug information and report stream
errors.
2021-12-28 19:23:14 +11:00
Quantum
10110dd940
[host] app: support force quitting
...
This makes it much less painful to develop the host, as sometimes it
hangs and ^C doesn't work.
2021-12-28 19:04:47 +11:00
Quantum
a21e897bb5
[host] pipewire: use new format for 10-bit colour
...
I recently added little-endian 10-bit colour formats to PipeWire, which
is what we actually use. The old r210 format is big endian.
2021-12-28 18:50:29 +11:00
vmfortress
8ab130deba
xcb: added basic cursor support via xcb_fixes
...
xcb interface now properly supports cursor integration through
a `pointerThread` similar to the nvfbc implementation.
2021-12-27 11:10:07 +11:00
vmfortress
fbf294efd9
xcb: Fixed return value of xcb_deinit
...
`xcb_deinit` returns `true` to fit the capture interface standard.
2021-12-27 11:10:07 +11:00
vmfortress
2824238b4d
xcb: added xcb_stop and xcb_initOptions support
...
Added basic functions and the necessary variables for the
`.initOptions` and `.stop` items in the capture interface.
2021-12-27 11:10:07 +11:00
Quantum
6f8745a89b
[host] installer: enable DPI awareness
...
This should make the installer look less blurry on high DPI displays.
2021-12-26 11:34:43 +11:00
Quantum
3d1eedd4ef
[host] installer: add ability to install IVSHMEM driver
...
To use this, run makensis with -DIVSHMEM with the driver files in the
ivshmem subdirectory under the build directory.
2021-12-26 11:31:32 +11:00
Quantum
d073f9969c
[host] installer: clean up trailing whitespace
2021-12-26 11:31:32 +11:00
WYF
b21d842f0e
[host] nvfbc: add an option to specify adapter
2021-12-26 11:14:17 +11:00
Tudor Brindus
9872d2e407
[host] dxgi: fix typo in debug log message
2021-12-26 09:49:03 +11:00
Quantum
12461196c3
[host] nvfbc: fix comments in updateDamageRects
2021-12-24 15:30:04 +11:00
Geoffrey McRae
43545a4e17
[all] cmake: refuse to perform in-source builds
2021-12-15 10:56:27 +11:00
Geoffrey McRae
b515fa80d5
[host] nvfbc: be more intellegent when unionizing disjointed sets
2021-10-27 00:00:38 +11:00
Geoffrey McRae
9969896876
[host] app: zero the new client sub count
...
If a new client connects but there has not been a capture timeout the
new client count wont be zeroed on a valid capture. If there is a
timeout later the host will still think there is a new client and
re-send a frame when it should not. This fixes this by reading the value
on a valid frame which zeros the new subs count.
2021-10-20 15:56:35 +11:00
Quantum
13fabc2e4a
[host] windows: fix NSIS install directory on 64-bit builds
...
This is probably an NSIS bug.
2021-10-18 16:17:36 +11:00
Quantum
1f24ab0742
[host] nvfbc: avoid waking up pointer thread for no reason
...
If the wait times out, we used to simply restart the loop, which causes
it to check this->stop and exit if set to true. However, nvfbc_stop
already calls lgSignalEvent, which would wake up the pointer thread to
perform the check, so there is no need to set a timeout on the wait.
2021-09-29 17:47:02 +10:00
Quantum
bc65de5987
[host] installer: build 64-bit NSIS installers
...
The host is a 64-bit application, so requiring 64-bit Windows isn't an
issue. However, not using 32-bit installers has an advantage: we don't
need to require WoW64.
2021-09-21 22:26:10 +10:00
Quantum
286da11172
[host] windows: don't register exit event when none exists
2021-09-04 13:25:06 +10:00
Quantum
e05bb196f0
[host] app: print CPU information on startup
2021-08-31 20:14:10 +10:00