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
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
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
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
Quantum
a391e271c3
[host] dxgi: damage all textures when skipping frame
2022-01-09 16:36:26 +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
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
952ebea2c5
[all] refresh copyright dates
2022-01-05 19:42:46 +11:00
Tudor Brindus
9872d2e407
[host] dxgi: fix typo in debug log message
2021-12-26 09:49:03 +11:00
Quantum
cdda89cef7
[host] use correct argument order for calloc
2021-08-16 16:25:59 +10:00
Tudor Brindus
982b4e6625
[host] use variable-relative sizeof where possible
2021-08-16 16:22:55 +10:00
Quantum
4f7ce91e7f
[host] capture: switch all asserts to DEBUG_ASSERT
2021-08-14 12:19:07 +10:00
Quantum
acd5ce51db
[host] dxgi: use FAILED macro instead of comparing against S_OK
2021-08-13 20:21:50 +10:00
Quantum
566c89e9d8
[host] dxgi: correctly count moved rectangles
2021-08-13 20:21:08 +10:00
Quantum
b3173bdddc
[host] dxgi: include correct DXGI headers
...
The declarations in dxgi_extra.h are not missing, they are in dxgi1_2.h and
dxgi1_5.h, which exist in MinGW-w64 since 2017.
2021-08-12 12:35:45 +10:00
Quantum
61a4b0744d
[host] dxgi: use standard MinGW libd3d11.a
...
MinGW has been shipping this file since 2014, and that version contains the
only function from the dll that we call: D3D11CreateDevice.
2021-08-12 11:58:34 +10:00
Quantum
9bded74543
[host] dxgi: use CopySubresourceRegion when possible
...
This commit adds damage tracking to the DXGI textures, and only copies the
damaged areas to the textures with ID3D11DeviceContext::CopySubresourceRegion.
The sleep logic in waitFrame makes it difficult for this to reduce the
latency, but removing it shows significant improvements (6-7 ms to ~3 ms)
when a tiny portion of the screen is damaged, while showing no difference on
full screen damage.
2021-08-11 19:01:52 +10:00
Quantum
cab95c5eed
[common] rects: refactor rect buffer copy code to common module
...
This also fixes a bug of accidentally multiplying the stride by 4 when
the stride is already in bytes and not pixels.
2021-08-08 08:30:11 +10:00
Quantum
3d29967a8d
[host] dxgi: copy only damaged regions to IVSHMEM
...
This implementation uses a line sweep algorithm to copy the precisely the
intersection of all accumulated damage rectangles, ensuring that every
pixel is copied exactly once, and no pixel is ever copied multiple times.
Furthermore, once a row has been swept, we update the framebuffer write
pointer immediately.
2021-08-06 22:55:15 +10:00
Quantum
51b9cd4e5a
[all] copyright: use unicode copyright sign ©
...
This is done for consistency with the license strings in appstrings.c.
2021-08-04 21:16:35 +10:00
Quantum
d82333519c
[host] dxgi: use SDK versionhelpers.h to test for Windows version
...
Also, changed logic so that Windows versions before 8 is not treated as 10.
2021-07-20 11:34:57 +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
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
Tudor Brindus
d7f9afb3ba
[host] dxgi: populate damage rectangles
...
Co-Authored-By: Quantum <quantum2048@gmail.com>
2021-07-18 10:41:50 +10:00
Geoffrey McRae
74468cf799
[host] windows: remove accidental addition of some junk
2021-07-17 15:02:36 +10:00