Commit Graph

1444 Commits

Author SHA1 Message Date
Maxim Solovyov
b0dfcf4a32 x: remove x_screen_of_display and use xcb_aux_get_screen instead 2024-02-14 21:12:09 +03:00
Maxim Solovyov
53dd8a4e66 fix most of build warnings on openbsd
sorry openbsd people, we're not going to use the snprintf function.
2024-02-14 02:19:16 +03:00
Maxim Solovyov
9392829d84 backend: xrender: cache the present region
to avoid creating and destroying it every frame

(cherry picked from commit 5a1990b236c85f1222098ef147398855cbb3af69)
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-13 10:27:51 +00:00
Maxim Solovyov
a4ec70982c x: add the x_set_region function
it sets an x region to a pixman region

(cherry picked from commit efb7a1430f2c530c7b9cc0cb6d6d6cff95d8a4d9)
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-13 10:27:41 +00:00
Yuxuan Shui
75d0b7ba1e core: don't flush X connection before go to sleep
See the added comments for details.

Fixes #1145
Fixes #1166
Fixes #1040?

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-11 23:11:10 +00:00
Yuxuan Shui
a5826b6fb0 event: fix dumb bug in repair_win
Basically we won't call xcb_damage_subtract if show_all_xerrors is set,
which is very bad.

Fixes that, and also make sure the damage subtract request is flushed in
all branches.

Fixes: 1307d9ec70
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-11 23:05:53 +00:00
Yuxuan Shui
bdc0943399 event: make sure ev_property_notify flushes its requests
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-11 21:20:19 +00:00
Yuxuan Shui
baeafb3a3b event: tweak ev_reparent_notify
Instead of change window attributes back and forth, calculate the evmask
and set it just once. And also make sure the request is flushed.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-11 21:20:17 +00:00
Yuxuan Shui
755996a42c backend: gl: use libepoxy's has_*_extension
So we don't need maintain our own version.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-11 02:07:05 +00:00
Yuxuan Shui
eb723eee29 backend: gl: use libepoxy
There is actually no specification what symbols are exported from a
libGL implementation. The (extremely outdated) OpenGL ABI specification
says only GL 1.2 functions are guaranteed. Don't know how relevant that
is now, but different libGL implementations do export different set of
symbols. On Linux we are most likely to be linked with libglvnd, which
has everything we need. But on other platforms this is not necessarily
the case, for example on OpenBSD we are missing glGetQueryObjectui64v.

Use libepoxy so we can outsource this problem and never worry about it
ever again. Plus it also saves us from calling GetProcAddress ourselves.

Changes other than trivial build fixes I have to make:

1. Can't use eglCreatePlatformWindowSurface/eglGetPlatformDisplay.
   libepoxy checks for EGL 1.5 when resolving these functions. But
   without a current context, libepoxy assumes we only have EGL 1.4.
   This creates a chicken and egg problem - we need a display to call
   eglGetPlatformDisplay. We have to use the *EXT version instead.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-10 20:36:02 +00:00
Yuxuan Shui
dff77aae27 core: use pthread_setschedparam across the board
I think I was trying to avoid introducing pthread as a dependency, but
now we are using pthread for SGI_video_sync thread anyway. Let's remove
the ifdefs.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-10 20:32:45 +00:00
Jose Maldonado aka Yukiteru
023103c620 core: use pthread_setschedparam on OpenBSD
OpenBSD don't have support for sched_getparam(), sched_setparam(), or
sched_setscheduler() functions (yet). In this case, we need use
pthead-equivalents for real-time sched for picom. Theses changes add
this support.

Authored-by: Jose Maldonado aka Yukiteru <josemald89@gmail.com>
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-10 10:18:28 +00:00
Yuxuan Shui
f265e049a8 backend: gl: don't leak resources
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-07 23:42:38 +00:00
Yuxuan Shui
a39cd94e1f Merge pull request #1179 from absolutelynothelix/inherit-shader-on-decouple 2024-02-07 13:47:53 +01:00
Yuxuan Shui
7fad0d51d7 Merge pull request #1178 from absolutelynothelix/postprocess-corner-radius-rules
Fixes #1177
2024-02-07 00:00:36 +01:00
Yuxuan Shui
9204426caf backend: gl: don't use present shader for decoupling
Present shader optionally does dithering, but that's not needed for
decoupling.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-06 22:58:39 +00:00
Yuxuan Shui
0d3d18cd88 backend: gl: remove unused field from gl_win_shader_t
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-06 13:19:49 +00:00
Yuxuan Shui
c738400058 backend: clarify what clone_image does
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-02-06 12:56:55 +00:00
Maxim Solovyov
eb39426b08 backend: gl: inherit image's inner properties in the gl_image_decouple function
Image decouple should keep all the image properies from the source
image, so shader must be copied. And there are also some internal
properties what should be inherited but wasn't.

In particular this prevents images from losing their shaders when
alpha is applied.

Fixes #1174
2024-02-06 12:54:59 +00:00
Maxim Solovyov
0ed8d0cadf picom: post-process and free the corner radius rules list
to make conditions based on non-standard atoms in this list work.
2024-02-02 17:06:18 +03:00
Maxim Solovyov
4a79e7b777 render: fix binding the root background pixmap in case of depth mismatch
fix the same issue in the legacy backends, see the previous commit for
details. this commit also removes the x_validate_pixmap function because
it was used only in the get_root_tile function and the fix pretty much
implies and embeds it.
2024-02-02 02:04:45 +03:00
Maxim Solovyov
a655730e49 picom: fix binding the root background pixmap in case of depth mismatch
if the root background pixmap's depth doesn't match the root window's
depth, find a suitable visual for the root background pixmap's depth and
use it instead of the root window's visual
2024-02-02 02:04:35 +03:00
Maxim Solovyov
4401666cfb x: add the x_get_visual_for_depth function
it returns the first found visual for the given depth
2024-02-01 02:31:29 +03:00
Maxim Solovyov
90f5f4ca29 fix a bunch of typos in comments 2024-01-31 06:09:28 +03:00
Yuxuan Shui
238c3cc833 vblank: reset SGI_video_sync scheduler if it's getting nonsense
If resetting fails, set a flag so all future schedule calls will fail.

Fixes #1168

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-30 22:41:03 +00:00
Yuxuan Shui
fdbcd15975 backend: fix clang warning
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-29 23:57:11 +00:00
Yuxuan Shui
733113c691 Merge pull request #1171 from absolutelynothelix/corner-radius-rules-only 2024-01-29 23:53:24 +00:00
Yuxuan Shui
14a345a817 vblank: make init fallible
Improve error handling in sgi_video_sync_scheduler_init a bit.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-29 22:11:01 +00:00
Yuxuan Shui
5fba210ad6 vblank: make schedule fallible
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-29 22:07:04 +00:00
Yuxuan Shui
1bfb129985 backend: don't choose SGI_video_sync vblank if opengl is not enabled
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-29 21:02:36 +00:00
Maxim Solovyov
8ca66f8a00 win: allow corner-radius-rules without corner-radius
check if there is an override in corner-radius-rules even when
corner-radius is 0.
2024-01-29 23:16:51 +03:00
Yuxuan Shui
f3bdd01dc8 vblank: don't use symbols from backend/gl/glx.h
sgi video sync runs in a separate thread, we don't want to have
potential races between threads.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-29 17:52:44 +00:00
Yuxuan Shui
d87dd41f4c win: make sure window's client_win can't be XCB_NONE
This is a follow up to 81d137a3cc and
bug #704. Basically a window will have a `XCB_NONE` as `client_win` if its
previous client_win detached and then the window itself is immediately
destroyed. Because the window is destroyed we couldn't call
`win_recheck_client` so its `client_win` will remain `XCB_NONE`.

However, it turns out we have a convention of setting `client_win` to
the window itself if windows that don't have a client window. So make
sure this convention is followed even for destroyed windows.

Doesn't really fix anything, just to make sure an invariant holds.

Related: #704

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-21 19:58:29 +00:00
Yuxuan Shui
ce205d1591 win: add more debug logs for window updates
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-21 19:26:20 +00:00
Yuxuan Shui
56da153f1c Update copyright
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-21 17:35:18 +00:00
Yuxuan Shui
81d137a3cc core: fix debug window check in paint_preprocess
Fixes #704

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-21 17:27:05 +00:00
Yuxuan Shui
6e3c86226b core: improve debug log formatting around paint_preprocess
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-21 17:26:46 +00:00
Yuxuan Shui
dc2d7b2876 options: use of respect-prop-shadow is now an error
Deprecated in v8.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-14 17:06:34 +00:00
Yuxuan Shui
5e119123a7 options: use of sw-opti is now an error
Deprecated in v6, we forgot to remove it.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-14 17:04:58 +00:00
Yuxuan Shui
6d4eaec811 options: remove -F
Deprecated in compton, in distant history.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-14 16:58:56 +00:00
Yuxuan Shui
148e61a0b2 Merge pull request #1156 from yshui/pacing-fixes 2024-01-14 15:46:24 +00:00
Yuxuan Shui
d8f303761b core: reset msc counter if it went backwards
Otherwise we might be repeatedly hitting this condition and spam the
warning.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2024-01-14 15:41:41 +00:00
Maxim Solovyov
cacb45fbcd core: fix segfaults when the HOME environment variable is not set 2023-12-22 13:26:32 +03:00
Yuxuan Shui
b368072e12 Merge pull request #1002 from tryone144/fix/use-effective-texture-size-for-corner-radius 2023-12-20 10:48:14 +00:00
Yuxuan Shui
359d004b99 core: disable frame pacing when vsync is disabled
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:19 +00:00
Yuxuan Shui
6e0bad0034 core: make missing dpms extension non-fatal
We are not using it for anything at the moment, and it is breaking CI.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:16 +00:00
Yuxuan Shui
a28e221b83 driver: choose sgi_video_sync scheduler for NVIDIA
Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:15 +00:00
Yuxuan Shui
b582d2989e core: add debug options to override the vblank scheduler
Useful for debugging.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:14 +00:00
Yuxuan Shui
db9b808bfb vblank: add GLX_SGI_video_sync based scheduler
Present extension based scheduler doesn't work well on NVIDIA drivers.
GLX_SGI_video_sync is less accurate, but is rumoured to work. See
[kwin's usage](https://invent.kde.org/plasma/kwin/-/blob/master/src/
backends/x11/standalone/x11_standalone_sgivideosyncvsyncmonitor.cpp)

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:12 +00:00
Yuxuan Shui
db6ed75b60 core: don't always delay schedule_render to vblank
It's kind of dumb anyway. If we get damage event right after a vblank
event, we would waste the whole vblank.

Instead improve the frame scheduling logic to target the right vblank
interval. This only affects smart_frame_pacing anyway.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
2023-12-19 23:27:11 +00:00