Monitor flickers when vsync is disabled
GPU, drivers, and screen setup
name of display: :0
display: :0 screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Intel (0x8086)
Device: Mesa Intel(R) Graphics (ADL GT2) (0x4626)
Version: 22.3.6
Accelerated: yes
Video memory: 15697MB
Unified memory: yes
Preferred profile: core (0x1)
Max core profile version: 4.6
Max compat profile version: 4.6
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Graphics (ADL GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 22.3.6
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL version string: 4.6 (Compatibility Profile) Mesa 22.3.6
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.3.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
picom version
picom-12-rc4
Configuration:
shadow = true;
shadow-radius = 7;
shadow-offset-x = -7;
shadow-offset-y = -7;
fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;
frame-opacity = 0.7;
corner-radius = 0
blur-kern = "3x3box";
backend = "glx"
dithered-present = true;
vsync = false;
detect-rounded-corners = true;
detect-client-opacity = true;
detect-transient = true;
use-damage = false;
xrender-sync-fence = true;
Steps of reproduction
- Make sure vsync is disabled
- Make sure "Found GLX extension GLX_EXT_buffer_age" (picom --log-level=info)
- Start picom with GLX backend
Expected behavior
picom runs without flickering
Current Behavior
when picom is running the monitor flickers like there is no double buffering active
Other details
The problem happens only if vsync is disabled. By messing around the sources I figured out that "glXSwapIntervalMESA((uint)interval)" with 0 interval makes the error happen.
Earlier I had problems with the absence of GLX_EXT_buffer_age ext. Without it there was no flickering, but the amount of drawn frames was a lot higher. Now even with no damage detection (picom --no-use-damage) drawing happens only on some actions.
So, I have this error since fixing the GLX_EXT_buffer_age ext absence with intel Iris CPUs.
https://github.com/user-attachments/assets/7b744e5d-99ed-4d16-bf6b-0e7793702f3e
https://github.com/user-attachments/assets/9aa537a3-b815-4baa-8366-dd91b0afd1c4
Filmed in slow motion
can reproduce neither on nvidia dgpu (gtx 1650) nor on intel igpu (uhd graphics 620).
The error appears to be caused by the i915 driver - fixed since Linux kernel 6.6.28.