Commit Graph

660 Commits

Author SHA1 Message Date
Quantum
f0c7e9bdfa [host] windows: declare high DPI support in manifest
This is the normal way of doing things, and it's easier and less sketchy
than GetProcAddress.
2021-07-20 11:34:45 +10:00
Quantum
0525515bee [host] cmake: use -march=x86-64-v2 when it becomes available
GCC 11 will support x86_64 micro-architecture feature levels.
What we really want to support is nehalem or newer, which is x86-64-v2,
and specifying this instead of nehalem means that we are not tuning for
nehalem specifically.
2021-07-20 11:33:23 +10:00
Quantum
f5ad14b109 [host] windows: directly link D3DKMTSetProcessSchedulingPriorityClass
This function is available since Windows Vista and can therefore be used
directly without going through GetProcAddress. Unfortunately, MinGW does
not have d3dkmthk.h, but we can declare the prototype ourselves and link
against gdi32.dll.
2021-07-20 11:32:41 +10:00
Quantum
323d321a77 [host] windows: correctly declare WINVER and _WIN32_WINNT
We wanted to target Windows Vista, which is 0x0600 not 0x6000.
0x6000 is in fact larger than Windows 10 which is 0x0a00.
2021-07-20 11:32:15 +10:00
Quantum
56833edae7 [host] delay: directly link against ntdll.dll
There is no need to LoadLibrary and GetProcAddress to get pointers to
NtDelayExecution or NtSetTimerResolution. These functions don't have
prototypes in any SDK header, but they are exported in ntdll.dll and
we can simply declare the prototype and link ntdll.

There is also no chance that the functions do not exist: I checked an
old install of Windows NT 4.0 and both of these functions exist.

Also used NtSetTimerResolution instead of ZeSetTimerResolution for
consistency (they are the same).

Also changed system timer resolution log message units to μs with
one decimal digit for readability. This is the actual amount of
precision available to us.
2021-07-20 11:30:12 +10:00
Quantum
d57b5a320e [host] service: fix adjustPriv return value
When OpenProcessToken fails, the function returned -1, which would be true
when converted to bool. This is wrong, and it should be returning false.
2021-07-20 11:29:32 +10:00
Quantum
b4dc021381 [host] service: pass CREATE_UNICODE_ENVIRONMENT unconditionally
According to MSDN documentation for CreateEnvironmentBlock, "[i]f the
environment block is passed to CreateProcessAsUser, you must also
specify the CREATE_UNICODE_ENVIRONMENT flag."

Also pass DETACHED_PROCESS because the host is a GUI application and
doesn't use the console.
2021-07-20 11:27:16 +10:00
Quantum
ebda52b18b [host] service: use SYSTEM token attached to the current process
Since with the service, we are already running as SYSTEM, we don't need
to use dupeSystemProcessToken to get the token for SYSTEM. This removes
the need for having SeDebugPrivilege, SeTcbPrivilege, and
SeAssignPrimaryTokenPrivilege, or otherwise doing sketchy things.

Furthermore, we now only open the token with the privileges we actually
need.
2021-07-20 11:27:03 +10:00
Quantum
16ee1a825c [host] windows: use event to gracefully signal exit
This allows the process to be terminated without resorting to
TerminateProcess. With some fixes, this allows the notification icon to be
removed when the service is restarted.

Furthermore, instead of sending WM_DESTROY to fool the window into believing
it's being destroyed, we actually call DestroyWindow now.
2021-07-20 11:26:49 +10:00
arcnmx
a4f5ce08b9 [host] link resource directly to exe 2021-07-20 11:25:55 +10:00
arcnmx
aa41e4d2ce Revert "Revert "[host] avoid manual windres command""
This reverts commit cd10e02862.
2021-07-20 11:25:55 +10:00
Quantum
9ab85fd0b8 [host] capture: stop sending DPI information
The client doesn't need DPI information anymore, so there is no point
fetching it.
2021-07-18 10:50:57 +10:00
Tudor Brindus
92706caddc [common]: move array length into a common helper
Since it is more generally useful, and less cryptic this way.
2021-07-18 10:41:50 +10:00
Quantum
893b2500c2 [host] nvfbc: copy damaged areas only
This commit tracks the damage made to the framebuffer and only updates those
areas. Damage is tracked directly with NvFBC provided diffmaps.
2021-07-18 10:41:50 +10:00
Quantum
9ce4990793 [host] capture: pass frameIndex to capture backends
This allows capture backends to track damage made to each frame.
2021-07-18 10:41:50 +10:00
Tudor Brindus
f274bec8fc [host] dxgi: compute damage rectangles from moved rectangles
This is untested in that I don't have a Windows 8 VM where move rects
are supplied, but seems sound.
2021-07-18 10:41:50 +10:00
Quantum
e42747f4e3 [host] nvfbc: better algorithm for merging adjacent regions
Use a proper disjoint-set to give a more accurate result.
2021-07-18 10:41:50 +10:00
Quantum
5ed3301cf5 [host] nvfbc: merge adjacent changed regions
For adjacent changed regions, we actually use the bounding box for the
entire polygon. This may result in more area being damaged than strictly
necessary, but is nevertheless desirable since it reduces the number of
rectangles.
2021-07-18 10:41:50 +10:00
Quantum
6b16bb3ea1 [host] nvfbc: populate damage rectangles 2021-07-18 10:41:50 +10:00
Tudor Brindus
d7f9afb3ba [host] dxgi: populate damage rectangles
Co-Authored-By: Quantum <quantum2048@gmail.com>
2021-07-18 10:41:50 +10:00
Quantum
80ab4b5393 [host] capture: add damage rectangles to capture interface 2021-07-18 10:41:50 +10:00
Geoffrey McRae
7decb58bf7 [host] windows: fix build on Linux due to case sensitive filenames 2021-07-17 15:05:32 +10:00
Geoffrey McRae
d1ec19b30b [host] windows: fix delayExecution order of magnitude bug 2021-07-17 15:02:58 +10:00
Geoffrey McRae
74468cf799 [host] windows: remove accidental addition of some junk 2021-07-17 15:02:36 +10:00
Geoffrey McRae
411a6b1e49 [host] windows: add delayExecution function for more accurate sleeps
This change not only exposes and allows use of NtDelayExecution, but
also moves the code to set the system timer resolution.
2021-07-17 14:55:22 +10:00
Geoffrey McRae
e228165ff9 [host] windows: fix system timer resolution message units
ZwSetTimerResolution works in units of 100ns
2021-07-17 14:31:31 +10:00
Geoffrey McRae
d615514799 [host] windows: do not callback from the mouse hook context
The windows hook WH_MOUSE_LL is called in such a way that any delay in
processing causes a system wide stall. This change spawns an extra
thread which waits on an event set by the hook which is then used to
call the callback with an artifical limit of 1000Hz.
2021-07-17 14:03:52 +10:00
Geoffrey McRae
789ee70674 [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.
2021-07-12 19:28:13 +10:00
Geoffrey McRae
3c0616bab7 [host] dxgi: print out the output device name to aid with support 2021-07-12 19:03:02 +10:00
Geoffrey McRae
3ce3b573a3 [host] app: fix infinate loop introduced in the last commit 2021-07-12 17:35:16 +10:00
Geoffrey McRae
ce459c24ce [host] app: wait for space in the frame queue
We must always wait for space in the frame queue so that we do not
overwrite memory that is already queued and may be in use by a client.
2021-07-12 17:30:06 +10:00
Geoffrey McRae
7d0b9711bd [host] nvfbc: remove the frameEvent event and associated code
Now that the host application can run the capture interface in
synchronous mode, and NVFBC uses this mode there is no longer need for
the frameEvent.
2021-07-12 17:01:23 +10:00
Geoffrey McRae
e477663a7e [host] app: allow the capture interface to select async or sync mode
While it's correct for DXGI to use a asyncronous waitFrame model, other
capture interfaces such as NvFBC it is not correct. This change allows
the capture interface to specify which is more correct for it and moves
the waitFrame/post into the main thread if async is not desired.
2021-07-12 16:57:22 +10:00
Quantum
eb01efe0cb [host] nvfbc: do not crash when protected content is playing
We return a timeout, so that when protected content finishes playing, we
can immediately resume capture.
2021-07-11 17:54:23 +10:00
Geoffrey McRae
8db4b65dee [host] app: allocate LGMP memory for KVMFRCursor updates without shapes
This changes the host to use a seperate pool of LGMP memory for cursor
positionl updates without shape information helping to prevent
corruption of the shape entries if they are still pending. While this is
not a perfect solution it resolves the issue without making major
changes to LGMP during the RC phase we are currently in.
2021-07-11 12:52:18 +10:00
Quantum
501b270890 [host] nvfbc: optimize change detection loop
Before, we only break out of the current row when a change is detected,
and all subsequent rows are still scanned. Now we break out of the entire
loop. This should make change detection ever so slightly faster.
2021-07-11 10:15:12 +10:00
Quantum
fd8f8b2b28 [host] dxgi: correctly mention AcquireNextFrame in help text
Also fix some formatting issues.

Co-Authored-By: Tudor Brindus <me@tbrindus.ca>
2021-07-11 10:15:12 +10:00
Geoffrey McRae
78b8e2a73c [host] windows: make D3DKMTSetProcessSchedulingPriorityClass global
Testing shows that `D3DKMTSetProcessSchedulingPriorityClass` has a
positive performance impact for NvFBC as well as DXGI, as such always
try to boost the priority for the windows host.
2021-07-10 12:27:30 +10:00
Geoffrey McRae
041b95507d [host] windows/nvfbc/common: strip out broken "enhanced" event logic
This so called "enhanced" event logic is completely flawed and can never
work correctly, better to strip it out and put our faith in windows to
handle the events for us.

And yes, I am fully aware I wrote the utter trash in the first place :)
2021-07-09 10:22:03 +10:00
Geoffrey McRae
1effd5fddc [common] debug: add color support to debug messages
People often miss the warnings about invalid arguments in their command
line, this last minute patch attempts to address this by making
warnings, errors, fixme's and fatal errors stand out if stdout is a TTY.
2021-07-07 23:05:46 +10:00
Geoffrey McRae
ada6ada576 [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.
2021-07-06 09:53:42 +10:00
Geoffrey McRae
82e10c1b7e [host] app: fix inverted cursor shape logic
We should only advance the pointerIndex if the buffer was not swapped
out for storage. This is to ensure that we do not overwrite cursor
memory that the client(s) may still be using.
2021-07-04 19:45:10 +10:00
Geoffrey McRae
cd10e02862 Revert "[host] avoid manual windres command"
This reverts commit d82f2e510d.
While the proposed change is more correct, it breaks the generation of
the file due to failure to locate the resource files, such as
`resources/icon.ico`.
2021-07-04 19:30:06 +10:00
Geoffrey McRae
e9b009db9f [host] app: fix issue with wrong cursor shape being sent for new clients
When a new cursor shape is provided by the capture interface we need to
retain a copy of it incase a new client connects which will not yet have
the cursor shape. The logic here was flawed causing the wrong shape to
be sent to a new client in some instances.
2021-07-04 19:04:54 +10:00
arcnmx
d82f2e510d [host] avoid manual windres command 2021-07-03 04:28:28 +10:00
arcnmx
2386781d4f [host] install cmake target 2021-07-03 03:30:53 +10:00
Geoffrey McRae
2160dee23a [host] linux: implement new truncated frame support 2021-06-12 19:10:32 +10:00
Geoffrey McRae
d36c4f0e83 [host] kvmfr: allow the frame size to exceed the available memory
This change allows the host to still transmit a frame that is truncated
if the IVSHMEM size is too small to allow for a full frame.
2021-06-12 18:44:28 +10:00
Geoffrey McRae
f02d61d665 [host] dxgi: sleep until it's close to time to map
This change adds an average function to time how long it takes the GPU
to copy and map the texture, and then uses this average to sleep for 80%
of this average lowering CPU usage and potentially decreasing lock
contention.
2021-06-06 12:26:36 +10:00
Quantum
24d0aa0c18 [all] normalize copyright on all source files 2021-06-06 11:53:05 +10:00
Geoffrey McRae
fcf6abc7c6 [host] NvFBC/DXGI: make DXGI the default instead of the fallback
It has been detemined that a failure to init NvFBC causes a 20-30%
performance penalty on non NvFBC supported hardware (GeForce) when using
DXGI, as such reverse the order and default to using DXGI as our first
option.

If NvFBC is still desired, pr #500 added the option `app:capture` which
can be used to force NvFBC.
2021-06-06 06:14:24 +10:00
Geoffrey McRae
1d7eb50608 [host] cmake: force -O3 for release with debug builds 2021-06-06 02:25:48 +10:00
Geoffrey McRae
0d9b0bd367 [host] dxgi: increase maxTextures default to 4
Testing shows that at high frame rates the default of 3 is hampering
performance, increasing this to 4 yields a substantial performance
improvement.
2021-06-06 01:35:00 +10:00
Geoffrey McRae
87568f97eb [host] linux: add missing library to fix compilation 2021-06-04 12:44:21 +10:00
Geoffrey McRae
0b4e98881f [host] app: add os_showMessage for Linux
Linux doesn't have a generic way to show a dialog box, so we just use
DEBUG_INFO to print the message out to the console.
2021-06-04 12:39:11 +10:00
Geoffrey McRae
fb1b30b728 [host] app: calculate and report the required IVSHMEM size
One of the most common issues reported in the support channels is the
IVSHMEM size being too small. This change adds a calculation to
determine an optimal size and uses the new `os_showMessage` platform
method to display a message box to the user with the error.
2021-06-04 12:31:15 +10:00
Jonathan Rubenstein
5fb6c73263 [doc] host: Imported from host/README.md
Placed at bottom of Technical FAQ to hide it
host/README.md removed
2021-05-25 16:57:52 +10:00
Quantum
ec81a353c2 [host] nvfbc: fix null dereference in mouse hook handler
Since we now let the mouse hook linger until the process is killed, the
cursor event that the hook signals may now be null, as the capture could
have stopped. If the hook fires during this time, a crash occurs.
2021-04-29 11:53:19 +10:00
Quantum
6a1ec9420e [host] service: compare SIDs directly without string conversion
Instead of converting every SID to string with ConvertSidToStringSidA
and compare it with the magical SID string for local system with strcmp,
we could instead create the local system SID and compare directly with
EqualSid.
2021-04-29 11:52:23 +10:00
Quantum
93d97424df [host] service: disable handle inheritance when spawning host
We don't actually have any handles that should be inherited, so specifying
TRUE for bInheritHandles to CreateProcessAsUserA is pointless.

Furthermore, according to MSDN, "[y]ou cannot inherit handles across
sessions," and we are spawning the host in a different session, so this
is even more pointless.
2021-04-29 11:51:41 +10:00
Quantum
2afad4e1be [host] service: disable privileges as soon as they are not needed
It is usually considered good practice to enable elevated privileges
for the shortest duration possible.
2021-04-29 11:51:30 +10:00
Quantum
5bfb33c739 [host] windows: re-implement open log safely
Instead of doing ShellExecute from the service, we instead get the token
of the currently logged in user, and do CreateProcessAsUserA to run
notepad with that token. This should be safe.
2021-03-22 09:06:07 +11:00
Quantum
a089c4ea32 [host] service: introduce fatal errors for ivshmem failures
Also for failure to parse command line. For these errors, restarting
with exponential backoff will not help: no amount of restarting the
service could possibly make the ivshmem device exist or larger, so
we shouldn't try.
2021-03-22 08:54:58 +11:00
Quantum
c12c6ea3c7 [host] service: retry a few times when host fails to restart
Certain users of Radeon cards have observed that the host fails to start
at boot, with D3D11CreateDevice failing with HSTATUS 0x887a0004, which
translates to "The specified device interface or feature level is not
supported on this system."

This failure results in a LG_HOST_EXIT_FAILED exit code, which the service
does not attempt to restart. The user has to manually restart the service
for the host application to work.

These users reported that the host application started fine on
B2. This strongly suggests that the fix to enable capturing the login
screen made the host application start too early during the boot process,
and the graphics driver did not have time to initialize fully.

This PR allows the service to retry a few times on LG_HOST_EXIT_FAILED,
with exponential backoff, before giving up. This should cover this bug
and other similar bugs related to the early initialization which I do not
have logs for.
2021-03-22 08:54:58 +11:00
Quantum
a4290b290b [host] cmake: link correctly against libxcb-xfixes.so
We are using <xcb/xfixes.h>, so it makes sense to link against the
xcb library instead of libXfixes.so directly.
2021-03-15 12:12:48 +11:00
Quantum
f2c0b8c0b4 [host] allow user to select capture backend
This commit introduces a new option, app:capture, which can be set to
either DXGI or NvFBC to force the host application to use that backend.

This is very useful for testing DXGI on Quadro cards, which would default
to running with NvFBC.
2021-02-27 17:41:44 +11:00
Quantum
54da11a206 [host] free capture interface on exit
This is needed for proper cleanup.

Freeing the capture interface also avoids a crash when using the NvFBC
backend. This is because we moved the mouse hook removal to nvfbc_free.
If nvfbc_free is not called before we start freeing LGMP memory, the
mouse hook would end up writing the cursor position into an invalid
memory address, causing an access violation.
2021-02-27 17:38:12 +11:00
Quantum
8e98f863b6 [host] windows: detect whether screensaver is disabled in the guest
This will allow us to add an option to disable the screensaver on the client
when an application in the guest requests it. This behaviour may be useful
when the guest is doing media playback.
2021-02-21 10:31:48 +11:00
Quantum
ff0a859ceb [host] nvfbc: avoid recreating mouse hook and 1x1 window
The mouse hook code is very fragile, and we would like to avoid unhooking
and re-hooking as much as possible.

After this commit, this is done only once, and the hook and 1x1 window is
only destroyed upon exit. This, of course, comes with the downside of
the slight performance penalty if the guest machine is used directly while
the host is running and the client is not running.
2021-01-31 12:17:14 +11:00
Quantum
1b48ac842a [host] nvfbc: fix resource leak when pointer thread creation fails
Moving NvFBCToSysSetup to nvfbc_init means that when the pointer thread
fails to be created, NvFBCToSysRelease needs to be called.

To resolve such cleanup issues in the future, we instead call nvfbc_deinit,
which should cleanup everything that needs to be cleaned up. fails.
2021-01-31 11:21:24 +11:00
Quantum
a702c912ae [host] nvfbc: move NvFBCToSysCreate into nvfbc_init
When NvFBCToSysCapture reports recreation is required, we return
CAPTURE_RESULT_REINIT, which eventually calls nvfbc_deinit and then
nvfbc_init.

However, the NvFBC object is actually created in nvfbc_create, which
means the NvFBC object is never actually recreated. The result is an
endless cycle of NvFBC asking for recreation. This commonly manifests
as the client waiting endlessly for the host when the guest machine
reboots.

In this commit, the NvFBC object creation is moved into nvfbc_init,
and when recreation is required, it will actually be recreated.
2021-01-31 10:57:51 +11:00
Quantum
acc3298344 [host] nvfbc: cleanup threads created by nvfbc_init on failure
mouseHook_install and dwmForceComposition both create threads, but these
are only freed in nvfbc_deinit which is not called if nvfbc_init fails.
These should be freed if the pointer thread fails to be created, as
nothing else could be cleaning it up.
2021-01-31 09:57:07 +11:00
Quantum
0d28ea160e [host] update README.md to reflect new log paths 2021-01-29 15:56:01 +11:00
Quantum
c91b7f647d [host] installer: create start menu shortcut to log directory
This commit makes the installer create a shortcut to the log directory
introduced by the previous commit.
2021-01-29 15:56:01 +11:00
Quantum
1761ea2b9b [host] windows: move log path to %ProgramData%\Looking Glass (host)
Instead of using %windir%\Temp, which is not accessible by default and
contains a lot of unrelated files, as the location for our log files,
this commit moves it to %ProgramData%\Looking Glass (host), which will
be a dedicated directory just for the LG host log files. This applies
to both the host application logs and the service logs.

Also, we now switched to using PathCombineA from shlwapi.dll instead
of using snprintf, which greatly simplifies the code. PathCombineA
guarantees that the path would not overflow a buffer of MAX_PATH.
2021-01-29 15:56:01 +11:00
Quantum
fb916cbac1 [host] nvfbc: always update cursor shape on startup
This ensures that the top-left position of the cursor sprite is correctly
computed.
2021-01-28 11:18:02 +11:00
Quantum
b97130cf20 [host] nvfbc: generate cursor position update on startup
Before this commit, the NvFBC backend only generated the first cursor
position update when the mouse moves. Therefore, if the user does
not move the mouse, the cursor will be shown at (0, 0), which is not
ideal.

This commit changes this behaviour to unconditionally generate a
cursor update when the mouse hook initializes.
2021-01-28 11:18:02 +11:00
Geoffrey McRae
6b5842d2ff [host] cmake: use -march=nehalem by default
Nehalem is the minimum requirement for the host application as it makes
use of SSE4.1 instructions, as such we should default to compling with
it instead of `-march=native` so that when the binary is distributed it
will operate on foreign systems.

Fixed #416
2021-01-28 08:09:31 +11:00
Geoffrey McRae
1808adc2de [host] app: fix possible string overflow 2021-01-27 01:28:29 +11:00
Geoffrey McRae
e2e49bce13 [host] service: fix possible use of unitialized variable 2021-01-27 01:23:58 +11:00
Geoffrey McRae
0d7be70b56 [host] dxgi: fix maybe uninitialized warning 2021-01-27 01:21:06 +11:00
Geoffrey McRae
6b0699e664 [host] installer: include the debug PDB if it is available 2021-01-26 22:55:25 +11:00
Quantum
f9ec32b255 [host] service: disable buffering on the log file
Before this change, the log is buffered, so if the host application exits
for any reason, it usually would not show up in the log file immediately,
and the service has to be restarted for the logs to be flushed.

This commit disables the buffering so that any log entries shows up
immediately.
2021-01-25 09:35:03 +11:00
Quantum
d610aaf2cf [host] nvfbc: update cursor position on shape change
This is because we keep track of the top-left corner of the cursor, not
the location of the hotspot. When the cursor shape changes, the hotspot
location may also change. When it does, the position of the top-left
corner changes and requires an update.

In the case that we do not have the current cursor position, which
happens on startup, we do not generate this update.
2021-01-23 20:37:09 +11:00
Geoffrey McRae
04774d9cd6 [host] fix faults caused by improper startup/shudown/restart ordering 2021-01-21 17:05:30 +11:00
Geoffrey McRae
6b8161972d [host] nvfbc: prevent possible double free 2021-01-21 16:28:20 +11:00
Geoffrey McRae
9965a4a3a6 [host] app: prevent double call to stopThreads 2021-01-21 16:27:57 +11:00
Geoffrey McRae
98ea8b0bb8 [host] nvfbc: remove invalid close of the HMONITOR handle 2021-01-21 16:17:24 +11:00
Geoffrey McRae
8778827a42 [host] fix invalid LGMP free of cursor memory 2021-01-21 15:53:06 +11:00
Geoffrey McRae
536df254e0 [host] fix the return code for the platform specific init 2021-01-21 15:44:19 +11:00
Geoffrey McRae
ef4df571f0 [host] use posix compatible exit codes (signed char) 2021-01-21 15:24:02 +11:00
Geoffrey McRae
e926bad759 [host] dont overwrite the exit code on shutdown 2021-01-21 15:14:50 +11:00
Geoffrey McRae
ad9e84eaaa [host] return a proper exit code 2021-01-21 15:07:19 +11:00
Quantum
ffa72c7992 [host] nvfbc: force composition to capture some full screen apps
NvFBC is unable to capture certain applications that bypasses the DWM
compositor, for example, Firefox playing video in full screen. This
has been a known issue for a long time with Nvidia's ShadowPlay, see:
* https://www.nvidia.com/en-us/geforce/forums/geforce-experience/14/233709/
* https://crbug.com/609857

Nvidia won't fix this, but there are workarounds. For example, we
create a transparent 1x1 layered window, which forces desktop composition
to be enabled.

Note that SetLayeredWindowAttributes also supports alpha-based transparency,
but setting transparency to 0 will cause DWM to skip composition. We could
use a transparency of 1, but this ruins the image by the slightest bit,
which is unacceptable. Therefore, we must use chroma key-based
transparency, which tricks DWM into compositing despite being fully
transparent.
2021-01-21 12:14:03 +11:00
Geoffrey McRae
cac454d9cf [host] dxgi: reverse the rotation angle.
This is undocumented however testing yields that DXGI DD reports the
inverse rotation. Research shows that this is because of a difference in
coordiate spaces.

Ref: https://docs.microsoft.com/en-us/windows/uwp/gaming/supporting-screen-rotation-directx-and-cpp
2021-01-18 15:15:36 +11:00
Geoffrey McRae
14cc57071c [host] remove the remainder of the YUV420 support 2021-01-18 13:55:44 +11:00
Geoffrey McRae
f5587b6b6b [host] all: pass back the desktop rotation to the client 2021-01-18 13:53:29 +11:00
Quantum
95e1b48f83 [host] windows: make mousehook.c work on secure desktop
Basically, this creates a separate thread for the mouse events, and this
thread detects that the desktop has changed (say to the secure desktop),
and unhooks, switches to the new desktop, and then rehooks.

This allows the cursor location to be updated while using NvFBC on secure
desktop and the login screen.
2021-01-17 13:23:29 +11:00
Quantum
fe835b98d5 [host] windows: sleep for 1 second instead of 1 millisecond
This is definitely supposed to sleep for 1 second.
1 ms is basically no throttling.
2021-01-17 02:58:27 +11:00
Quantum
c5c43d99f3 [host] windows: allow capture of login screen
WTSGetActiveConsoleSessionId will return a session even if it's not logged in,
unlike our old GetInteractiveSessionID function. Launching looking glass on
such a console session will allow the login screen to be captured.

Note that WTSGetActiveConsoleSessionId() will return 0xFFFFFFFF if there are
no sessions attached.
2021-01-17 02:56:29 +11:00
Quantum
4858bb5899 [host] windows: avoid quoting issues with CreateProcessAsUserA
To quote MSDN documentation:

> The lpApplicationName parameter can be NULL, in which case the executable
> name must be the first white space–delimited string in lpCommandLine. If
> the executable or path name has a space in it, there is a risk that a
> different executable could be run because of the way the function parses
> spaces. The following example is dangerous because the function will
> attempt to run "Program.exe", if it exists, instead of "MyApp.exe".
>
>   LPTSTR szCmdline[] = _tcsdup(TEXT("C:\\Program Files\\MyApp"));
>   CreateProcessAsUser(hToken, NULL, szCmdline, /*...*/ );
>
> If a malicious user were to create an application called "Program.exe" on
> a system, any program that incorrectly calls CreateProcessAsUser using the
> Program Files directory will run this application instead of the intended
> application.
>
> To avoid this problem, do not pass NULL for lpApplicationName.

So instead, we pass the executable to lpApplicationName instead, which avoids
the issue. MSDN says:

> The lpCommandLine parameter can be NULL. In that case, the function uses
> the string pointed to by lpApplicationName as the command line.

This also avoids the strdup since lpApplicationName is LPCSTR unlike
lpCommandLine which is LPSTR.
2021-01-16 11:48:03 +11:00
Quantum
8f27789d25 [host] windows: close handle to token in enablePriv
This should eliminate all handle leaks resulting from killing the host.
2021-01-15 20:44:50 +11:00
Quantum
e401513552 [host] windows: add timestamps to service logs
This makes it easier to identify when things in the logs happened.
2021-01-15 20:44:38 +11:00
Quantum
81561a242f [host] windows: remove ImpersonateLoggedOnUser call
It shouldn't have any effect, since the host application is created with
the token, and there is no need for the service itself to impersonate.

In practice, removal doesn't appear to have any effect on the ability to
capture privileged things like secure desktop.
2021-01-15 20:44:25 +11:00
Quantum
789f21ccb3 [host] windows: handle defined exit codes in service
The service should now react to host application exit codes.
For the exit codes that demands it, the service will exit instead of
restarting the host.
2021-01-15 20:44:13 +11:00
Quantum
323aab8ec2 [host] windows: improve restart logic and remove mutex hack
Use the process handle returned by CreateProcessAsUserA to wait on the
process. This results in faster response times and less polling.
For example, it now restarts instantly when UAC is activated.

This also removes the call to OpenProcess and rendering the mutex unnecessary.

As a bonus, it should fix #298.
2021-01-15 11:43:23 +11:00
Quantum
22920acc88 [host] windows: define exit codes for future use
The host process will be changed to return these codes, from which the
service process could decide whether to exit or restart the process and log.

Note that on Windows, return values are 32-bit unlike POSIX which is only 8.
2021-01-15 11:27:02 +11:00
Quantum
65009dcedc [host] windows: avoid leaking process and thread handles
The handles in PROCESS_INFORMATION must be closed if not used, or they
will leak.
2021-01-15 09:49:42 +11:00
Quantum
a55b5e4b06 [host] linux: link with libX11 and libGL 2021-01-15 08:49:30 +11:00
Quantum
e467db64d8 [host] linux: include missing headers
- <pwd.h> for getpwuid
- <unistd.h> for getuid
- "common/stringutils.h" for alloc_sprintf
2021-01-15 08:49:30 +11:00
Quantum
dd2d69fa37 [host] xcb: remove undefined getPointer member from Capture_XCB 2021-01-15 08:49:30 +11:00
Quantum
ed9e3d253b [host] xcb: fix xcb_create signature error
Should have two arguments instead of zero.
2021-01-15 08:49:30 +11:00
Quantum
2723b4b7c0 [host] xcb: fix xcb_getFrame compile error
The argument should have been a pointer.
2021-01-15 08:49:30 +11:00
Tudor Brindus
a46a3a2668 [all] use explicit void parameter lists
This makes it a compile-time error to call a function that semantically
takes no parameters with a nonzero number of arguments.

Previously, such code would still compile, but risk blowing up the stack
if a compiler chose to use something other than caller-cleanup calling
conventions.
2021-01-14 17:29:37 +11:00
Geoffrey McRae
c2ad9666bb [host] use the HotSpot information as provided by DXGI
I must have originally overlooked this member when I wrote this code. :S
2021-01-05 20:55:39 +11:00
Quantum
7e4d323427 get display DPI info to scale mouse movement 2021-01-05 09:03:29 +11:00
Geoffrey McRae
0bd5f0b2f1 [client/host] disable stack execution 2021-01-05 00:01:45 +11:00
Jonathan Rubenstein
393a879c0b [host] nsis: change 'Stopping' to imperative 'Stop'
This follows the rest of the output like Install, Delete
2021-01-01 12:12:07 +11:00
Jonathan Rubenstein
d01d9db9bf [host] nsis: log more details about the process
Uses nsExec:ExecToLog in a few places to log on the installation output
window
2021-01-01 12:12:02 +11:00
Jonathan Rubenstein
5cc4f5454f [host] nsis: amended installer welcome description 2021-01-01 12:10:23 +11:00
Jonathan Rubenstein
32c797e60a [host] nsis: adds colour to installer and welcome screen 2021-01-01 12:10:15 +11:00
Jonathan Rubenstein
b66715b042 [host] nsisi: add welcome page to installer 2021-01-01 12:10:09 +11:00
Geoffrey McRae
38198b1477 [host] dynamically locate CreateProcesssAsUserA for pre-win 10 2020-12-30 18:29:58 +11:00
Geoffrey McRae
b942085e6c [host] don't allocate LGMP_Q_POINTER_LEN cursor shape buffers
There is no need to allocate a buffer for each message as the client is
only required to show the latest version of the cursor. Whie the logic
should prevent cursor corruption, it's not guaranteed, however this is
not a problem as this can only happen if the client is lagging behind
and as such when it gets another update message it will re-read the
now new shape anyway.
2020-11-10 23:29:04 +11:00
Geoffrey McRae
604b6bec9a [host] don't fail if windows is dumb and doesnt give us the cursor info 2020-11-01 04:45:57 +11:00
Geoffrey McRae
42ef9964de [host] enlarge the cursor buffer size for large cursor shapes 2020-11-01 04:34:26 +11:00
Geoffrey McRae
0badf2a84c [all] move defines for LGMP_QUEUE_*_LEN into KVMFR.h 2020-10-30 18:48:41 +11:00
Geoffrey McRae
9d0ae23f9f [host] init ivshmem options before testing 2020-10-19 03:01:35 +11:00
Geoffrey McRae
9ff1859dc1 [host] windows: check the ivshmem device exists in the service 2020-10-19 02:49:15 +11:00
Geoffrey McRae
7a7e1d006b [host] set the program name/description in the app.manifest 2020-10-19 01:56:03 +11:00
Geoffrey McRae
38b05cda50 [host] dxgi: fix incorrect bpp value 2020-10-12 20:08:51 +11:00
Geoffrey McRae
7a49f75d95 [host] dxgi: ensure formatVer is incremented on re-init 2020-10-12 19:39:57 +11:00
Geoffrey McRae
b2961c7939 [all] added new format version field to frame header 2020-10-12 18:52:37 +11:00
Geoffrey McRae
8a9f004ff6 [host/client] fix invalid initialization of RGBA16F 2020-10-11 19:39:47 +11:00
Geoffrey McRae
9c6bd888fd [host/client] added experimental RGBA16 float support (EGL only) 2020-10-11 19:22:31 +11:00
Geoffrey McRae
a94d3734c2 [all] pass the project path to the version.cmake script 2020-10-09 02:51:28 +11:00
Geoffrey McRae
e1d7752165 [host] fix nsis build failure to do invalid path to new VERSION file 2020-10-09 02:36:48 +11:00
Geoffrey McRae
e6c88a4af3 [all] be smarter about getting the git version 2020-10-09 02:17:20 +11:00
Geoffrey McRae
e20c8a5cc7 [host] dxgi: don't try to get the hotspot of a null cursor 2020-10-06 23:24:01 +11:00
Geoffrey McRae
4f4d2dbf42 [host] dxgi: fix memory leak if an error occurs 2020-10-06 22:32:10 +11:00
Geoffrey McRae
7e362050f7 [all] update KVMFR to provide cursor hotspot information
This commit bumps the KVMFR protocol version as it adds additional
hotspot x & y fields to the KVMFRCursor struct. This corrects the issue
of invalid alignment of the local mouse when the shape has an offset
such as the 'I' beam.
2020-08-20 13:51:01 +10:00
camr0
72d70e8322 Update host/README.md: c-host -> host 2020-08-17 11:44:52 +10:00
Geoffrey McRae
1c7961daeb [host] dxgi: rework locking and retry logic for lower latency 2020-08-15 20:49:49 +10:00
Geoffrey McRae
cdc3384883 [host] dxgi: improve frame signaling mechanics 2020-08-15 18:16:11 +10:00
Geoffrey McRae
969effedde [host] update information about PsExec now LG can run as a service 2020-08-13 11:41:16 +10:00
Geoffrey McRae
dc4d1d49fa [host] updated the readme with regards to log file location 2020-08-12 22:15:22 +10:00
Geoffrey McRae
4e1f947a09 [host] Windows: fix uninstaller product name 2020-08-12 22:03:10 +10:00
Geoffrey McRae
15d1a74291 [host] Windows: multiple fixes to the installer 2020-08-12 21:50:48 +10:00
TheCakeIsNaOH
7dba6b9b08 [Host] Convert installer to setup service instead of scheduled task 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
a5ad531004 [Host] Change default install dir "Looking-Glass" to "Looking Glass" 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
c119b3dcca [Host] Correct installer and shortcut names 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
e2f2437ef4 [Host] Installer command line options and install location selection add 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
b2980fea63 [Host] Add instructions on how to build NSIS installer. 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
2b518690b8 [Host] NSIS script change names from C-Host to Host 2020-08-12 21:32:15 +10:00
TheCakeIsNaOH
92aca75792 [c-host] Add NSIS installer script 2020-08-12 21:32:15 +10:00
Geoffrey McRae
64fdb8b7bb [host] Windows: service (un)install now starts/stops the service
In addition to starting and stopping the service, it now also stops the
LG process if the service started it.
2020-08-12 20:56:02 +10:00
Geoffrey McRae
380b5df9f9 [host] increase sleep timeout to 100ms 2020-08-11 19:11:17 +10:00
Geoffrey McRae
c7330167cf [host] shutdown capture if there are no subscribers
Fixes #33
2020-08-11 18:30:47 +10:00
Geoffrey McRae
ca02e1aba9 [host] Windows: change "Open Log File" to "Log File Location" 2020-08-11 17:45:00 +10:00
Geoffrey McRae
ca4b1f5592 [host] Windows: don't open the log file, instead show it's location
Now that it's recommended to run LG as the `SYSTEM` user, launching an
application to read the log file is dangerous as it will be launched
with the same access rights (`SYSTEM`). Instead so as Microsoft
recommends and only present a message box with the information.
2020-08-11 17:42:00 +10:00
Geoffrey McRae
0cf1e27709 [host] Windows: run with HIGH priority if started by the service 2020-08-11 17:37:40 +10:00
Geoffrey McRae
045932ce77 [host] send the correct cursor shape on client connection 2020-08-11 17:16:54 +10:00
Geoffrey McRae
bf5481446b [host] Windows: poll more freqently for a stopped LG process 2020-08-11 15:22:29 +10:00
Geoffrey McRae
4619ddef5d [host] Windows: added missing linker library 2020-08-11 13:15:18 +10:00
Geoffrey McRae
ea74ee6e25 [host] windows: fix crosscompile take 2 2020-08-11 13:11:42 +10:00
Geoffrey McRae
ecd73aa670 [host] windows: fix linux crosscompile 2020-08-11 13:07:23 +10:00
Geoffrey McRae
10d9678b3d [host] Windows: improved service restart detection 2020-08-11 12:47:50 +10:00
Geoffrey McRae
e08d3afdbc [host] Windows: added missing service files 2020-08-11 12:27:04 +10:00
Geoffrey McRae
9a6b598438 [host] Windows: Implemented service to launch LG as the SYSTEM user
Experimental, use at your own peril!

This commit adds the ability for the LG host to install and launch with
Windows as a system service.

To install simply run `looking-glass-host.exe InstallService` or
conversely to uninstall `looking-glass-host.exe UninstallService`.
2020-08-11 12:22:22 +10:00
Geoffrey McRae
1d6d640b6e [host] dxgi: default to using the acquire lock 2020-08-07 20:31:46 +10:00
Geoffrey McRae
977d7b277d [host] dxgi: boost GPU thread priority if possible 2020-08-07 19:44:00 +10:00
Geoffrey McRae
9e3a42cb62 [host] don't stop the timer when restarting capture 2020-08-03 12:04:50 +10:00
Geoffrey McRae
67dec216d2 [host] search the applications local directory for the config 2020-05-30 12:31:26 +10:00
Geoffrey McRae
553e2830bb [client/host] share the host version with the client for diagnostics 2020-05-29 14:14:31 +10:00
Geoffrey McRae
667ab981ba [host] send the latest cusror information when a new client connects 2020-05-25 14:37:02 +10:00
Geoffrey McRae
bc7871f630 [c-host] renamed finall to just plain host 2020-05-25 13:42:43 +10:00
Geoffrey McRae
373d4ac932 [host] removed old host application from the project, see c-host 2019-05-28 14:47:09 +10:00
Paul Götzinger
b5975e0f05 [host] [c-host] added support to specify IVSHMEM device
[host] basic IVSHMEM device selecting implemented

Minor fixes for IVSHMEM device scanning

[c-host] added support to specify IVSHMEM device
2019-05-10 22:28:27 +10:00
Geoffrey McRae
28b12c85f4 [build] make "common" a static library (part 1/2) 2019-04-11 11:03:30 +10:00
Geoffrey McRae
526c09b7ff [host] added missing file from build 2019-02-28 16:26:09 +11:00
Geoffrey McRae
5a37a53cb0 [host] move windows specific debug code to the host 2019-02-28 16:23:31 +11:00
Geoffrey McRae
08bf01b649 [all] update copyright dates 2019-02-22 22:16:14 +11:00
Geoffrey McRae
263b412fdf [host] dxgi: fixed reversed logic for fallback 2019-02-07 15:13:07 +11:00
Geoffrey McRae
037ea5b1fc [host] fix compiler warnings 2019-02-07 14:43:18 +11:00
Geoffrey McRae
18634fa805 [host] fallback to IDXGIOutput1 if IDXGIOutput5 is not available 2019-02-07 14:43:18 +11:00
Geoffrey McRae
1ef61f6cd3 [host] use a global hook to obtain cursor move pos 2019-01-11 23:58:50 +11:00
Geoffrey McRae
5518ccb795 [host] NvFBC: user specified privateData for debug 2019-01-09 16:10:46 +11:00
Geoffrey McRae
6e1180ce06 [host] nvfbc: initial updates to re-enable support 2019-01-03 17:08:05 +11:00
Geoffrey McRae
2a86339b1d [host] [Patch 1/2] fix copy of padded resolutions 2019-01-02 10:29:46 +11:00
Geoffrey McRae
a1b1ed0060 [host] initiate the texture copy earlier 2018-12-07 20:54:30 +11:00
Geoffrey McRae
2cb18a3f8f [host] removed incomplete h264 2018-12-07 20:54:30 +11:00
Geoffrey McRae
2a30bb718a [host] updated to take advantage of DXGI v1.5 2018-12-04 21:26:46 +11:00
Geoffrey McRae
d235d076c4 [host] simplify capture logic and fix re-init bug 2018-11-02 21:38:02 +11:00
Geoffrey McRae
9f67f42f94 [host] fix hang on capture error 2018-10-19 21:16:47 +11:00
Geoffrey McRae
31a25c94c6 [host] fix failure to re-init 2018-10-19 21:16:42 +11:00
Geoffrey McRae
6a9f687eae [host] increase cursor ring size to avoid a race 2018-10-19 20:20:01 +11:00
Geoffrey McRae
df7e9b1184 [host] remove unused critical sections 2018-10-19 20:15:42 +11:00
Geoffrey McRae
1350ba6c4b [host] accumulate cursor updates rather then queue 2018-10-19 20:14:43 +11:00
Geoffrey McRae
f36fd5ac1a [host] correct cursor visibility information 2018-10-09 18:28:08 +11:00
Geoffrey McRae
0e8678b182 [host] correct mouse position with hotspot offset 2018-10-09 18:10:59 +11:00
Geoffrey McRae
ce4f1be2a6 [host] fix cursor visibility bug 2018-10-09 17:52:13 +11:00
Geoffrey McRae
db907b1b67 [host] improve mouse sync with the client 2018-10-09 17:48:59 +11:00
Geoffrey McRae
fb37174e5f [dxgi] cleaned up retry logic 2018-10-04 17:05:32 +10:00
Geoffrey McRae
8f0a6cd810 [host] general performance improvements 2018-10-04 00:07:34 +10:00
Geoffrey McRae
471303a179 [host] better sync, helps enormously with 4K!!! 2018-09-30 03:50:43 +10:00
Geoffrey McRae
73a2597c8a [dxgi] fix crash caused by failure to release in some instances. 2018-09-27 12:49:52 +10:00
Geoffrey McRae
3cd152c9d5 [host] DXGI capture improvements 2018-09-26 21:20:17 +10:00
Geoffrey McRae
a989914fef [host] remove the invalid usage of SafeRelease
SafeRelease was really useless, derefencing the smart pointers through
the use of & releases the value before SafeRelease get's to it. Instead
either allow the destructor to handle it's release, or explicityly
release it by assigning NULL
2018-07-28 10:27:50 +10:00
Geoffrey McRae
f692284f27 [host] don't uselessly try to scale 1:1 textures 2018-07-28 10:27:50 +10:00
Geoffrey McRae
d292d46fcb [host] correct YUV output, do not copy padding bytes 2018-07-28 07:48:10 +10:00
Geoffrey McRae
b899a65726 [host] correct RGBtoYUV shader output 2018-07-28 07:47:49 +10:00
Geoffrey McRae
63b4dd633c [host] correct invalid copy size for U & V planes 2018-07-28 07:25:00 +10:00
Geoffrey McRae
eba99f6968 [host] fix compiler warnings 2018-07-28 06:29:34 +10:00
Geoffrey McRae
354bef94ee [host] fixed project Release shader build 2018-07-28 06:25:41 +10:00
Geoffrey McRae
e515cdc8dd [host] added YUV420 output support 2018-07-28 06:19:59 +10:00
Geoffrey McRae
2a03d1c4a9 [host] removed unused shader view 2018-07-28 06:19:59 +10:00
Geoffrey McRae
3e3c409fc4 [host] ignore compiled shader headers 2018-07-28 06:19:59 +10:00
Geoffrey McRae
62e3dd250b [host] remove compiled shader headers from repo 2018-07-28 06:19:59 +10:00
Geoffrey McRae
3799929f59 [host] remove the depth buffer, it's unused 2018-07-28 06:19:59 +10:00
Geoffrey McRae
2019766989 [host] added format converter class 2018-07-28 06:19:58 +10:00
Geoffrey McRae
58c3b37e49 [h264] cosmetics 2018-07-28 06:19:58 +10:00
Geoffrey McRae
c650c2e474 [dxgi/h264] fix failure to re-init h264 correctly 2018-07-28 06:19:58 +10:00
Geoffrey McRae
e4cdc58399 [host] move H264 out of DXGI into seperate class 2018-07-26 05:50:06 +10:00
Geoffrey McRae
af143bdd82 [dxgi] update DXGI to use timeout return value 2018-07-26 03:09:59 +10:00
Geoffrey McRae
343983d9af [host] add timeout return value for repeated frame
This is to allow a repeat frame without incuring an additional
memory copy when the frame is already in shared memory.
2018-07-26 03:08:52 +10:00
Geoffrey McRae
5cabf155ab [host] flag paused when waiting for sec desktop 2018-07-24 01:12:24 +10:00
Geoffrey McRae
43593d8aea [host] replaced MultiMemcpy with plain memcpySSE 2018-07-23 15:21:43 +10:00
Geoffrey McRae
8a9d0b0bfb [host] fix crash on screen blanking 2018-06-01 00:39:18 +10:00
Geoffrey McRae
d4c41d2d94 [host] improve capture performance
Contrary to the MS documentation, benchmarking shows a substantial
increase in performance when releasing the captured frame as soon
as possible. This change makes it possible to achieve 60FPS at 4K
resolutions.
2018-05-31 18:53:11 +10:00
Geoffrey McRae
d753af9d17 [host] remove debug tracing noise 2018-05-29 18:37:21 +10:00
Geoffrey McRae
b23c7808c0 [host] don't count re-init requests as failures 2018-05-29 18:37:21 +10:00
commander kotori
80581a4aa2 [host] ask for unicode with mingw-w64 makefile
Pass -DUNICODE as a CFLAG.  The visual studio project asks for
a unicode (wide-string) build, but the unix makefile did not.

This fixes the build on msys2.
2018-05-28 12:10:52 +10:00
Geoffrey McRae
871aee2aae [host] fixed missed cursor shape updates 2018-05-28 10:34:24 +10:00
Geoffrey McRae
3adcbfaa7d [host] cosmetics 2018-05-24 18:08:59 +10:00
Geoffrey McRae
213c220d83 [host] don't assume the capture was successful 2018-05-24 17:05:49 +10:00
Geoffrey McRae
eef18dd655 [host] add critical section for m_cursorInfo 2018-05-24 16:50:50 +10:00
Geoffrey McRae
b29f1c62bb [host] update to KVMFR v6 and decouple mouse 2018-05-24 11:24:24 +10:00
Geoffrey McRae
15a337fee8 [host] use the new memcpySSE implementation 2018-05-22 18:59:24 +10:00
arcnmx
35b4d75eea [host] mingw-w64 compile fixes (#44)
* [host] rename min() to LG_MIN()

* [host] format string type fixes, %Ix doesn't exist in mingw

* [host] DXGI minor fixes

* [host] mingw lacks media foundation api headers and QISearch
2018-01-30 21:07:46 +11:00
Geoffrey McRae
a36d312844 [host] dxgi: fixed missed header update for timeout fix 2018-01-04 09:30:55 +11:00
Geoffrey McRae
6653340bac [host] dxgi: follow suit and use h264 high profile 2018-01-04 09:30:27 +11:00
Geoffrey McRae
9000fdf6fc [host] fix frame duplication problem with new MFT implementation 2017-12-31 00:32:39 +11:00
Geoffrey McRae
9b7f54fa35 [host] service restarts now restart capture interfaces 2017-12-30 13:35:45 +11:00
Geoffrey McRae
9ef9f60505 [host] dxgi: fixed MFT memory leak and re-init failure 2017-12-30 13:35:45 +11:00
Geoffrey McRae
b5f2092e9c [host] return the compressed frame size in the pitch field 2017-12-29 21:01:02 +11:00
Geoffrey McRae
03622f61b0 [host] Added experimental H264 compression to DXGI (disabled by default)
This is not yet working, the client is yet to be updated to support
decompressing this stream.
2017-12-29 20:53:52 +11:00
Geoffrey McRae
3d9230ac93 [host] dxgi: fixed frame update regression 2017-12-29 07:15:59 +11:00
Geoffrey McRae
2d746cbfd4 [host] dxgi: performance improvements 2017-12-29 07:01:13 +11:00
Geoffrey McRae
2f2813037b [host] improved latency of multimemcpy with hybrid locking and preempt 2017-12-29 07:00:27 +11:00
Geoffrey McRae
f6f4c8070a [host] adjusted frame and cursor offset calculations 2017-12-29 06:11:32 +11:00
Geoffrey McRae
59fa025292 [host] add store fence to shm writes as we are using writecombine 2017-12-28 15:42:44 +11:00
Geoffrey McRae
e09d7f0ad0 [host] Update IVSHMEM class to support incoming driver version 2017-12-28 15:42:44 +11:00
Geoffrey McRae
16e804b068 [host] added tracing class to help profile slow code points 2017-12-23 18:15:15 +11:00
arcnmx
d9397610f3 [host] compile MultiMemcpy on mingw 2017-12-21 14:42:49 +11:00
arcnmx
f26d8fbd3e [host] remove unused variables 2017-12-21 14:42:49 +11:00
Geoffrey McRae
43b096a5e7 [host] added multi-threaded memcopy for high resolutions 2017-12-21 13:49:36 +11:00
Geoffrey McRae
2fe800f502 [host] dxgi: corrected timeout alteration left behind from debugging 2017-12-20 04:35:07 +11:00
Geoffrey McRae
ec6c35010b [host] updated host application for the new mt client format
See prior commit for details on this update
2017-12-20 00:58:42 +11:00
Geoffrey McRae
2a93e2ed55 [host] removed comments from prior testing 2017-12-19 13:40:59 +11:00
Geoffrey McRae
1f004472cc [host] dxgi: re-mapping is required to sync memory changes properly 2017-12-18 21:34:44 +11:00
Geoffrey McRae
0d1d49b00e [host] dxgi: wait for sync before trying to read the memory map 2017-12-18 17:35:35 +11:00
Geoffrey McRae
e298f9169c [client] dxgi: persistant map the texture memory 2017-12-18 17:18:37 +11:00
Geoffrey McRae
9e75c7ab34 [host] boost the priority to realtime (run as admin required) 2017-12-18 17:18:11 +11:00
Geoffrey McRae
8dec59f3ff [host] dxgi: don't release the frame until we need a new one
Per Microsoft spec we should not release the frame until we are about to
acquire another frame, this pervents additional GPU overhead on the
guest.
2017-12-18 12:03:22 +11:00
Geoffrey McRae
49acc6ec0b [host] dxgi: fix termination due to wait timeout 2017-12-18 00:10:42 +11:00
Geoffrey McRae
4e6c1ea648 [host] fix build in VS++ 2017-12-18 00:06:53 +11:00
arcnmx
e6c6c16d56 [host] compile NvFBC on mingw 2017-12-17 09:11:25 +11:00
Geoffrey McRae
24709ef186 [host] dxgi: set the pitch on new frames 2017-12-17 05:20:40 +11:00
Geoffrey McRae
db59e67ddb [host] update capture classes to return the pitch 2017-12-17 05:05:56 +11:00
Geoffrey McRae
1815387bbb [host] update to use the new header format 2017-12-17 05:03:47 +11:00
Geoffrey McRae
9d8f3a79b0 [host] detect switch user event and wait instead of terminating
Fixes #22
2017-12-17 04:50:04 +11:00
Geoffrey McRae
bf85358715 Revert "[host] simplify dll loading"
This reverts commit b89a8fee04.
2017-12-17 04:04:25 +11:00
Geoffrey McRae
b77a34b8b6 [host] DXGI: fix Secure Desktop wait logic
Fixes #20
2017-12-17 02:27:48 +11:00
Geoffrey McRae
7c5b2b5c1c [host] dxgi: re-send the last frame if capture times out
This change prevents the guest from stalling on startup if there are no
frames being captured
2017-12-16 10:24:37 +11:00
Geoffrey McRae
758b7af754 [host] use a local copy of the header and then update it all in one go
Writing to shared memory is much faster then reading as the shared
memory is not cached, this change ensures we are using a local copy
of the header performing the final update all in one go.
2017-12-16 10:06:55 +11:00
jmossman
b89a8fee04 [host] simplify dll loading 2017-12-16 07:01:41 +11:00
Geoffrey McRae
d08fba9cf9 [host] fix cursor not visible on client reconnect 2017-12-15 12:56:39 +11:00
Geoffrey McRae
df13340439 [host] reset the update count when the guest flags a restart 2017-12-15 12:08:41 +11:00
Geoffrey McRae
0948dda12f [host] implemented variable cursor buffer size 2017-12-15 11:30:25 +11:00
Geoffrey McRae
133001b545 [host] added NvFBC build configurations to vcxproj 2017-12-15 09:58:51 +11:00
Geoffrey McRae
106136afd6 [host] corrections to build with VC++ 2017-12-15 09:51:23 +11:00
arcnmx
c72afff055 [host] Makefile to build host app with mingw 2017-12-14 15:40:07 -05:00
arcnmx
d052239721 [host] mingw interlocked intrinsics 2017-12-14 15:39:53 -05:00
arcnmx
fdfa3006b4 [host] ICapture portable interface definition 2017-12-14 15:39:33 -05:00
arcnmx
a01d755ab5 [host] configure/ifdef out nvfbc 2017-12-14 15:39:19 -05:00
arcnmx
9a9d84cd1f [host] remove ATL, mingw doesn't support it 2017-12-14 15:39:09 -05:00
arcnmx
892a3970ff [host] remove nonexistent ICapture function 2017-12-14 15:39:03 -05:00
arcnmx
d6fee6bf0b [host] inline the implementation of min() 2017-12-14 15:38:51 -05:00
arcnmx
7691093121 [host] DEBUG_* string format fixes 2017-12-14 15:38:43 -05:00
arcnmx
524183661d [host] fix include paths and casing 2017-12-14 15:38:25 -05:00
Geoffrey McRae
c0b67e7cb2 [host] DXGI: copy based on the actual pitch 2017-12-14 20:34:32 +11:00
Geoffrey McRae
163f612efa [host] treat flags field as volatile 2017-12-14 06:56:33 +11:00
Geoffrey McRae
e379f70784 [host] switch to fast polling mode, fixes stuttering issues 2017-12-14 02:23:11 +11:00
Geoffrey McRae
15830a81f7 [host] save the last cursor shape and send it to the client on restarts 2017-12-13 21:46:23 +11:00
Geoffrey McRae
a216655582 [host] reduce event timeout to speed up client reset 2017-12-13 21:07:56 +11:00
Geoffrey McRae
fc49c10ea6 [host] added clean guest restart mechanisim 2017-12-13 21:06:03 +11:00
Geoffrey McRae
f633c63d51 [host] added support for cursor pitch 2017-12-13 04:47:28 +11:00
Geoffrey McRae
4b4aca841c [host] don't spam the client with mouse updates when nothing has changed 2017-12-13 02:30:19 +11:00
Geoffrey McRae
818164da7f [host] updated to use new protocol design 2017-12-12 07:56:50 +11:00
Geoffrey McRae
b0f83d7106 [host] dxgi reinit timeout was too short 2017-12-12 05:05:21 +11:00
Geoffrey McRae
b2ed80a595 [host] removed ARM build configuration 2017-12-12 04:43:53 +11:00
Geoffrey McRae
219179b375 [misc] added website url to sources 2017-12-12 04:30:47 +11:00
Geoffrey McRae
8c8d0ec7af [host] fixed DXGI cursor offset 2017-12-12 03:59:58 +11:00
Geoffrey McRae
ad6c2ab544 [host] Cropping is still required on NvFBC... :( 2017-12-12 03:59:58 +11:00
Geoffrey McRae
7f3657e5f0 [host] reversed the cropping logic, likely not needed anymore 2017-12-12 03:59:57 +11:00
Geoffrey McRae
a61293b551 [host] fixed support for high DPI desktops (4K+) 2017-12-12 03:59:57 +11:00
Geoffrey McRae
65ba649b36 [host/test] vertical align the text too 2017-12-12 03:59:57 +11:00
Geoffrey McRae
7d7074e9f6 [host/test] center text in the window 2017-12-12 03:59:57 +11:00
Geoffrey McRae
3336f27b5a [host] added sync-test application 2017-12-12 03:59:57 +11:00
Geoffrey McRae
b1d48943c7 [host] the client doesn't use interrupts anymore, no need to ring it 2017-12-12 03:59:57 +11:00
Geoffrey McRae
51bc7631ab [host] fixed incorrect checking of difference map 2017-12-12 03:59:57 +11:00
Geoffrey McRae
0b290d83d3 [host] Numerous performance improvements and minor bug fixes 2017-12-12 03:59:57 +11:00
Geoffrey McRae
ec13fc161d [host] rename project to "Looking Glass" 2017-12-12 03:59:57 +11:00
Geoffrey McRae
a54f3000f5 [host] reworked capture to capture at the hosts's frame rate
This will help frame delivery to the host arrive on time, as well as
allow lower latency with a higher host refresh rate.

Data offset addresses are now also pre-calculated rather then
updated on every frame.
2017-12-12 03:59:56 +11:00
Geoffrey McRae
3bc6f29dc3 [host] syncronization improvements 2017-12-12 03:59:56 +11:00
Geoffrey McRae
6c9269b64f [host] removed deprecated MTMemcpy from the project 2017-12-12 03:59:56 +11:00
Geoffrey McRae
4a850f531c [host] added new CrashHandler class to project 2017-12-12 03:59:56 +11:00
Geoffrey McRae
df5aa13029 [host] Added a crash handler to write out mini dumps 2017-12-12 03:59:56 +11:00
Geoffrey McRae
d450d792e3 [host] Don't specify D3D11_CREATE_DEVICE_DEBUG in release builds 2017-12-12 03:59:56 +11:00
Geoffrey McRae
5ecf2d36c1 [host] Updated to use the new header format 2017-12-12 03:59:55 +11:00
Geoffrey McRae
12617479d4 [host] Prevent NvFBC from stalling
NvFBC will wait forever for a change if nothing has changed, instead use
a timeout so that if the guest has re-connected it doesn't stall waiting
for a guest update.
2017-12-12 03:59:55 +11:00
Geoffrey McRae
f91b837172 [host] fixed NvFBC bpp problem in nocrop mode 2017-12-12 03:59:55 +11:00
Geoffrey McRae
3a64f9b96c [host] Use ARGB instead of RGB for performance
This is counter intuative as it consumes more RAM, but performance is
improved on the client as video hardware doesn't work in RGB but BGRA.
2017-12-12 03:59:55 +11:00
Geoffrey McRae
ad9b78a7cc [host] altered to use common memcpySSE 2017-12-12 03:59:55 +11:00
Geoffrey McRae
9de71ed2da [host] memory performance improvements 2017-12-12 03:59:55 +11:00
Geoffrey McRae
534e9425f1 [host] Added SMID BGRAToRGB support and implemented it in DXGI 2017-12-12 03:59:55 +11:00
Geoffrey McRae
6eb40a1897 [host] added option parsing to application 2017-12-12 03:59:55 +11:00
Geoffrey McRae
71c6e5d317 [host] NvFBC now takes full screen capture and crops off letterboxing
For this to function correctly the display scaling in the nvidia control
panel must be set to "No scaling", failure to do so will cause incorrect
window cropping. This is due to the inability to capture a non-scaled
image using NvFBC.
2017-12-12 03:59:55 +11:00
Geoffrey McRae
16a8acb303 [host] implemented double buffering 2017-12-12 03:59:55 +11:00
Geoffrey McRae
fcf0976081 [host] removed MTMemcpy, overheads negate performance gains 2017-12-12 03:59:55 +11:00
Geoffrey McRae
5899508a5b [host] add initial buffering support 2017-12-12 03:59:55 +11:00
Geoffrey McRae
c18e5a13aa [host] corrected error in DXGI retry logic 2017-11-04 11:15:06 +11:00
Geoffrey McRae
346f62a48a [host] added getc to wait around when debugging 2017-11-04 06:12:44 +11:00
Geoffrey McRae
1975bc13bc [host] make DXGI detect the secure desktop and wait
While we can't interact with UAC and CTL+ALT+DEL stuff, we can alteast
wait around for it to return so we can re-init and continue to stream.
2017-11-04 06:11:24 +11:00
Geoffrey McRae
00c96a7dec [host] removed left behind change from debugging 2017-11-04 04:02:55 +11:00
Geoffrey McRae
9287ec97eb [host] made DXGI ReInitialization more robust on mode changes
DXGI doesn't like to restart too fast, com exceptions are logged and the
duplication device fails to create with an E_ACCESS_DENIED error. Adding
a 200ms sleep between teardown and re-init resolves this issue.
2017-11-04 04:00:00 +11:00
Geoffrey McRae
32d61023e5 [host] fixed debug message output 2017-11-04 03:58:19 +11:00
Geoffrey McRae
902a653ab2 [host] removed deprecated DXGICapture code from the project 2017-11-04 00:19:06 +11:00
Geoffrey McRae
8fadf0a80c [host] Added cursor support to DXGI capture 2017-11-04 00:14:30 +11:00
Geoffrey McRae
f90c258c34 [host] initial rewrite of DXGI capture 2017-11-03 22:20:48 +11:00
Geoffrey McRae
ffd2fc1824 [host] Fixed the DXGIManager to capture the cursor properly.
Note: This class will be entirely re-written when I find some time,
it is very poorly implemented, full of assumptions and creates a new
texture for every single frame 🤦.
2017-11-03 00:18:37 +11:00
Geoffrey McRae
7d83af9410 [host] added DXGI Desktop Duplication support 2017-11-02 22:37:19 +11:00
Geoffrey McRae
44d7e9e77c [host] added initial framework for DXGI capture 2017-11-02 17:57:11 +11:00
Geoffrey McRae
fc192c0016 [host] removed namespace sillyness 2017-11-02 17:57:10 +11:00
Geoffrey McRae
23b0dc7c81 [host] Added GPLv2 license to host project 2017-11-01 03:53:06 +11:00
Geoffrey McRae
bcc2fb1f74 [host] removed obsolete TODO placeholder 2017-11-01 03:52:49 +11:00
Geoffrey McRae
01b10b3ee1 [host] converted program to a windows hidden/background user app.
NvFBC will not start when running as a service, likely intentional
security of the API to prevent it from being abused.
2017-11-01 03:23:46 +11:00
Geoffrey McRae
e935a09441 [host] removed nvidia lib path and fixed subsystem type for other builds 2017-11-01 02:19:21 +11:00
Geoffrey McRae
9ac3cadc7d [host] added multithreaded memcopy implementation 2017-11-01 02:15:47 +11:00
Geoffrey McRae
de8403dcd6 [cosmetics] fixed unintentional de-indent of code 2017-11-01 02:03:26 +11:00