Commit graph

1243 commits

Author SHA1 Message Date
Pierre-Loup A. Griffais
29eaa16785 wlserver: greatly simplify touch handling
Remove drag stickiness, delay before click, etc.

Also let the session specify which button is pressed on touch, if any.
2020-04-01 19:13:58 -07:00
Roman Gilg
f416279a1c Revert "feat: use global pointer position variable"
This reverts commit 0f8d679994.
2020-04-01 22:42:15 +02:00
Roman Gilg
5868f20502 Revert "feat: add relative pointer and constraints support"
This reverts commit a4fa525255.
2020-04-01 22:42:09 +02:00
Roman Gilg
b23b5b7189 Revert "refactor: unify pointer movement"
This reverts commit d4361f4649.
2020-04-01 22:41:58 +02:00
Roman Gilg
c2058733e3 Revert "refactor: remove unneeded cursor query functions"
This reverts commit 9547ec9a15.
2020-04-01 22:41:50 +02:00
Roman Gilg
4565766cc5 Revert "refactor: remove unneeded cursor calls on paint"
This reverts commit be1ff3d903.
2020-04-01 22:41:40 +02:00
Roman Gilg
42a268bd27 refactor: clean up layers properties loop
Restructure the loop a bit to have less code repetition and make it easier to
understand.
2020-03-10 02:02:40 +01:00
Roman Gilg
8833e07618 feat: add layer debugging via libliftoff log
Activate libliftoff's internal log when layers are enabled and the parameter
'd' is provided.

Note: this needs some patches to libliftoff to make the debug readable that I
have proposed upstream.
2020-03-10 02:02:40 +01:00
Roman Gilg
d17f234738 fix: continue layering when fbs available
Trying to layer onto planes should be continued when fb ids are set and
not the other way around. Here the assert also failed when only having
one layer.
2020-03-10 02:02:40 +01:00
Roman Gilg
be1ff3d903 refactor: remove unneeded cursor calls on paint
It is enough to get the global cursor location when repainting it. So we do not
need to query the relative position. If later on we find this is not right we
should be still able to get the relative position from the surface position
instead of calling into XWayland.

Also it is not expected and apparently unnecessary to move the cursor in the
paint function. Therefore remove this call too.
2020-03-10 01:55:58 +01:00
Roman Gilg
9547ec9a15 refactor: remove unneeded cursor query functions
With cursor position going through global variables we do not need to query the
global position anymore. Remove the MouseCursor function for that.

Furtheron the relative position getter is also not necessary, but let's remove
this one in a separate commit.

This commit also adds a debug line for debugging flaky focus changing.
2020-03-10 01:55:58 +01:00
Roman Gilg
d4361f4649 refactor: unify pointer movement
In nested mode we can use the same code path as in drm mode now.
2020-03-10 01:55:58 +01:00
Roman Gilg
a4fa525255 feat: add relative pointer and constraints support
For now only available on drm backend. For nested there is currently a
different workaround active making it work.

Closes #19
2020-03-10 01:55:58 +01:00
Roman Gilg
0f8d679994 feat: use global pointer position variable
Instead of going through the X11 connection just set the pointer position
directly via global variable.
2020-03-10 01:55:58 +01:00
Roman Gilg
f7d815a203 refactor: add cursor class
Puts all cursor relevant code into a single class. Preparation for getting
cursor movement directly through libinput.
2020-03-10 01:55:58 +01:00
Roman Gilg
920fe8bd8f style: remove trailing whitespace
Many code editiors remove trailing whitespace automatically making patches
difficult since often unrelated lines get changed with the same commit.

So remove the whitespace in the steamcompmgr file all at once in this separate
commit.
2020-03-10 01:55:58 +01:00
Oschowa
2a74683c11 Use build in glslangValidator functionally to generate shader include
file.
This removes the xxd dependency.
2020-01-28 21:30:20 +01:00
Pierre-Loup A. Griffais
bc39b20a8f steamcompmgr: fix rare crash when starting games (DOOM in this case). 2020-01-27 23:18:34 -08:00
Pierre-Loup A. Griffais
1bcd0bd930 Vulkan: fix a nasty race.
We could garbage-collect fences before/during their wait.
2020-01-27 22:46:38 -08:00
Pierre-Loup A. Griffais
578849e429 Vulkan: fix validation errors. 2020-01-27 22:32:16 -08:00
Pierre-Loup A. Griffais
06db3d903a steamcompmgr: close commit fd if no matching window.
That was probably a leak on app exit before?
2020-01-27 21:24:10 -08:00
Pierre-Loup A. Griffais
7e4b1d971c steamcompmgr: cleanup check_new_wayland_res.
Now that we can process everything in the queue, we can make the flow
a bit simpler.
2020-01-27 21:08:47 -08:00
Pierre-Loup A. Griffais
7df0b8655a steamcompmgr: add detail to fence debugging. 2020-01-28 04:10:58 +00:00
Pierre-Loup A. Griffais
e72724f050 embedded: fix a crash on startup in Portal.
Trying to push a new frame with no valid contents would send an
uninitialized texture handle to the Vulkan renderer.
2020-01-27 22:21:12 +00:00
Pierre-Loup A. Griffais
2b111b43dd SDL: initialize after wayland.
Otherwise the input thread can start doing wayland stuff before it's safe.
2020-01-26 17:51:27 -08:00
Pierre-Loup A. Griffais
b4893840eb vblank: more tweaks, align to DRM vblank. 2020-01-26 16:28:35 -08:00
Pierre-Loup A. Griffais
4ca73da9f6 vblankmanager: initial system to let steamcompmgr know when to repaint
For now just mark one repaint per refresh interval without any particular
alignment, as that can be hard to get in nested. We'll use the display
timing extensions for that later.

We'll have it align properly in embedded mode soon.
2020-01-26 14:59:51 -08:00
Pierre-Loup A. Griffais
5e3a9c9408 Vulkan: have a whole bunch more scratch command buffer slots
If running non-vsynced apps, we might need to keep track of 500+ in-flight
commits. Maybe make dynamic at some point?
2020-01-26 13:36:30 -08:00
Pierre-Loup A. Griffais
ca954bb237 steamcompmgr: rework how commits are handled
Keep track of a queue of commits and use the wait thread to get notified
when they're done.

Only repaint when new commits are done, not just queued.
2020-01-26 13:25:28 -08:00
Pierre-Loup A. Griffais
4f01be3bf5 Vulkan: shouldn't need to have synchronous uploads anymore. 2020-01-25 20:34:03 -08:00
Pierre-Loup A. Griffais
dfba164987 Vulkan: Remove one TODO by implementing deferred free for textures. 2020-01-25 20:31:19 -08:00
Pierre-Loup A. Griffais
9a177050e5 Vulkan: fix everything using the same command buffer.
We can't quite get away with it now that we want to kick off several
waits at the same time.
2020-01-25 19:51:11 -08:00
Pierre-Loup A. Griffais
982e61e28d steamcompmgr: add support for spewing stats into a pipe 2020-01-24 01:47:26 +00:00
Pierre-Loup A. Griffais
dde441b13f steamcompmgr: tweak focus logic to know about Steam pop-up windows
Like the standalone input configurator view.
2020-01-24 00:45:24 +00:00
Pierre-Loup A. Griffais
4079d0c785 steamcompmgr: rework a couple of things to plan for decoupling paints
- Add a commit wait thread that just waits for the work associated with
   an in-bound dma-buff is done. We'd like to be getting a fence directly
   from Wayland, but in the absence of that we'll make our own by tapping
   into implicit-sync, DX11-style. gpuvis logging of the outcome of the
   waits in the thread are consistent with the end of GPU work.

 - Rework wayland commit handoff between wlserver and steamcompmgr to let
   steamcompmgr have full access to the commit queue, letting it remove
   elements in the middle and still keep going, compared to the previous
   interface. This lets steamcompmgr get one commit per window per loop,
   for now. We should be able to kick off waits and ref/unref resources
   for all pending commits soon, with some work on the accounting first.

This should also fix an issue introduced recently where the overlay
could get really starved in embedded mode, as we were just getting
the first commit in the queue for a single frame.
2020-01-23 00:52:17 -08:00
Pierre-Loup A. Griffais
cf16f59e84 steamcompmgr: exit when subcommand exits, if there is one 2020-01-22 22:34:38 -08:00
Pierre-Loup A. Griffais
1830b53c2e steamcompmgr.cpp: rise 2020-01-22 21:50:01 -08:00
Pierre-Loup A. Griffais
74143121cd Fix instant crash on embedded from recent nested resize work. 2020-01-20 23:47:55 +00:00
Pierre-Loup A. Griffais
6183a70564 nested: toggle filter with meta+n 2020-01-20 02:04:57 -08:00
Pierre-Loup A. Griffais
4dcacf3cc1 steamcompmgr: make cursor scaling more current, remove some cruft. 2020-01-20 01:58:39 -08:00
Pierre-Loup A. Griffais
d6ff686b64 nested: make Meta+f toggle fullscreen for the output window. 2020-01-20 01:45:43 -08:00
Pierre-Loup A. Griffais
188ea49e51 nested: let the output surface be resizeable
And let the SDL window be resizeable too.
2020-01-20 01:32:54 -08:00
Pierre-Loup A. Griffais
228c5e049c We needed our threads to block SIGUSR1, not ignore it.
It's a requirement of wlroots, since it uses it to get notified of
Xwayland readiness.

Having our threads use SIG_IGN would mean that they could still get
selected to get the signal and would just discard it, as opposed to
not being in the running at all. So the more threads we added, the
least chance we had of the notify function running consistently at
startup.

Now seems to consistently agree that XWayland is up every startup.
2020-01-18 21:08:37 -08:00
Pierre-Loup A. Griffais
3ca59feabd inputsdl: grab cursor when focused, send mouse input through X.
This more or less makes everything pretty playable.
2020-01-18 20:37:11 -08:00
Pierre-Loup A. Griffais
946b49c7a6 steamcompmgr: fix bug from 2013 with cursor hiding.
We don't want to unhide the cursor in the small period of time where we
don't have a foxued window.
2020-01-18 18:12:39 -08:00
Pierre-Loup A. Griffais
6481e1d777 rendervulkan: offset rendering a bit to avoid blurry text.
This isn't a perfect fix, see comment.
2020-01-18 17:35:23 -08:00
Pierre-Loup A. Griffais
303c702547 rendervulkan: it's 2020, surely GPUs understand integers by now?! 2020-01-18 17:24:56 -08:00
Pierre-Loup A. Griffais
7b2220003c Let it take a command to run in its DISPLAY after "--". 2020-01-18 17:14:49 -08:00
Pierre-Loup A. Griffais
90fa0770e8 nested: plumb some more output options.
Output window size, scaling filter, border.

TODO: make output dynamically resizeable, and some settings reloadable.
2020-01-18 16:05:19 -08:00
Pierre-Loup A. Griffais
19e2e511b6 sdlinput: nested keyboard support. 2020-01-18 15:10:14 -08:00
Pierre-Loup A. Griffais
b306714f3c drm: always set DRM_MODE_ATOMIC_ALLOW_MODESET for now.
That seems to make DC happier when we change the src and dst rects.
2020-01-18 03:40:51 +00:00
Pierre-Loup A. Griffais
bb52b60301 wlserver: some more basic tweaks for touch logic.
Add primitive hold-n-drag.
2020-01-17 03:27:55 -08:00
Pierre-Loup A. Griffais
3f51eb4d25 steamcompmgr: fix a bug where the cursor would only unhide if clicked
Ideally we'd get actual MotionNotify and redraw if needed, but probably
grabbed in this case. This was Shadowverse.
2020-01-17 02:45:43 -08:00
Pierre-Loup A. Griffais
56b2aa2d92 wlserver: wire kb+mouse+touch input coming from wlr, mainly libinput.
Add the concept of a cursor coordinate when that initializes when focusing
a surface.

Put some super primitive tap to left-click emulation in there for now.
2020-01-17 02:36:53 -08:00
Pierre-Loup A. Griffais
3eacb24d01 steamcompmgr: fix launchers/etc not displaying at first.
If a window already has a buffer attached by the time we figure out it
exists and sets its role, we missed the initial commit and will never
get it. For windows that animate interactively, that's fine, as we'll
get another one soon enough, but 2D apps like launchers repaint on
demand, so it's not fine there.
2020-01-17 00:45:21 +00:00
Pierre-Loup A. Griffais
bb945da160 steamcompmgr: Remove skipping all frames if no main plane.
If the base game is stuck before having rendered anything, we still want
to show overlay layers when they animate so the user can get out.

Let us composite and the empty texture should take care of it.
2020-01-15 22:58:22 -08:00
Pierre-Loup A. Griffais
dd6d0d5ad8 drm: drmModeAtomicCommit can return -ENOSPC, make non-fatal.
It's non-fatal, presumably we messed up source coordinates for that flip
but needs root-causing. Can happen in the very early loading of MGSV:TPP.

Fix a bug with the new flip lock where non-fatal flip errors would hang.
2020-01-15 18:31:05 -08:00
Pierre-Loup A. Griffais
c0a793e290 wlserver: handle EINTR in the main loop epoll.
Fixes the server going away when we need it most, or when attaching GDB.
2020-01-15 17:48:20 -08:00
Pierre-Loup A. Griffais
1b0f273f21 steamcompmgr: flush output to startup pipe with a newline. 2020-01-15 15:38:21 -08:00
Pierre-Loup A. Griffais
bdbdabe19b steamcompmgr: add option to send DISPLAY back to invoker.
So the session script can read it back and know when gamescope is ready.
2020-01-14 23:51:22 -08:00
Pierre-Loup A. Griffais
e1c4298d2a Rename project and executable to gamescope.
We're a superset of steamcompmgr now, but have a wider scope, so new
name to reflect it.
2020-01-14 17:35:36 -08:00
Pierre-Loup A. Griffais
83ccb4d74d composite.hlsl: This seems a bit faster on Raven? 2020-01-13 22:42:12 -08:00
Pierre-Loup A. Griffais
901103af3f wlserver: anti-fd exhaustion measures.
If we only take the first commit, we leave a bunch in the queue, which
makes us that much more likely to run out of FDs when importing the
myriad of buffer referenced coming from a non-vsynced client. Fixes
crashes with vblank_mode=0 glxgears after the recent changes.

We were always subject to such crashes, just getting lucky/fast before.
2020-01-13 22:09:55 -08:00
Pierre-Loup A. Griffais
fb49601138 steamcompmgr: use next wayland buffer.
Not last. Prevents non-vsynced clients from getting too far ahead.
2020-01-13 21:14:02 -08:00
Pierre-Loup A. Griffais
94ecdfdc6e drm: more logging. 2020-01-13 20:57:39 -08:00
Pierre-Loup A. Griffais
1a1fa8629f drm: workaround for flip failures launching The Witcher 3.
Tries to flip a 1x1 surface, apparently amdgpu doesn't like it

In a liftoff future it would surely detect that and let us know.
2020-01-13 20:19:17 -08:00
Pierre-Loup A. Griffais
8827ea367e drm: re-add non-liftoff path, with logging. 2020-01-13 20:18:28 -08:00
Pierre-Loup A. Griffais
3a17f3eed7 steamcompmgr: small fixes to not fix damage until we really painted. 2020-01-13 18:53:29 -08:00
Pierre-Loup A. Griffais
e637bdad10 steamcompmgr: gpuvis frame cadence debugging.
Now that things are generally more stable, let's take a look.
2020-01-13 18:45:53 -08:00
Pierre-Loup A. Griffais
c77df96523 rendervulkan: always write all layers in the descriptor.
Use an empty dummy texture for unbound slots, as the driver can't know
what the shader will sample from.

Also remove any sort of implicit attempts at compaction of slots.
2020-01-09 02:34:54 +00:00
Pierre-Loup A. Griffais
807b24f731 steamcompmgr: Added a debug option to always composite.
This way we never flip anything but our own buffers, to facilitate bug
isolation.
2020-01-08 02:40:14 +00:00
Pierre-Loup A. Griffais
6efedbb587 DRM: Protect ourselves against a race condition in flip accounting.
The flip handler could try to deref before we had added the refs.
2020-01-08 01:38:36 +00:00
Pierre-Loup A. Griffais
2092afd078 steamcompmgr: we weren't hiding the Steam window anymore.
Also fix the mouse focus edge condition to actually be correct.
2020-01-07 23:39:24 +00:00
Pierre-Loup A. Griffais
5598fcfa57 steamcompmgr: Handle early WL_SURFACE_ID notification.
Untested for now as it only happens when we lose a race, leaving a
printout to confirm if it worked in the wild later.
2020-01-07 19:50:34 +00:00
Pierre-Loup A. Griffais
94c4c05e40 Reconcile new cursor DRM code and nested path. 2020-01-06 20:16:27 -08:00
Pierre-Loup A. Griffais
4d6602ba4b DRM: Make liftoff layers conditional for now.
Can't get them to be useful, might need library and amdgpu DC fixes.
2020-01-06 19:36:20 -08:00
Pierre-Loup A. Griffais
6b3e2ddf68 DRM: multi-plane support via libliftoff.
Import libliftoff as subproject and plumb our planes through it.

Wait for a flip to complete immediately after queuing it for now.

Also immediately wait for cursor image uploads, as we don't have to
do Vulkan rendering anymore after queuing an upload.

Cursor shows up with format hack, but is badly corrupt. We might need
to use a DRM dumb_fb rather than going through the same Vulkan image.

Alpha bits of surfaces are ignored again, need to make Steam select
an ARGB visual for overlay windows, probably.

Setting up the "alpha" plane property somehow makes overlays not
show up at all despite liftoff happily letting us go with scanout.
2020-01-05 22:19:04 -08:00
Pierre-Loup A. Griffais
a8d96fb227 steamcompmgr: let's go with -e instead, for embedded.
As opposed to nested.
2020-01-05 22:19:03 -08:00
Pierre-Loup A. Griffais
d5e90511d5 rendervulkan: Fix corruption at the bottom of the compute path.
Thread group size doesn't have to be aligned with image dimensions, as
is the case with 16x16 on a 1920x1080 output.
2020-01-05 19:01:44 -08:00
Pierre-Loup A. Griffais
0565c32a55 steamcompmgr: Don't composite the cursor when it's empty. 2020-01-05 18:10:15 -08:00
Pierre-Loup A. Griffais
c4321e54b2 rendervulkan: Some attempted fixes, in vain.
Only set implicit_sync on in-bound buffers, we'll sync our scanout image
ourselves by exporting the fence and passing to DRM, and flushing.

The fence export actually fails, so leave it commented our for now.

Flushing also doesn't do anything, the bottom of our scanout image is still
corrupt when scanning out to DRM.
2020-01-05 17:56:59 -08:00
Pierre-Loup A. Griffais
db94055511 Fix DRM output, initializing SDL apparently breaks it.
We don't want SDL input in the non-nested case at any rate.
2020-01-05 04:45:45 -08:00
Pierre-Loup A. Griffais
83683d270c steamcompmgr: Add command-line argument for relying on Steam GameIDs.
So we can easily test single-app scenarios by generating placeholder
ones. Will also make it more robust by using Xres1.2, which should
remove the need for Alkazar's patch for Dead Cells and other apps that
don't get tagged right by the current overlay.
2020-01-04 19:37:04 -08:00
Pierre-Loup A. Griffais
97aac0bbf9 Add some code to detect if the cursor becomes fully hidden.
That should come in handy for auto-grabbing in the nested case.
2020-01-04 19:19:54 -08:00
Pierre-Loup A. Griffais
8a8eea1df3 Don't like this 2013 cursor rescaling logic anymore.
It worked well enough with the Big Picture cursor, and seeing it change
scales between Steam and a game was sometimes jarring, but it doesn't
compute hotspot offset right, and scaling cursors doesn't come out great
a lot of the time.
2020-01-02 19:43:10 -08:00
Pierre-Loup A. Griffais
d357278b98 Add SDL input handling in the nested case, plumb basic mouse stuff.
Relative mouse broken right now.
2020-01-02 19:26:53 -08:00
Roman Gilg
b11f46d4e7 fix: handle terminate better 2020-01-02 00:00:34 +01:00
Pierre-Loup A. Griffais
81e5e1b2f8 steamcompmgr: re-add cursor painting.
We're in sole control of the cursor now, there's no "fake" cursor anymore.

Don't attempt to hide it in X, it doesn't matter.

Also Vulkan rendering of a texture populated from arbitrary bits.

Also add the third layer to the shader... Badly needs clean-up.
2020-01-01 23:36:58 +09:00
Pierre-Loup A. Griffais
898e653c39 rendervulkan: Use FIFO present mode for now in the nested case.
That's a good enough proxy for a real vblank cadence and helps my Envy
not catch on fire.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
010ba40691 wlserver: Flush clients on any unlock.
This should make steamcompmgr messages actually go when we send them.

We're pulling too many frames out of "vsynced" clients now, need to instill
a real frame cadence based on vblank and notify based on that.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
c70e71d1e2 I think I've come to terms with not building wlr stuff as C++.
Might as well clean up some of the initial madness.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
7bf4d963b4 x11: With great power comes great responsibility, I guess.
The WL_SURFACE_ID messages force us to register SubstructureRedirectMask,
which means we have to participate in a bunch more stuff before windows
will resize and reconfigure properly. This fixes a bunch of problems with
real games.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
56c1fd217e wlserver: I think that worked, now make it not destroy a core. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
24c10095e5 wlserver: Add naive locking to try to see if that fixes hangs for good.
Change the wl event loop to busy-wait for now as that's easiest to make
unlock periodically.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
2a9a4c3993 steamcompmgr: disable fadeout for now.
It causes use-after-free bugs since the current logic is based
on GLX TFP hold/release semantics, which don't apply anymore.

Reinstate later.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
4209391fe1 Vulkan: Can have a normal-sized descriptor pool now. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
7f4d791c20 Vulkan: free imported textures, removing the small last leak of GTT.
Some more leading whitespace for good measure.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
85cab97737 Vulkan: try to collate output-specific things together.
Main motivation was to have a clean-ish spot to add a ping-pong
command-buffer instead of allocating one every frame. Leaking
significantly less GTT now.

Also add some more leading whitespace courtesy of Kate.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
97c81ee9fc Helper HUD to know if we're compositing layers with the GPU or not. 2020-01-01 15:30:38 +09:00
Roman Gilg
b966a74e0c feat: add signal handlers 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
60ce06b4cd Some primitive rotation support as a test. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
2934681b56 Some more GL leftover stuff was hiding. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
ed52f586af Add more float comparisons. Every project should have at least 4. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
8db29e4c24 Make direct DRM flipping match composite description.
Also overload VulkanPipeline_t some more. :/
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
c186dc28cf Make all output paths coexist in harmony. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
7d97f096d4 Don't need the workaround to recreate overlay ARGB pixmaps anymore. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
46427fd810 Vulkan: just cache various samplers for now, use a single descriptor.
Caching descriptors is useless when we're importing different images
every draw.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
9d49e1a682 Vulkan: descriptor cache.
Doesn't help running out right now, as the DMA-BUFs from a new app
frame get imported as different Vulkan textures. Not sure how to
ensure continuity across several sightings of the original swapchain
images yet.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
0915d864c0 Vulkan: compress layer slots into contiguous texture slots.
Otherwise we can crash if what we get passed has holes, like when the
main layer loses its texture abruptly but overlays are still on top of it.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
30d8582b62 Ding dong the witch is dead! 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
d3e0b3c963 Select a non-SRGB swapchain format to fix washed out colors. Thanks Bas! 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
9d359e3213 I guess HLSL does weird padding with float2s?
With this and some more fixes, output pipeline looks pretty much perfect.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
ec34dad8a9 Plumb steamcompmgr window painting to Vulkan compute. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
622f198549 Fix swapped channels on glxgears rendering. Still super dark though. 2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
8e4a4101f5 Vulkan: set scanout bit on memory for imported images.
As Bas points out, their original WSI allocated them expecting them to
get scanned out, so this has a better chance of describing their memory
layout in the absence of full modifiers. This fixes corruption for me
on Vega at least, but glxgears colors are swapped still.
2020-01-01 15:30:38 +09:00
Pierre-Loup A. Griffais
bfd02982ab Kill EGL with fire, rest of GL will follow shortly.
Working nested Vulkan path now using surface from SDL2 window.

For some definition of working, tile corruption there too.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
9517ace5c0 Taking about 0.5ms at 1080p on a HP Envy Raven laptop with this.
Sometimes we're running _before_ the app according to gpuvis, beware.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
15e6809031 It helps to actually import the DRM data!
Getting glxgears-shaped tile corruption, which is closer to expectations
without real DRM modifiers.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
d7dc7b435d Vulkan: start of actual rendering code.
Getting corruption on screen at 7FPS!
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
586bc69f5f Vulkan: some surgery on image code to make it import textures as well. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
e61b20710e Enough Vulkan stuff to render to an image and flip it on screen.
No texturing yet, that's next after some surgery on the lump of code.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
2be0bdbcbb Start of Vulkan compute rendering code. Getting FBIDs (glxgears still OK). 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
df5244f547 Keep track of in-flight flips in DRM-land to defer frees of fbids if needed.
This makes output sane now for Xwayland buffers.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
1a0d25cbe2 Not sure if that fence stuff is right. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
bc7207c69d More DRM flipping/importing, getting half of glxgears on screen.
Lower half is getting eaten by something, presumably underflow as it's black.

Make EGL and DRM coexist; make ensure_win_resources safe to call regardless
of what resources we want, so outer code doesn't have to care.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
4e324dd6eb Importing into DRM. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
66511514d4 More DRM stuff, untested as of now, lifted from kmscube. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
67c5affe47 Start of some DRM plumbing, make it work again outside of X. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
4a7fe18845 Try to fix hangs in Portal when it isn't vsynced. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
a58dfdd203 Only acknowledge frame_done once per commit, otherwise we pull unwanted
frames out of thin air.

Also use dummy ClientMessage events to nudge steamcompmgr's event loop,
Expose events have a meaning and we don't want to confuse some clients.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
985d6e40a7 Use actual display name instead of relying on the environment. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
2bdbd01902 Some cleanup, 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
4a1550b7b0 steamcompmgr only makes sense in the nested X display in this scenario. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
77d0e72c69 Make commandline coexist across both sides, plumb nested size control. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
ced1d16f65 No further need for constant event debugging; command-line is now usable. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
e36f1f6c5b Fix up frame cadence ordering a bit. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
825db84b13 Make the wayland commit side master of who has valid contents.
And fix a bug that would make overlays flicker.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
306583be94 Reinstate normal GameID detection logic, so we can run Steam now. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
95e132179d Chop off some more concepts that were higher-level than I thought initially. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
11d50c1618 CHOP 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
77b4a683c0 chop chop (glxgears still works) 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
ef8f14b05e chop (glxgears still works) 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
f919e65c38 Notify XWayland surfaces when we're done with a frame from them.
And remove rootston's output render path. This seems like it was the only
strictly needed thing, frames seem to time out without that. Will probably
find bugs later.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
7e9bc2a6a0 Use patched static wlroots as a submodule and subproject.
That should help setting it up on a machine that might want to use normal
wlroots for other things. Resolve a GL symbol conflict now that we're
colocated with wlroots' dynamic loading code.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
3cf1bd219d Only do libinput if we're not hosted in X. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
3aac5b9015 Get working input, but steamcompmgr now randomly takes down my X server when
exiting.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
5bf32a3335 Use headless backend, give it a dummy output, keyboard and pointer.
I can render an app with the only GPU work coming from steamcompmgr now.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
32fe2d5bfb Register GL error callback instead of checking by hand. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
3a091e864a Process doesn't go away when closing clients anymore. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
6c04eba8c6 Allow re-import, still consume FDs that fall through the crack.
Lets glxgears animate at 60fps and doesn't leak FDs anymore.
steamcompmgr still goes down when glxgears exits.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
6dc724b2cd No idea what that was for, but it can presumably go. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
617174e4b4 Add placeholder GameID to every window so I can easily test with glxgears. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
382004513a Finish removing glX stuff, remove path_rendering stuff (with prejudice),
add some freeing of resources.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
7c4e06af94 Missed some files. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
b39c5a67d4 Hook up steamcompmgr output pipeline.
Get steamcompmgr's GL context from EGL and rip out GLX, as we need EGL to
import dma-bufs.

When new buffers are committed to surfaces, push their information to
steamcompmgr (without any feedback for now, fire-and-forget).

Can render games now.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
d740ac4d57 Windows render again now that WL_SURFACE_ID is plumbed through steamcompmgr. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
5b1154f863 Fix warnings on my setup. 2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
86efc186c5 Merge with rootston.
Enable C++ for bits of the code, but nothing that includes wlroots as that
doesn't want to build as C++.

Enable SubstructureRedirectMask mode and handle MapRequest for now; this lets
us get the WL_SURFACE_ID ClientMessages.

This uses a build of wlroots that has its internal XWM ripped out.
2020-01-01 15:30:37 +09:00
Pierre-Loup A. Griffais
9f4bc871d2 Import Debian version 1.34
steamos-compositor (1.34) brewmaster; urgency=medium

  * Small tweak to loadargb_cursor to better handle non-premult cursors
2020-01-01 15:26:44 +09:00
Pierre-Loup A. Griffais
7b43e3ff99 Import Debian version 1.32
steamos-compositor (1.32) brewmaster; urgency=medium

  * Fix a bug where cursor would be auto-hidden even when buttons held
  * Show cursor if a button gets clicked while it's hidden
2020-01-01 15:26:44 +09:00
Pierre-Loup A. Griffais
59f9261aca Import Debian version 1.31
steamos-compositor (1.31) brewmaster; urgency=medium

  * Added support for one than more overlay layers; most opaque one wins.
2020-01-01 15:26:44 +09:00
Pierre-Loup A. Griffais
840e4883a3 Import Debian version 1.30
steamos-compositor (1.30) brewmaster; urgency=medium

  * Added preliminary support for screen magnification.
  * Increase cursor hiding time to 10 seconds.
  * Fix bug while cursor would hide even when moving the mouse if a button was
    held.
2020-01-01 15:26:44 +09:00
Pierre-Loup A. Griffais
34f963a59a Import Debian version 1.29
steamos-compositor (1.29) brewmaster; urgency=medium

  * Tweaking focus and display logic in steamcompmgr to avoid event storms on newer
    X servers. It looks like Damage semantics changed on Xserver 1.16 and we were
    getting unexpected events after XDamageSubtract().
2020-01-01 15:26:44 +09:00
John Vert
601e49f2e5 Import Debian version 1.27 - sidestep to Brewmaster
steamos-compositor (1.27) brewmaster; urgency=medium

  * depend on libudev1 instead of libudev0

steamos-compositor (1.26) brewmaster; urgency=medium

  * compilation fixes

steamos-compositor (1.25) brewmaster; urgency=medium

  * fix missing tab in debian/rules, change Build-Depends from automake to automake1.11
2020-01-01 15:23:18 +09:00
Pierre-Loup Griffais
d740313b06 steamcompmgr documentation fix. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
7c401cd538 SteamOS compositor v1.24 with XCOM fix. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
33a5f82916 SteamOS compositor beta update. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
8ae95f1f37 [SteamOS compositor] Fix overlay flickering problem. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
acbd2c8d7c Fix random flash of corruption when first presenting the overlay or a notification 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
e512d3ee1b SteamOS compositor 1.19 with black screen fix for MS games on Intel graphics. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
c26d9e7687 SteamOS compositor 1.18 with hitching fix on toast notifications. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
8ae6046bad SteamOS: add udev_is_boot_vga tool to detect hybrid configs 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
a325bad986 steamcompmgr 1.16; fixes "CID the Dummy". 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
a50620bace SteamOS: Always sync to vblank to fix tearing on AMD. 2019-09-09 11:02:32 -07:00
Pierre-Loup Griffais
b0fd3a75d5 SteamOS: fix double cursor when game exiting. 2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
8ed08641d4 SteamOS: when any of the Steam windows are invisible, completely halt their rendering.
Can't have a WebM video playing on a halted window or the decoder starts spinning waiting for the renderer.

CR: John McCaskey
2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
503b35b547 steamos-compositor 1.14 2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
967feaabe5 SteamOS compositor 1.12 with Bard's Tale, Long Live the Queen fixes. 2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
1fc30b7e60 SteamOS compositor 1.10 with mouse fixes for Superbrothers and scaled
cursors.
2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
ececbafa73 SteamOS compositor 1.8
SteamOS modeswitch-inhibitor 1.7

Changelogs:

steamos-compositor (1.8) alchemist; urgency=low

  * Rearm ignore warp count when hiding cursor to prevent spurious appearances.
  * Work around X server bug 69198 by warping the cursor back into our window
    if it escapes.
  * Disable DPMS and the X screensaver for now in the SteamOS session.

steamos-modeswitch-inhibitor (1.7) alchemist; urgency=low

  * Correct interposer open location to account for new library name.
2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
12446b9d88 Fix mouse input in Steam on SteamOS when desktop is smaller than 1080p. 2019-09-09 11:02:31 -07:00
johnv
aa59866bc5 Add loadargbcursor program 2019-09-09 11:02:31 -07:00
johnv
92f5394b78 add debian package build files 2019-09-09 11:02:31 -07:00
Pierre-Loup Griffais
e0135b2777 SteamOS:
- add support for global overscan compensation, controlled with a root window property; pending tenfoot wizard to set it up
 - present the cursor with the same visible size as in Steam or the overlay, no matter what scale ratio is being applied to the game
2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
639618330f SteamOS: Fix more instances of cursor showing up when we don't want it. 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
5a11ba7646 SteamOS: refactor cursor management to allow the compositor to hide the cursor when not being moved for a period of time, like Tenfoot does. 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
6f3be23b46 SteamOS: Queue an Expose event per frame to never block when there aren't any other events going on; this lets us always smoothly fade to windows that aren't animating. When not in a fade paint_all() returns early without producing a frame and the behavior is the same as before. 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
3d43811f37 Fix overlay on games that don't animate at all, like DosBOX titles sitting at the menu. The fade in and out is still not smooth in these cases and pending investigation, but it looks like Steam is blocked on the overlay IPC pipe instead of pumping frames, which has the side effect of setting the opacity that is needed for the smooth fade-in. 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
21b4b1f7d5 SteamOS compositor workaround for Thomas was Alone; it can't create the game window FBconfig with its own visual, but it succeeds with the root visual. 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
959693bd50 Conditionalize extension usage and grab their entrypoints with GetProcAddress. 2019-09-09 11:02:30 -07:00
johnv
8e98e9ab4a integrate Pierre's latest 2019-09-09 11:02:30 -07:00
johnv
83999cae2f make it build with autotools 2019-09-09 11:02:30 -07:00
Pierre-Loup Griffais
e106321c45 Initial implementation of a compositor for the SteamOS console session.
Used xcompmgr as a starting point, and mostly rewrote everything.

Unlike xcompmgr this is also a window manager.
2019-09-09 11:01:59 -07:00