17#if defined(Q_OS_LINUX)
18#include <linux/dma-buf.h>
19#include <linux/sync_file.h>
22#include <drm_fourcc.h>
26#include <xf86drmMode.h>
28#include <linux/dma-buf.h>
31#ifndef DRM_IOCTL_MODE_CLOSEFB
32#define DRM_IOCTL_MODE_CLOSEFB 0xD0
38static bool s_envIsSet =
false;
39static bool s_disableBufferWait = qEnvironmentVariableIntValue(
"KWIN_DRM_DISABLE_BUFFER_READABILITY_CHECKS", &s_envIsSet) && s_envIsSet;
42 : m_framebufferId(fbId)
46 if (s_disableBufferWait || (
m_gpu->
isI915() && !s_envIsSet)) {
52#ifdef DMA_BUF_IOCTL_EXPORT_SYNC_FILE
54 dma_buf_export_sync_file req{
55 .flags = DMA_BUF_SYNC_READ,
101 return m_readable = std::all_of(fds.begin(), fds.end(), [](
const auto &fd) {
102 return !fd.isValid() || fd.isReadable();
109#ifdef SYNC_IOC_SET_DEADLINE
113 sync_set_deadline args{
114 .deadline_ns = uint64_t(deadline.time_since_epoch().count()),
DrmFramebuffer(DrmGpu *gpu, uint32_t fbId, GraphicsBuffer *buffer, FileDescriptor &&readFence)
uint32_t framebufferId() const
const FileDescriptor & syncFd() const
void setDeadline(std::chrono::steady_clock::time_point deadline)
GraphicsBuffer * buffer() const
GraphicsBufferRef m_bufferRef
const uint32_t m_framebufferId
virtual const DmaBufAttributes * dmabufAttributes() const
#define DRM_IOCTL_MODE_CLOSEFB
int drmIoctl(int fd, unsigned long request, void *arg)
std::array< FileDescriptor, 4 > fd