Geoffrey McRae
fe6339fc77
[client] egl: re-order CAS to before FSR for better results
2021-08-12 06:56:16 +10:00
Quantum
3f8c7c8d0d
[client] egl: fix buffer overflow in desktop_rects module
...
The module has been changed to support variable amount of rectangles,
so we should just allocate a VLA.
2021-08-11 21:23:13 +10:00
Quantum
543c97987b
[client] egl: remove needless precision quantifiers
...
We simply use precision mediump float; for everything. We don't actually
need highp anyways, and we don't use it for stuff like CAS or FSR.
2021-08-11 20:47:46 +10:00
Geoffrey McRae
06da52acfc
[client] egl/fsr: release consts
when no longer needed
2021-08-11 20:47:03 +10:00
Geoffrey McRae
5a2f34d71c
[client] egl/cas: release consts
when no longer needed
2021-08-11 20:42:56 +10:00
Quantum
8b2db071d8
[client] egl: precompute CAS filter constants on CPU
2021-08-11 20:38:42 +10:00
Quantum
3a1a9121eb
[client] egl: make FSR filter show inactive in config when disabled
2021-08-11 20:17:17 +10:00
Quantum
f80b67bc50
[client] egl: precompute FSR filter constants on CPU
2021-08-11 20:16:39 +10:00
Quantum
fe823b6172
[client] egl: display FSR equivalent quality mode
...
This also displays a tooltip to explain that quality can be changed by
altering guest resolution and also show the resolutions needed to achieve
each quality mode.
2021-08-11 20:05:27 +10:00
Quantum
c4c60fd330
[client] egl: update FSR filter state upon resolution change
2021-08-11 20:05:27 +10:00
Geoffrey McRae
5a5b867c73
Revert "[client] egl: make FSR detect an input size change and activate if valid"
...
This reverts commit 73f125dcc7
.
2021-08-11 20:05:07 +10:00
Geoffrey McRae
73f125dcc7
[client] egl: make FSR detect an input size change and activate if valid
2021-08-11 20:02:29 +10:00
Quantum
7e982a6658
[client] util: replace util_mergeOverlappingRects with common version
2021-08-11 19:01:52 +10:00
Geoffrey McRae
f0ea882165
[client] egl: cleanup texture filtering/post-processing
2021-08-11 18:53:36 +10:00
Geoffrey McRae
f78154d282
[client] egl: fixes to shader post-process pipeline
2021-08-11 06:31:01 +10:00
Quantum
cd5ecf3e5a
[client] egl: don't erase damage when invalidating whole window
2021-08-11 02:43:08 +10:00
Quantum
a850a1b51b
[client] egl: implement C wrappers for FidelityFX constant computation
2021-08-11 02:42:55 +10:00
Quantum
c1a362f8d3
[client] egl: handle \r character when processing #includes
2021-08-11 02:41:54 +10:00
Geoffrey McRae
127d3acd96
[client] egl: use a texel based version of textureGather for FSR
2021-08-10 14:21:46 +10:00
Quantum
ccee347740
[client] egl: don't define FSR_RCAS_F in ffx_fsr1_rcas.frag
2021-08-10 13:57:23 +10:00
Geoffrey McRae
c3a143732c
[client] egl: cosmetics
2021-08-10 13:46:48 +10:00
Geoffrey McRae
dc0b3a8d45
[client] egl: rework post process filters and add AMD FXR
2021-08-10 13:46:48 +10:00
Quantum
3b751a2017
[client] egl: perform full copy for framebuffer textures after resize
...
This prevents the code from using damage rectangles that are no longer on the
screen, causing an out-of-bounds write.
2021-08-10 13:42:25 +10:00
Geoffrey McRae
230ce81eb8
[client] egl: allocate space for the initial texture dimensions
...
This fixes a buffer overrun when writing to the dimensions array
2021-08-10 09:41:56 +10:00
Geoffrey McRae
e707f9d933
[client] egl: enable ffxCAS if disabled and the sharpness is changed
2021-08-10 07:56:24 +10:00
Geoffrey McRae
64ed383128
[client] egl: re-process the texture and invalidate if a setting changed
2021-08-10 07:51:23 +10:00
Quantum
685499a0e0
[client] egl: prefer gawk and mawk when building shaders
...
We'd rather use known versions of awk if possible for ease of troubleshooting.
2021-08-10 06:17:38 +10:00
Quantum
705250f23d
[client] egl: correct assign to gl_Position in basic.vert
...
gl_Position is expected to be using homogeneous coordinates, which requires
w to be a coordinate scale factor, usually 1.0. z should also be set in order
for depth to be well-defined. Therefore, we should set gl_Position.zw to
vec2(0.0, 1.0).
2021-08-10 06:10:42 +10:00
Quantum
eb680086ef
[client] egl: correctly use flexible array members for BindData
...
Array size of 0 is a gcc extension, the standard C is not declaring a size.
2021-08-10 06:10:42 +10:00
Geoffrey McRae
cc3494437a
[client] egl: add ffx cas configuration options
2021-08-10 01:10:08 +10:00
Geoffrey McRae
37faccd014
[client] egl: allow ffxCAS sharpness configuration
2021-08-10 00:54:54 +10:00
Geoffrey McRae
30e6a258ad
[client] egl: cleanup pointer mess in egl_desktopInit
2021-08-10 00:48:41 +10:00
Geoffrey McRae
d24bc75519
[client] egl: added missing vertex shader file
2021-08-09 23:14:01 +10:00
Geoffrey McRae
92de467edc
[client] egl: add ffx_cas post process filter
2021-08-09 23:12:58 +10:00
Quantum
9b1d03fcfe
[client] egl: implement #include for shaders with awk
2021-08-09 22:04:07 +10:00
Geoffrey McRae
4eda01949d
[client] egl: give pp filters the dimensions of all prior textures
2021-08-09 22:02:07 +10:00
Geoffrey McRae
062d18d5fa
[client] egl: don't allocate the texture ringbuffer unless needed
2021-08-09 18:28:52 +10:00
Geoffrey McRae
04a54598b3
[client] egl: set a default scale for textures without filters
2021-08-09 18:27:10 +10:00
Geoffrey McRae
79dcc6d4f1
Revert "[client] egl: set a default scale for textures without filters"
...
This reverts commit 57a74c156b
.
Pushed a ton of changes that should not have been pushed
2021-08-09 18:26:30 +10:00
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
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
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
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
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
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
9f6ad864ed
[client] egl: correct letterbox area clear attempt #2 :)
2021-08-07 03:44:47 +10:00
Geoffrey McRae
e5a138d854
[client] egl: properly clear the letterbox areas
2021-08-07 03:28:52 +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
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
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
6c44bbb53e
[client] egl: use a ui switch for damage display instead of a keybind
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
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
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
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
Geoffrey McRae
14839dc54e
[client] egl: there should only ever be a single sync object
2021-08-03 00:47:59 +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
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
Geoffrey McRae
f8e1ab8f31
[client] renderers: add new needs_render method to the interface
...
With jitRender the renderer needs to tell the main application if it
needs to be rendererd, such as during the initial splash screen fade
out.
2021-08-01 18:18:08 +10:00
Quantum
b3b71d6f02
[client] egl: fix cursor handling when invalidating
...
If we invalidate the window, we used to not update this->cursorLast, and
this causes us to lose track of the cursor. Now we update this->cursorLast
unconditionally, and this fixes the issue.
2021-08-01 17:28:40 +10:00
Quantum
b9a7ce17fe
[client] egl: use queue of damages
...
This prevents damage from being overwritten when frames are received
faster than could be rendered.
This implementation cycles between two queues, removing all need for
memory allocation.
2021-08-01 12:11:54 +10:00
Quantum
a980cd9406
[client] egl: log when EGL_EXT_image_dma_buf_import is unavailable
2021-07-29 17:03:44 +10:00
Quantum
6c64965703
[client] egl: make functions that do not need linking static
2021-07-29 16:54:56 +10:00
Quantum
134829cbf2
[client] imgui: make graph y-axis configurable
...
The default of [0, 50] makes sense for FPS/UPS graphs, but does not for
things like the import graph. The latter should not take more than 5 ms
for sure.
This commit allows the min/max y-axis value to be specified when registering
the graph.
2021-07-29 15:54:15 +10:00
Quantum
009ae02e32
[client] egl: add graph tracking time taken to import frame
...
This tracks the time taken to load the frame buffer into an OpenGL texture.
2021-07-29 10:08:52 +10:00
Quantum
120fe63c0f
[client] egl: keep x/y coordinates of cursor rectangle non-negative
...
This shifts the rectangles upwards instead of cutting off the rectangles,
but it keeps the code simple.
2021-07-26 07:56:46 +10:00
Quantum
181b165a4b
[client] egl: generate correct cursor damage with cursor rotation
2021-07-25 17:35:29 +10:00
Quantum
d9cdc8d26c
[client] egl: rotate damage rectangles according to client side rotation
2021-07-25 16:56:48 +10:00
Quantum
d0722349e6
[client] egl: make damage overlay support rendering rotated rectangles
2021-07-25 16:56:48 +10:00
Geoffrey McRae
60a58d4d8d
[client] all: make it possible to signal full window invalidation
...
Now that we are drawing with damage rects, when the window is hidden and
then exposed the window may not get fully redrawn. This provides
`app_invalidateWindow` for the display server backend to call when the
screen needs a full redraw.
2021-07-25 15:29:29 +10:00
arcnmx
3b37898eb2
[all] use cmake FindPkgConfig IMPORTED_TARGETs
2021-07-24 12:35:48 +10:00