picom icon indicating copy to clipboard operation
picom copied to clipboard

Monitor flickers when vsync is disabled

Open XoDefender opened this issue 1 year ago • 3 comments

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

  1. Make sure vsync is disabled
  2. Make sure "Found GLX extension GLX_EXT_buffer_age" (picom --log-level=info)
  3. 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

XoDefender avatar Sep 23 '24 17:09 XoDefender

https://github.com/user-attachments/assets/9aa537a3-b815-4baa-8366-dd91b0afd1c4

XoDefender avatar Sep 29 '24 09:09 XoDefender

Filmed in slow motion

XoDefender avatar Sep 29 '24 09:09 XoDefender

can reproduce neither on nvidia dgpu (gtx 1650) nor on intel igpu (uhd graphics 620).

absolutelynothelix avatar Oct 09 '24 21:10 absolutelynothelix

The error appears to be caused by the i915 driver - fixed since Linux kernel 6.6.28.

XoDefender avatar Nov 07 '24 09:11 XoDefender