wlserver: Add gamescope-control protocol
This commit is contained in:
parent
ab7d2a75c9
commit
ae73dd1ce0
3 changed files with 83 additions and 0 deletions
52
protocol/gamescope-control.xml
Normal file
52
protocol/gamescope-control.xml
Normal file
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<protocol name="gamescope_control">
|
||||
|
||||
<copyright>
|
||||
Copyright © 2023 Valve Corporation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next
|
||||
paragraph) shall be included in all copies or substantial portions of the
|
||||
Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
</copyright>
|
||||
|
||||
<description summary="gamescope-specific protocol">
|
||||
This is a private Gamescope protocol. Regular Wayland clients must not use
|
||||
it.
|
||||
</description>
|
||||
|
||||
<interface name="gamescope_control" version="1">
|
||||
<request name="destroy" type="destructor"></request>
|
||||
|
||||
<enum name="feature">
|
||||
<description summary="gamescope feature types">
|
||||
Enum of the features supported by Gamescope.
|
||||
</description>
|
||||
<entry name="done" value="0" summary="sent at the end of the feature list"/>
|
||||
<entry name="reshade_shaders" value="1"/>
|
||||
</enum>
|
||||
|
||||
<event name="feature_support">
|
||||
<description summary="feature supported">
|
||||
Says whether a feature is supported and the version.
|
||||
</description>
|
||||
<arg name="feature" type="uint" summary="one of the enum features"/>
|
||||
<arg name="version" type="uint" summary="feature version"/>
|
||||
<arg name="flags" type="uint" summary="feature flags (none currently)"/>
|
||||
</event>
|
||||
</interface>
|
||||
</protocol>
|
|
@ -7,6 +7,7 @@ protocols = [
|
|||
'gamescope-pipewire',
|
||||
'gamescope-input-method',
|
||||
'gamescope-tearing-control-unstable-v1',
|
||||
'gamescope-control',
|
||||
'xdg-shell',
|
||||
'presentation-time',
|
||||
]
|
||||
|
|
|
@ -38,6 +38,7 @@ extern "C" {
|
|||
|
||||
#include "gamescope-xwayland-protocol.h"
|
||||
#include "gamescope-pipewire-protocol.h"
|
||||
#include "gamescope-control-protocol.h"
|
||||
#include "gamescope-tearing-control-unstable-v1-protocol.h"
|
||||
#include "presentation-time-protocol.h"
|
||||
|
||||
|
@ -734,7 +735,34 @@ static void create_gamescope_pipewire( void )
|
|||
}
|
||||
#endif
|
||||
|
||||
//
|
||||
|
||||
static void gamescope_control_handle_destroy( struct wl_client *client, struct wl_resource *resource )
|
||||
{
|
||||
wl_resource_destroy( resource );
|
||||
}
|
||||
|
||||
static const struct gamescope_control_interface gamescope_control_impl = {
|
||||
.destroy = gamescope_control_handle_destroy,
|
||||
};
|
||||
|
||||
static void gamescope_control_bind( struct wl_client *client, void *data, uint32_t version, uint32_t id )
|
||||
{
|
||||
struct wl_resource *resource = wl_resource_create( client, &gamescope_control_interface, version, id );
|
||||
wl_resource_set_implementation( resource, &gamescope_control_impl, NULL, NULL );
|
||||
|
||||
// Send feature support
|
||||
gamescope_control_send_feature_support( resource, GAMESCOPE_CONTROL_FEATURE_RESHADE_SHADERS, 1, 0 );
|
||||
gamescope_control_send_feature_support( resource, GAMESCOPE_CONTROL_FEATURE_DONE, 0, 0 );
|
||||
}
|
||||
|
||||
static void create_gamescope_control( void )
|
||||
{
|
||||
uint32_t version = 1;
|
||||
wl_global_create( wlserver.display, &gamescope_control_interface, version, NULL, gamescope_control_bind );
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
static void gamescope_surface_tearing_set_presentation_hint( struct wl_client *client, struct wl_resource *resource, uint32_t hint )
|
||||
{
|
||||
|
@ -1243,6 +1271,8 @@ bool wlserver_init( void ) {
|
|||
create_gamescope_pipewire();
|
||||
#endif
|
||||
|
||||
create_gamescope_control();
|
||||
|
||||
create_gamescope_tearing();
|
||||
|
||||
create_presentation_time();
|
||||
|
|
Loading…
Reference in a new issue