yshui / picom

A lightweight compositor for X11 with animation support
https://picom.app/
Other
4.1k stars 585 forks source link

Monitor flickers when vsync is disabled #1341

Open XoDefender opened 6 days ago

XoDefender commented 6 days ago

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 commented 21 hours ago

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

XoDefender commented 21 hours ago

Filmed in slow motion