Commit graph

534 commits

Author SHA1 Message Date
Simon Ser
0c99a3c09d Require planes to have a type property
This is guaranteed by DRM core.
2021-02-01 14:22:03 +01:00
Simon Ser
91e7ca45fc Introduce a helper to get a property value
This will be useful for other properties, like IN_FORMATS.
2021-02-01 14:18:26 +01:00
Simon Ser
7f65dedbab Fix indentation in get_plane_id 2021-02-01 12:26:50 +01:00
Simon Ser
9b780b48db Use no-op backend for output
This avoids needlessly creating buffers for an headless output we won't
use, and will allow us to more easily replace the headless backend with
a custom renderer in the future.
2021-02-01 10:24:39 +01:00
Simon Ser
c9acfb5a68 Allow SDL to run in pure Wayland mode 2021-01-29 18:33:18 +01:00
Simon Ser
078f7823ba Bail out if drmSetClientCap(ATOMIC) fails
And remove extra UNIVERSAL_PLANES cap: this is implicitly enabled
by ATOMIC.
2021-01-29 18:20:21 +01:00
Simon Ser
cf8cf60a37 Remove ALLOW_MODESET workaround
This is no longer needed as of Linux 5.10.

Closes: https://github.com/Plagman/gamescope/issues/67
2021-01-05 15:17:16 +01:00
Simon Ser
072599c037
Stop blocking SIGUSR1
wlroots doesn't use SIGUSR1 for Xwayland startup anymore, so we can
remove the per-thread signal handlers.
2020-12-16 11:52:28 +01:00
Simon Ser
fbc6bd0c08
Update wlroots and libliftoff 2020-12-16 11:52:28 +01:00
Simon Ser
131514ecb8 steamcompmgr: allocate cursor buffer on heap
This fixes a Clang failure, and ensures we don't blow up the stack on
big cursor sizes.

Closes: https://github.com/Plagman/gamescope/issues/140
2020-12-16 11:43:04 +01:00
Simon Ser
58be7270d6
readme: replace Mesa commit reference with version number
d19bc94e4eb9 was released in Mesa 20.3.
2020-12-11 12:51:15 +01:00
Simon Ser
8e3ca65394
readme: add build instructions 2020-12-11 12:48:03 +01:00
Simon Ser
83900acb11 Create a linear buffer for cursor
The cursor plane needs to be linear on amdgpu.
2020-12-11 12:39:00 +01:00
Roman Gilg
ceeef3567d Use DRM_CAP_CURSOR_{WIDTH,HEIGTH} for cursor buffer
Hardware often has cursor plane limitations for the buffer size.

Co-authored-by: Simon Ser <contact@emersion.fr>
2020-12-11 12:39:00 +01:00
Simon Ser
85ba5c6fe9
Revert "sdlwindow: grab mouse when gaining focus"
This reverts commit 2922d96308.

Testing this again, it doesn't seem like this helps.
2020-11-20 15:55:48 +01:00
Pierre-Loup A. Griffais
c9d0b5db4c rendervulkan: fix nLayercount == k_nMaxLayers crash regression.
From spec constant work.

https://github.com/Plagman/gamescope/issues/128
2020-11-12 22:14:34 -08:00
Pierre-Loup A. Griffais
5fbd02b99c steamcompmgr: separate input focus from display focus (main layer)
Also add STEAM_INPUT_FOCUS prop interface to hijack focus for overlay layers
without having to resort to hooking games for input.
2020-11-12 21:48:08 -08:00
Simon Ser
9f64986fe3 drm: pass commit flags to libliftoff
We need to pass ALLOW_MODESET when we mean to set a mode, otherwise
libliftoff will always fail its test-only commits.
2020-11-12 20:48:15 -08:00
Simon Ser
d836e4d3ee drm: don't reset bFirstSwap on error 2020-11-12 20:48:15 -08:00
Simon Ser
89af709906 Split drm_prepare into basic/liftoff sub-functions
Instead of handling both cases in a single function, split the work of
populating the atomic request in two new functions, and keep the common
bits in drm_prepare.

Shouldn't have any functional change.
2020-11-12 20:48:15 -08:00
Simon Ser
a62740e393 Rename drm_can_avoid_composite to drm_prepare
drm_can_avoid_composite doesn't merely checks whether we can avoid
composition: it also prepares a pending atomic request. It's always
necessary to call this function before drm_atomic_commit.

Rename the function to make this clearer.
2020-11-12 20:48:15 -08:00
Simon Ser
8abe0c0868
Bump wlroots subproject to 0.12.0 2020-11-10 12:13:55 +01:00
Simon Ser
a2e071c557
steamcompmgr: read initial NET_WM_STATE value
Before the window is mapped, the client can set the initial NET_WM_STATE
directly in the window property. After the window is mapped, the client
must use a client message and shouldn't touch the property anymore.
2020-11-10 10:13:51 +01:00
Simon Ser
ea1b5368cb
steamcompmgr: handle both props in NET_WM_STATE message 2020-11-10 10:13:51 +01:00
Simon Ser
cce9981b57
steamcompmgr: handle NET_WM_STATE_TOGGLE 2020-11-10 10:13:51 +01:00
Simon Ser
2922d96308
sdlwindow: grab mouse when gaining focus
Sometimes we hide our window and show it again after some time.
SDL_SetRelativeMouseMode doesn't seem to properly cope with this, at
least on my setup.
2020-11-09 17:54:34 +01:00
Pierre-Loup A. Griffais
6cc28f8d7b
Update README.md 2020-11-02 10:45:22 -08:00
Simon Ser
cd31090733
rendervulkan: sanity check queue with vkGetPhysicalDeviceSurfaceSupportKHR
VUID-VkSwapchainCreateInfoKHR-surface-01270(ERROR / SPEC): msgNum: -1585220531 - Validation Error: [ VUID-VkSwapchainCreateInfoKHR-surface-01270 ] Object 0: handle = 0x628000040100, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xa183744d | vkCreateSwapchainKHR(): pCreateInfo->surface is not known at this time to be supported for presentation by this device. The vkGetPhysicalDeviceSurfaceSupportKHR() must be called beforehand, and it must return VK_TRUE support with this surface for at least one queue family of this device. The Vulkan spec states: surface must be a surface that is supported by the device as determined using vkGetPhysicalDeviceSurfaceSupportKHR (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-VkSwapchainCreateInfoKHR-surface-01270)
2020-10-23 17:37:58 +02:00
Simon Ser
e1879015bd
rendervulkan: log when SDL_Vulkan_CreateSurface fails 2020-10-23 17:32:28 +02:00
Simon Ser
f6fb47ad12
Explicitly enable VK_KHR_get_physical_device_properties2
VUID-vkCreateInstance-ppEnabledExtensionNames-01388(ERROR / SPEC): msgNum: -437968512 - Validation Error: [ VUID-vkCreateInstance-ppEnabledExtensionNames-01388 ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe5e52180 | Missing extension required by the instance extension VK_KHR_external_memory_capabilities: VK_KHR_get_physical_device_properties2. The Vulkan spec states: All required extensions for each extension in the VkInstanceCreateInfo::ppEnabledExtensionNames list must also be present in that list (https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-vkCreateInstance-ppEnabledExtensionNames-01388)
2020-10-23 17:24:53 +02:00
Simon Ser
fdc8527d01
sdlwindow: improve SDL error handling 2020-10-23 15:54:39 +02:00
Jan Beich
e8c9098187 steamcompmgr: drop unused private field after f7d815a203
In file included from ../src/steamcompmgr.cpp:74:
src/steamcompmgr.hpp:75:7: warning: private field 'm_hasPlane' is not used [-Wunused-private-field]
        bool m_hasPlane;
             ^
2020-10-22 10:23:40 +02:00
Jan Beich
1488ccc923 build: abort if wlroots is too old or lacks xwayland
src/wlserver.cpp:28:10: fatal error: 'wlr/xwayland.h' file not found
 #include <wlr/xwayland.h>
          ^~~~~~~~~~~~~~~~
src/drm.cpp:666:9: error: use of undeclared identifier 'wlr_buffer_lock'; did you mean 'wlr_buffer_ref'?
                buf = wlr_buffer_lock( buf );
                      ^~~~~~~~~~~~~~~
                      wlr_buffer_ref
/usr/include/wlr/types/wlr_buffer.h:55:20: note: 'wlr_buffer_ref' declared here
struct wlr_buffer *wlr_buffer_ref(struct wlr_buffer *buffer);
                   ^
src/drm.cpp:691:3: error: use of undeclared identifier 'wlr_buffer_unlock'; did you mean 'wlr_buffer_unref'?
                wlr_buffer_unlock( fb->buf );
                ^~~~~~~~~~~~~~~~~
                wlr_buffer_unref
/usr/include/wlr/types/wlr_buffer.h:60:6: note: 'wlr_buffer_unref' declared here
void wlr_buffer_unref(struct wlr_buffer *buffer);
     ^
src/steamcompmgr.cpp:593:2: error: use of undeclared identifier 'wlr_buffer_unlock'; did you mean 'wlr_buffer_unref'?
        wlr_buffer_unlock( commit.buf );
        ^~~~~~~~~~~~~~~~~
        wlr_buffer_unref
/usr/include/wlr/types/wlr_buffer.h:60:6: note: 'wlr_buffer_unref' declared here
void wlr_buffer_unref(struct wlr_buffer *buffer);
     ^
src/steamcompmgr.cpp:2491:4: error: use of undeclared identifier 'wlr_buffer_unlock'; did you mean 'wlr_buffer_unref'?
                        wlr_buffer_unlock( buf );
                        ^~~~~~~~~~~~~~~~~
                        wlr_buffer_unref
/usr/include/wlr/types/wlr_buffer.h:60:6: note: 'wlr_buffer_unref' declared here
void wlr_buffer_unref(struct wlr_buffer *buffer);
     ^
src/steamcompmgr.cpp:2507:46: error: member access into incomplete type 'struct wlr_client_buffer'
                        result = wlr_texture_to_dmabuf( client_buf->texture, &dmabuf );
                                                                  ^
src/steamcompmgr.cpp:2506:11: note: forward declaration of 'wlr_client_buffer'
                        struct wlr_client_buffer *client_buf = (struct wlr_client_buffer *) buf;
                               ^
2020-10-21 17:40:40 +02:00
Jan Beich
50093f7ee6 build: rename _dep vars to match pkg-config name
- wlroots_static_dep is wrong when dynamically linking system wlroots
- liftoff_dep contains a typo and `lib` prefix not present in pkg-config
2020-10-21 17:40:40 +02:00
Jan Beich
fc8c8fcfa8 build: fall back to system system deps without subprojects
`git archive` and `git clone` don't include submodules by default.
Downstream with up-to-date wlroots package may want to skip
populating subprojects/wlroots.
2020-10-21 17:40:40 +02:00
Jan Beich
6250685f0a build: drop unused dependencies per -Wl,--as-needed
- pixman and libinput are only used by wlroots
- xfixes is used directly, not just via xdamage
2020-10-20 23:53:54 +02:00
Jan Beich
0416b5fe08 steamcompmgr: add missing header
src/steamcompmgr.cpp: In function 'void statsThreadMain()':
src/steamcompmgr.cpp:357:62: error: 'O_WRONLY' was not declared in this scope
  357 |                 statsPipeFD = open( statsThreadPath.c_str(), O_WRONLY );
      |                                                              ^~~~~~~~
src/steamcompmgr.cpp:357:31: error: 'open' was not declared in this scope; did you mean 'popen'?
  357 |                 statsPipeFD = open( statsThreadPath.c_str(), O_WRONLY );
      |                               ^~~~
      |                               popen
src/steamcompmgr.cpp: In function 'void steamcompmgr_main(int, char**)':
src/steamcompmgr.cpp:2559:61: error: 'O_WRONLY' was not declared in this scope
 2559 |                                 readyPipeFD = open( optarg, O_WRONLY );
      |                                                             ^~~~~~~~
src/steamcompmgr.cpp:2559:47: error: 'open' was not declared in this scope; did you mean 'popen'?
 2559 |                                 readyPipeFD = open( optarg, O_WRONLY );
      |                                               ^~~~
      |                                               popen
2020-10-20 23:53:54 +02:00
Pierre-Loup A. Griffais
667d8afc54 wlserver: was wrong clickmode, we want 4, also fix some logic issues 2020-09-23 15:22:42 -07:00
Pierre-Loup A. Griffais
4f70525fc6 wlserver: add touch passthrough support, if clickmode == 0 2020-09-18 14:59:26 -07:00
Pierre-Loup A. Griffais
3a9aa01ded
Update README.md 2020-09-17 17:22:07 -07:00
Pierre-Loup A. Griffais
405f18b08d sdlwindow: add alternate refresh rate option when out-of-focus. 2020-09-15 14:57:11 -07:00
Pierre-Loup A. Griffais
fd7a81547a vblankmanager: obey nested refresh rate if set 2020-09-15 14:46:12 -07:00
Pierre-Loup A. Griffais
afccf2a4d1 steamcompmgr: still affect LD_PRELOAD if we strip everything from it
In cases where LD_PRELOAD only contained things we wanted to strip, we
weren't actually setting the result and stripping nothing.
2020-09-14 23:57:56 -07:00
Pierre-Loup A. Griffais
cdfe50d53b steamcompmgr: unset ENABLE_VKBASALT for subcommands
We only want gamescope's outermost swapchain to get hooked, similar as the
Steam overlay.
2020-09-14 13:13:30 -07:00
Pierre-Loup A. Griffais
0619998a49 rendervulkan: fall back to compute+graphics if compute-only can't be found
Should let people run against Intel and other non-AMD Mesa GPUs.

Also force compute+graphics if vkBasalt is enabled, as it won't support
compute-only rings. Also always composite if vkBasalt is enabled, so it
applies always in embedded.
2020-09-13 15:10:23 -07:00
Pierre-Loup A. Griffais
ebdd156df6 steamcompmgr: gracefully exit stats thread if exists. 2020-09-13 00:34:36 -07:00
Pierre-Loup A. Griffais
bff790eccb steamcompmgr: gracefully exit imageWaitThread and steamcompmgr loop. 2020-09-13 00:31:52 -07:00
Pierre-Loup A. Griffais
d7a85b00d9 sdlwindow: mimic window shown. 2020-09-13 00:19:02 -07:00
Simon Ser
0a5ecb45a9 Remove hack checking the window size
We now properly detect system tray icons, no need for this hack anymore.
2020-09-12 22:26:48 -07:00
Simon Ser
08e8b048e9 Add support for the system tray protocol
Blacklist system tray icons when deciding which window should have
focus.

Closes: https://github.com/Plagman/gamescope/issues/80
2020-09-12 22:26:48 -07:00