diff --git a/src/backends/drm/drm_buffer.cpp b/src/backends/drm/drm_buffer.cpp index 0f0b8b71f4..ea097232a9 100644 --- a/src/backends/drm/drm_buffer.cpp +++ b/src/backends/drm/drm_buffer.cpp @@ -26,11 +26,19 @@ namespace KWin { +static bool s_envIsSet = false; +static bool s_disableBufferWait = qEnvironmentVariableIntValue("KWIN_DRM_DISABLE_BUFFER_READABILITY_CHECKS", &s_envIsSet) && s_envIsSet; + DrmFramebuffer::DrmFramebuffer(DrmGpu *gpu, uint32_t fbId, GraphicsBuffer *buffer) : m_framebufferId(fbId) , m_gpu(gpu) , m_bufferRef(buffer) { + if (s_disableBufferWait || (m_gpu->isI915() && !s_envIsSet)) { + // buffer readability checks cause frames to be wrongly delayed on some Intel laptops + // See https://gitlab.freedesktop.org/drm/intel/-/issues/9415 + m_readable = true; + } } DrmFramebuffer::~DrmFramebuffer() diff --git a/src/backends/drm/drm_gpu.cpp b/src/backends/drm/drm_gpu.cpp index b83f5d7d21..e2dcf8c41b 100644 --- a/src/backends/drm/drm_gpu.cpp +++ b/src/backends/drm/drm_gpu.cpp @@ -75,6 +75,7 @@ DrmGpu::DrmGpu(DrmBackend *backend, const QString &devNode, int fd, dev_t device // find out what driver this kms device is using DrmUniquePtr version(drmGetVersion(fd)); m_isNVidia = strstr(version->name, "nvidia-drm"); + m_isI915 = strstr(version->name, "i915"); m_isVirtualMachine = strstr(version->name, "virtio") || strstr(version->name, "qxl") || strstr(version->name, "vmwgfx") || strstr(version->name, "vboxvideo"); @@ -690,6 +691,11 @@ bool DrmGpu::isNVidia() const return m_isNVidia; } +bool DrmGpu::isI915() const +{ + return m_isI915; +} + bool DrmGpu::isRemoved() const { return m_isRemoved; diff --git a/src/backends/drm/drm_gpu.h b/src/backends/drm/drm_gpu.h index 27e546eea5..d91f8cad81 100644 --- a/src/backends/drm/drm_gpu.h +++ b/src/backends/drm/drm_gpu.h @@ -79,6 +79,7 @@ public: bool addFB2ModifiersSupported() const; bool asyncPageflipSupported() const; bool isNVidia() const; + bool isI915() const; gbm_device *gbmDevice() const; EglDisplay *eglDisplay() const; DrmBackend *platform() const; @@ -137,6 +138,7 @@ private: bool m_atomicModeSetting; bool m_addFB2ModifiersSupported = false; bool m_isNVidia; + bool m_isI915; bool m_isVirtualMachine; bool m_asyncPageflipSupported = false; bool m_isRemoved = false;