1- From 037c35841d89fbb8150f839960e34a1e20810b3f Mon Sep 17 00:00:00 2001
1+ From c7acec8f82d6a7bda2e8074f736a006010b7fff2 Mon Sep 17 00:00:00 2001
22From: Samuel Pitoiset <samuel.pitoiset@gmail.com>
33Date: Thu, 22 Feb 2024 22:32:45 +0100
44Subject: [PATCH] STEAMOS: Dynamic swapchain override for gamescope limiter for
@@ -9,17 +9,17 @@ been removed because the Gamescope WSI layer already handles that.
99
1010Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
1111---
12- src/loader/ loader_dri3_helper.c | 42 +++++++++++++++++++++++++++++++- -
13- src/loader/ loader_dri3_helper.h | 1 +
14- src/loader/ meson.build | 2 +-
15- 3 files changed, 42 insertions(+), 3 deletions(-)
12+ .../frontends/dri/ loader_dri3_helper.c | 41 ++++++++++++++++++-
13+ .../frontends/dri/ loader_dri3_helper.h | 1 +
14+ src/gallium/frontends/dri/ meson.build | 2 +-
15+ 3 files changed, 41 insertions(+), 3 deletions(-)
1616
17- diff --git a/src/loader/ loader_dri3_helper.c b/src/loader /loader_dri3_helper.c
18- index dc1db4fa8be..38e55dc23ae 100644
19- --- a/src/loader /loader_dri3_helper.c
20- +++ b/src/loader /loader_dri3_helper.c
21- @@ -289 ,6 +289 ,30 @@ dri3_update_max_num_back(struct loader_dri3_drawable *draw )
22- }
17+ diff --git a/src/gallium/frontends/dri/ loader_dri3_helper.c b/src/gallium/frontends/dri /loader_dri3_helper.c
18+ index 268ec3d86c8..b657f233634 100644
19+ --- a/src/gallium/frontends/dri /loader_dri3_helper.c
20+ +++ b/src/gallium/frontends/dri /loader_dri3_helper.c
21+ @@ -76 ,6 +76 ,30 @@ get_screen_for_root(xcb_connection_t *conn, xcb_window_t root )
22+ return NULL;
2323 }
2424
2525+ static unsigned
@@ -46,10 +46,10 @@ index dc1db4fa8be..38e55dc23ae 100644
4646+ return override_value;
4747+ }
4848+
49- void
50- loader_dri3_set_swap_interval (struct loader_dri3_drawable *draw, int interval )
49+ static xcb_visualtype_t *
50+ get_xcb_visualtype_for_depth (struct loader_dri3_drawable *draw, int depth )
5151 {
52- @@ -303 ,10 +327 ,12 @@ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
52+ @@ -288 ,10 +312 ,12 @@ loader_dri3_set_swap_interval(struct loader_dri3_drawable *draw, int interval)
5353 * PS. changing from value A to B and A < B won't cause swap out of order but
5454 * may still gets wrong target_msc value at the beginning.
5555 */
@@ -64,20 +64,19 @@ index dc1db4fa8be..38e55dc23ae 100644
6464 }
6565
6666 static void
67- @@ -438 ,6 +464,12 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
68- draw->swap_interval = dri_get_initial_swap_interval(draw->dri_screen_render_gpu,
69- draw->ext->config );
67+ @@ -420 ,6 +446,11 @@ loader_dri3_drawable_init(xcb_connection_t *conn,
68+
69+ draw->swap_interval = dri_get_initial_swap_interval( draw->dri_screen_render_gpu );
7070
7171+ draw->orig_swap_interval = draw->swap_interval;
72- +
7372+ unsigned gamescope_override = gamescope_swapchain_override();
7473+ if (gamescope_override == 1)
7574+ draw->swap_interval = 1;
7675+
7776 dri3_update_max_num_back(draw);
7877
7978 /* Create a new drawable */
80- @@ -1085 ,6 +1117 ,12 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
79+ @@ -1064 ,6 +1095 ,12 @@ loader_dri3_swap_buffers_msc(struct loader_dri3_drawable *draw,
8180 if (draw->type == LOADER_DRI3_DRAWABLE_WINDOW) {
8281 dri3_fence_reset(draw->conn, back);
8382
@@ -90,31 +89,31 @@ index dc1db4fa8be..38e55dc23ae 100644
9089 /* Compute when we want the frame shown by taking the last known
9190 * successful MSC and adding in a swap interval for each outstanding swap
9291 * request. target_msc=divisor=remainder=0 means "Use glXSwapBuffers()
93- diff --git a/src/loader/ loader_dri3_helper.h b/src/loader /loader_dri3_helper.h
94- index cc2362dd599..fe73b3f329c 100644
95- --- a/src/loader /loader_dri3_helper.h
96- +++ b/src/loader /loader_dri3_helper.h
97- @@ -178 ,6 +178 ,7 @@ struct loader_dri3_drawable {
92+ diff --git a/src/gallium/frontends/dri/ loader_dri3_helper.h b/src/gallium/frontends/dri /loader_dri3_helper.h
93+ index 9061e9755e2..6cc64be298a 100644
94+ --- a/src/gallium/frontends/dri /loader_dri3_helper.h
95+ +++ b/src/gallium/frontends/dri /loader_dri3_helper.h
96+ @@ -170 ,6 +170 ,7 @@ struct loader_dri3_drawable {
9897 bool block_on_depleted_buffers;
9998 bool queries_buffer_age;
10099 int swap_interval;
101100+ int orig_swap_interval;
102101
103- struct loader_dri3_extensions *ext;
104102 const struct loader_dri3_vtable *vtable;
105- diff --git a/src/loader/meson.build b/src/loader/meson.build
106- index ffb970f26be..326e2b5b9fd 100644
107- --- a/src/loader/meson.build
108- +++ b/src/loader/meson.build
109- @@ -29,7 +29,7 @@ if with_platform_x11 and with_dri3
110- dependencies : [
111- idep_mesautil,
112- dep_libdrm, dep_xcb_dri3, dep_xcb_present, dep_xcb_sync, dep_xshmfence,
113- - dep_xcb_xfixes,
114- + dep_xcb_xfixes, dep_xcb_xrandr, idep_mesautil
115- ],
116- build_by_default : false,
117- )
103+
104+ diff --git a/src/gallium/frontends/dri/meson.build b/src/gallium/frontends/dri/meson.build
105+ index a98c8c0a903..0d4f816d920 100644
106+ --- a/src/gallium/frontends/dri/meson.build
107+ +++ b/src/gallium/frontends/dri/meson.build
108+ @@ -23,7 +23,7 @@ if with_platform_x11
109+ deps_for_libdri += dep_xcb
110+ if with_dri_platform == 'drm'
111+ deps_for_libdri += [dep_xcb_dri3, dep_xcb_present, dep_xcb_sync,
112+ - dep_xshmfence, dep_xcb_xfixes]
113+ + dep_xshmfence, dep_xcb_xfixes, dep_xcb_xrandr, idep_mesautil]
114+ files_libdri += files('loader_dri3_helper.c')
115+ endif
116+ endif
118117- -
119- 2.45.0
118+ 2.47.1
120119
0 commit comments