Geoffrey McRae
57a74c156b
[client] egl: set a default scale for textures without filters
2021-08-09 18:24:33 +10:00
Geoffrey McRae
6882e5c59f
[client] egl: provide the texture scale to the desktop shader
...
If the texture has a post-processing filter that has scaled the texture,
the desktop fragment shader needs to know this if it's doing linear
scaling.
2021-08-09 18:22:28 +10:00
Geoffrey McRae
f7f8060447
[client] egl: allow setting an output scale for a post-process shader
2021-08-09 17:57:36 +10:00
Quantum
53461d7515
[client] egl: simplify desktop vertex shader
...
In GLSL, using the / operator on two vectors of the same size divides the
vector component-wise, i.e. vec2(a, b) / vec2(c, d) == vec2(a / c, b / d).
2021-08-09 17:51:13 +10:00
Quantum
9b87f4ba5e
[client] egl: cycle through multiple textures for dmabuf
...
This avoids race conditions in GL drivers when attempting to render and
call glEGLImageTargetTexture2DOES on the same texture.
Also, when using glEGLImageTargetTexture2DOES, we do not need to allocate
storage for textures.
2021-08-09 17:12:11 +10:00
Geoffrey McRae
1fd726eed7
[client] x11: be less sensitive to frame skips
...
External events like launching other applications can cause latency
spikes while X11 initializes the application, we should only start
adjusting our delay if we see excessive skips over a 1s period.
2021-08-09 15:51:01 +10:00
Geoffrey McRae
bc7e59c9d7
[client] x11: prevent present event loop underruns
...
Queue up and maintain a list of presentation timestamps to avoid spikes
caused by X11 event processing latency.
2021-08-09 15:24:12 +10:00
Geoffrey McRae
179eaef29d
[client] x11: switch to epoll for event wait loop
2021-08-09 15:23:44 +10:00
Geoffrey McRae
f50ef4c23c
[client] egl: remove includes from testing
2021-08-09 14:13:03 +10:00
Geoffrey McRae
86d6b67337
[client] egl: rework egl to accomodate post-processing filtering
2021-08-09 14:08:10 +10:00
Geoffrey McRae
69f6532b8d
[common] ringbuffer: allow reverse iteration
2021-08-09 14:06:32 +10:00
Geoffrey McRae
91d1b8d2cd
[client] egl: refactor egl_texture_free to use project naming standards
2021-08-08 17:52:13 +10:00
Geoffrey McRae
baf9661530
[client] egl: remove texture->ops indirection
2021-08-08 17:31:52 +10:00
Geoffrey McRae
2141046da9
[client] opengl: refactor to use project naming standards
2021-08-08 17:21:25 +10:00
Geoffrey McRae
266ad27998
[client] egl: refactor to use project naming standard
2021-08-08 17:16:10 +10:00
Geoffrey McRae
f4a925a750
[client] main: destroy and finish fontconfig usage
...
Fixes ASAN reported memory leak
2021-08-08 16:21:48 +10:00
Geoffrey McRae
30ed563504
[client] interface: refactor to use camlCase function names
2021-08-08 15:43:42 +10:00
Geoffrey McRae
d347b28481
[client] egl: implement free for texture frambuffer
2021-08-08 15:35:13 +10:00
Geoffrey McRae
f8ae291090
[client] interface: switch to using UPCAST for the renderer's data
2021-08-08 15:32:01 +10:00
Geoffrey McRae
45d1f27fb4
[client] interface: rename LG_Renderer to LG_RendererOps
...
Part of the standardisation of using the `Ops` suffix for all interfaces
2021-08-08 14:43:04 +10:00
Geoffrey McRae
1a8267d55a
[client] interface: cleanup the renderer interface
...
Removes the silly typedefs and adds some basic documentation as to the
usage of each function.
2021-08-08 14:39:40 +10:00
Quantum
b822e255d8
[client] egl: attempt DMABUF import and fallback if it fails
...
This should deal with drivers not supporting our DMABUF without attempting
to identify the drivers and blacklist them.
2021-08-08 09:53:47 +10:00
Geoffrey McRae
037b76750a
[client] egl: revert glsync changes
...
`process` and `bind` are called from the same thread in order, there is
no need for atomic usage here.
This reverts commit 3d7dbd6371
.
This reverts commit b3db1ba10b
.
2021-08-08 09:44:59 +10:00
Geoffrey McRae
e949f2f8d2
[client] egl: texture_framebuffer should call the stream init
2021-08-08 09:43:28 +10:00
Geoffrey McRae
88c91d4752
[egl] texture: use more appropriate vairable names (parent & this)
2021-08-08 09:35:56 +10:00
Geoffrey McRae
3d7dbd6371
[client] egl: sync
is now an atomic, access it as such
2021-08-08 09:26:36 +10:00
Quantum
b3db1ba10b
[client] egl: eliminate GLsync object leaks
...
It used to be the case that we overwrite this->sync even if it was non-zero
when updating the texture, without deleting the sync object. If we update
faster than we render, the result would be leaking sync objects.
This commit ensures that sync objects are deleted when they are replaced.
2021-08-08 09:19:04 +10:00
Geoffrey McRae
16f68d6b1b
[client] main: don't call stopWaitFrame if jitRender is not enabled
2021-08-08 09:01:48 +10:00
Geoffrey McRae
64da3465b8
[client] x11: invalidate the full window after timeout from expose
...
Invalidating the entire window on an Expose event causes poor WM
performance when dragging the window around. Instead flag to redraw and
wait for the expose events to stop for 100ms before doing it.
2021-08-08 08:49:46 +10:00
Geoffrey McRae
12d256c7c8
[client] egl: do a full redraw if nightvision is toggled
2021-08-08 08:42:08 +10:00
Quantum
3e32e01c30
[client] egl/imgui: use imgui for night vision gain configuration
2021-08-08 08:42:01 +10:00
Quantum
ac3677d9ae
[client] egl: implement partial copies for framebuffer textures
...
This uses the same line sweep algorithm originally created to copy DXGI
textures to IVSHMEM to implement the copy from IVSHMEM to memory-mapped
pixel buffer objects.
2021-08-08 08:30:11 +10:00
Geoffrey McRae
e755f0befa
[client] egl: correct letterbox area clear attempt #3 - sigh
2021-08-07 04:00:18 +10:00
Geoffrey McRae
3e08e7aafa
[client] x11: prevent skew from enter/leave/focus and fullscreen events
2021-08-07 03:49:32 +10:00
Geoffrey McRae
9f6ad864ed
[client] egl: correct letterbox area clear attempt #2 :)
2021-08-07 03:44:47 +10:00
Geoffrey McRae
ec56b2760a
[client] x11: don't allow window manager events to skew cal timing
2021-08-07 03:39:11 +10:00
Geoffrey McRae
e5a138d854
[client] egl: properly clear the letterbox areas
2021-08-07 03:28:52 +10:00
Geoffrey McRae
ad256e0b00
[client] x11: improve presentation sync calibration
2021-08-07 02:36:11 +10:00
Geoffrey McRae
162b1b93db
[client] main: don't include the swap into the render timings
...
If vsync is enabled the swap will block until vblank skewing the timing
metrics.
2021-08-07 01:45:42 +10:00
Geoffrey McRae
0ec66ba210
[client] main: increase render graph max scale to 10ms
...
Some GPUs (like my K1200) easly exceed 2ms on the render time making
this graph useless.
2021-08-07 01:45:42 +10:00
Quantum
5d3c00717a
[client] egl/imgui: use imgui for scaling algorithm selection
2021-08-06 22:49:49 +10:00
Quantum
dc7fd74327
[client] egl: refactor config dialog into main egl module
...
This will allow other things like scaling to be implemented.
2021-08-06 22:49:49 +10:00
Quantum
5b26017a8a
[client] overlay: move separator above donation prompt
...
It looks really weird having a separator right after a sentence ending in :.
A separator makes the list look detached from the paragraph that introduces
it, which looks awkward. Instead, this commit moves the separator before the
introducing paragraph.
Also added logic to properly pluralize the sentence.
2021-08-06 22:49:02 +10:00
Quantum
6bd454f77f
[client] overlay/config: switch to use new URL widget when possible
2021-08-05 22:43:46 +10:00
Quantum
08f3ad504c
[client] imgui: implement new widget for displaying URLs
...
Note that actually opening the browser is not implemented yet.
2021-08-05 22:43:46 +10:00
Geoffrey McRae
afbee641b1
[client] implement support for KVMFR_FEATURE_SETCURSORPOS
2021-08-05 22:19:35 +10:00
Geoffrey McRae
719fec0a45
[client] don't terminate after successful upgrade of LGMP
2021-08-05 21:45:50 +10:00
Geoffrey McRae
2fa09dbd95
[client] allow the user to upgrade if the LGMP version doesn't match
2021-08-05 21:43:49 +10:00
Quantum
65e550a61c
[client] egl: pad buffer damage by 1px when rendering desktop
...
We want to add extra padding to deal with scaling, which may end up blending
with neighbouring pixels.
2021-08-05 08:05:30 +10:00
Geoffrey McRae
0603a55492
[client] x11: prevent possible calibration underflow
2021-08-05 07:11:23 +10:00
Geoffrey McRae
a37b527bbd
[client] main: make core overlays register before everything else
...
The display servers and renderers may want to register their own
overlays in the future, as such we need g_state.overlays to be
initialized to allow for this.
2021-08-05 07:01:28 +10:00
Geoffrey McRae
0af558345f
[client] wayland: fix build with libdecor after invalidateWindow change
2021-08-05 06:58:43 +10:00
Geoffrey McRae
44f815409d
[client] imgui: ensure the pointer shape is correct
...
Since we only update imgui's cursor location when the overlay is
enabled, if the last cursor position was showing a shape that is
incorrect when we re-enter the overlay the cursor will be wrong. This
corrects this by updating the location as we enter overlay mode.
2021-08-05 06:55:41 +10:00
Geoffrey McRae
6e7f39edee
[client] app: allow selective full invalidation
...
Overlays only need to trigger a new frame if they have changed and not
full window invalidation, this change allows for this.
2021-08-05 06:47:36 +10:00
Geoffrey McRae
6c84c0eca6
[client] overlay: move keybinds and config into the overlays
...
This adds a new `earlyInit` call which allows the overlay to register
options before actually being intialized. Also the keybind handling and
state tracking for each overlay has been moved internal to the overlay
itself.
2021-08-05 06:40:06 +10:00
Geoffrey McRae
d90e658e3b
[client] main: fix incorrectly hiding the cursor dot in captureOnly mode
2021-08-05 06:11:12 +10:00
Geoffrey McRae
85f3a71dd5
[client] overlay: remember and restore the grab and pointer state
...
When entering overlay mode if the cursor was previously grabbed we
should restore the state when exiting overlay mode. This will also
correct the pointer setting it to NONE or SQUARE depending on the prior
grab state.
2021-08-05 06:03:09 +10:00
Geoffrey McRae
38ddfc0b61
[client] core: never allow warp when the overlay is active
2021-08-05 05:48:59 +10:00
Geoffrey McRae
ff01a197f3
[client] overlay: don't use the internal function directly for config
2021-08-05 00:57:54 +10:00
Geoffrey McRae
6c44bbb53e
[client] egl: use a ui switch for damage display instead of a keybind
2021-08-05 00:56:31 +10:00
Geoffrey McRae
f3f0157d3c
[client] overlay: allow registration of runtime configuration options
2021-08-05 00:56:31 +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
0941bd0fe5
[client] imgui: move cursor change to after rendering overlays
...
This allows it to take into the overlays into consideration when deciding
which cursor is to be shown.
2021-08-04 10:52:05 +10:00
Quantum
8ebaf92006
[client] main: rename frameTimings to uploadTimings
2021-08-04 10:38:30 +10:00
Quantum
62cd5e9c57
[client] main: add graph for time spent rendering
...
This is the time spent in the on_render function, not the time between
frames. Having this information helps diagnose slowdowns in renderers.
2021-08-04 10:38:30 +10:00
Geoffrey McRae
9192e2039a
[client] imgui: another missed file
...
Clearly I need to get some sleep :)
2021-08-04 10:37:05 +10:00
Geoffrey McRae
d2c36b8449
[client] overlay: add new configuration overlay [wip]
2021-08-04 10:27:47 +10:00
Geoffrey McRae
80c9f7223a
[client] wayland: fix failure to build
2021-08-04 07:21:57 +10:00
Geoffrey McRae
c15d0dc672
[client] ds: waitFrame now returns a bool to force rendering if needed
...
X11 needs to calibrate to get the best possible latency, as such it
needs the scene to render so that the render time of the scene can be
accounted for in the delay calculation.
2021-08-04 06:49:35 +10:00
Geoffrey McRae
0f7fa32d12
[client] x11: move sleep and calibration code outside of the event loop
...
Sleeping in the x11 event loop is not ideal as it will introduce latency
when processing other events, instead do this in the waitFrame handler.
2021-08-04 06:34:27 +10:00
Geoffrey McRae
6933c278ce
[client] x11: cosmetics
2021-08-04 06:14:27 +10:00
Geoffrey McRae
7fc717a839
[client] x11: don't setup XPresent if jitRender is not enabled
2021-08-04 06:12:21 +10:00
Geoffrey McRae
4e435e6199
[client] ds: tell the display server if jitRender is requested
2021-08-04 06:05:42 +10:00
Geoffrey McRae
366ec16a63
[client] config: use DEBUG_WARN, not fprintf for output
2021-08-04 05:55:34 +10:00
Geoffrey McRae
04c9694ffa
[client] config: ensure mouseRedraw is on if jitRender is in use
2021-08-04 05:54:59 +10:00
Geoffrey McRae
f7682c289a
[client] egl: always render the black bar areas
...
Failure to render these causes artifacts/ghosting when the overlays are
using this area, as such we need to always render this area of the
screen.
2021-08-03 22:29:04 +10:00
Geoffrey McRae
4b4a75475a
[client] egl: fix out by one error with letterbox rendering
...
This replaces the scaled `destRect` with a version that uses doubles
correcting the rounding error that is causing a failure to properly
clear the black bar areas.
2021-08-03 22:27:46 +10:00
Quantum
55703b61b7
[client] egl: remove texture copy in DMABUF path
...
With more efficient rendering due to buffer age support, we no longer need
to copy the texture to avoid excessive dmabuf copies.
2021-08-03 21:37:31 +10:00
Quantum
8545d15c85
[client] egl: warn when EGL_EXT_buffer_age is not supported
2021-08-03 21:37:31 +10:00
Quantum
87aac8cf03
[client] egl: use buffer age extension to render only damaged parts
...
We avoid rendering any area that has not changed since the buffer was used
and also not covered by an overlay.
2021-08-03 21:37:31 +10:00
Quantum
f9977332a6
[client] egl: convert desktop to use desktop_rects
2021-08-03 21:37:31 +10:00
Quantum
2dca056526
[client] egl: refactor damage mesh generation into desktop_rects
...
This mesh will later be used to render only damaged portions of the desktop.
We also moved the coordinate transformation for damage overlay into a matrix
and computed by the shader.
2021-08-03 21:37:31 +10:00
Quantum
dd31a7ef93
[client] egl: clean up splash background shader
2021-08-03 21:12:46 +10:00
Quantum
a25c93b28e
[client] wayland: document wlroots viewport handling workaround
...
Add a comment so we don't forget and remove the "useless" code.
2021-08-03 21:12:25 +10:00
Geoffrey McRae
03ed8b7304
[client] x11: added code to calibrate a delay for presentation
...
XPresent doesn't give us the time before presentation, but the time just
after. This code calculates and calibrates a delay to sleep for before
signaling the wait event for render when using jitRender
2021-08-03 07:51:03 +10:00
Geoffrey McRae
504bf02855
[client] x11: provide an empty rect region to XPresentPixmap
...
Providing None informs the comppositor that there is full screen damage,
instead we provide an empty rectangle to prevent this behaviour.
2021-08-03 07:49:59 +10:00
Geoffrey McRae
4d9ab81ef4
[client] egl: assert the update provdided is a dmabuf
2021-08-03 04:03:37 +10:00
Geoffrey McRae
f3413815a9
[client] egl: re-implement DMABUF (untested)
2021-08-03 03:59:03 +10:00
Geoffrey McRae
50f9baedba
[client] x11: remove junk code from evaluation
2021-08-03 01:11:46 +10:00
Quantum
5d5e4ede1a
[client] egl: use new EGL damage count semantics
...
After the damage queue PR, EGL damage count 0 means no change, and -1 means
invalidate the entire window. However, several other places have different
semantics, and we are not handling them correctly:
1. KVMFR uses 0 to signal invalidating the entire frame, so if we receive 0
rectangles in egl_on_frame, we should set damage count to -1.
2. The damage overlay treated 0 as full damage, which is now incorrect. This
is fixed, and now it treats 0 as no update, and -1 as full damage.
2021-08-03 00:57:32 +10:00
Quantum
8d78a5aa95
[commit] wayland: invalidate window on scale changes
...
This makes it not require new frames for new scale to be properly applied.
2021-08-03 00:57:04 +10:00
Geoffrey McRae
14839dc54e
[client] egl: there should only ever be a single sync object
2021-08-03 00:47:59 +10:00
Geoffrey McRae
891ee3e789
[client] x11: make use of the x11 present extension for jitRender
...
This implementation is a bit dodgy and needs some work but is currently
functional. Consider this feature highly experiemental under X11.
2021-08-02 23:59:26 +10:00
Geoffrey McRae
037788f562
[client] egl: do not set ops
, this is done in texture.c
2021-08-02 23:42:46 +10:00
Geoffrey McRae
13d9c84dc9
[client] egl: replace monolithic EGLTexture with modular version
...
The way things were handled in EGLTexture is not only very hard to
follow, but broken. This change set breaks up EGLTexture into a modular
design making it easier to implement the various versions.
Note that DMABUF is currently broken and needs to be re-implemented.
2021-08-02 23:37:33 +10:00
Geoffrey McRae
e23144aecd
[client] overlay: add new needs_render
for realtime overlays
2021-08-01 21:13:59 +10:00
Quantum
23c77e8508
[client] egl: use a lock for desktop damage to eliminate all races
...
There used to be a possible race when a bunch of rectangle is appended, but
the total count is not updated before it's read. Using a lock eliminates
all such races.
2021-08-01 19:54:56 +10:00
Quantum
f08e2ece93
[client] wayland: implement stopWaitFrame
2021-08-01 19:54:28 +10:00
Quantum
f64310320a
[client] ds: add stopWaitFrame to terminate waitFrame early
...
This is used on exit to unblock the render thread.
2021-08-01 19:54:28 +10:00
Geoffrey McRae
695b7b793c
[client] main: allow 'catchup' when using jitRender
2021-08-01 19:32:01 +10:00