Commit graph

236 commits

Author SHA1 Message Date
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
Geoffrey McRae
ffbd89fb77 [host] NvFBC is now functional 2017-11-01 01:46:47 +11:00
Geoffrey McRae
85f39b7070 [host] initial NvFBC implementation 2017-11-01 00:51:53 +11:00
Geoffrey McRae
b03254b7c2 [host] no need to create a thread when running directly 2017-10-31 23:30:16 +11:00
Geoffrey McRae
8c719ff01a [host] fixed failure to set m_memory in IVSHMEM 2017-10-31 23:29:54 +11:00
Geoffrey McRae
5f19092e4e [cosmetics] fixed case of filenames and includes 2017-10-31 23:22:55 +11:00
Geoffrey McRae
3dd205bafc [host] initial service framework implemented 2017-10-31 23:21:05 +11:00
Geoffrey McRae
941f0f1c16 [host] added IVSHMEM::CreateVectorEvent 2017-10-31 22:17:27 +11:00
Geoffrey McRae
215d2c7a4b [host] implemented initial IVSHMEM interface class 2017-10-31 22:09:57 +11:00
Geoffrey McRae
773c0b52c3 [host] initial host service project 2017-10-31 20:20:37 +11:00
Geoffrey McRae
052e2c1e86 [host] renamed from server->host 2017-10-31 19:14:32 +11:00