153 lines
2.5 KiB
C++
153 lines
2.5 KiB
C++
/*
|
|
KWin - the KDE window manager
|
|
This file is part of the KDE project.
|
|
|
|
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
|
|
SPDX-FileCopyrightText: 2019 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
#ifndef KWIN_DRM_POINTER_H
|
|
#define KWIN_DRM_POINTER_H
|
|
|
|
#include <memory>
|
|
#include <xf86drm.h>
|
|
#include <xf86drmMode.h>
|
|
|
|
namespace KWin
|
|
{
|
|
|
|
template<typename T>
|
|
struct DrmDeleter;
|
|
|
|
template<>
|
|
struct DrmDeleter<drmVersion>
|
|
{
|
|
void operator()(drmVersion *version)
|
|
{
|
|
drmFreeVersion(version);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeAtomicReq>
|
|
{
|
|
void operator()(drmModeAtomicReq *req)
|
|
{
|
|
drmModeAtomicFree(req);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeConnector>
|
|
{
|
|
void operator()(drmModeConnector *connector)
|
|
{
|
|
drmModeFreeConnector(connector);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeCrtc>
|
|
{
|
|
void operator()(drmModeCrtc *crtc)
|
|
{
|
|
drmModeFreeCrtc(crtc);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeFB>
|
|
{
|
|
void operator()(drmModeFB *fb)
|
|
{
|
|
drmModeFreeFB(fb);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeEncoder>
|
|
{
|
|
void operator()(drmModeEncoder *encoder)
|
|
{
|
|
drmModeFreeEncoder(encoder);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeModeInfo>
|
|
{
|
|
void operator()(drmModeModeInfo *info)
|
|
{
|
|
drmModeFreeModeInfo(info);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeObjectProperties>
|
|
{
|
|
void operator()(drmModeObjectProperties *properties)
|
|
{
|
|
drmModeFreeObjectProperties(properties);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModePlane>
|
|
{
|
|
void operator()(drmModePlane *plane)
|
|
{
|
|
drmModeFreePlane(plane);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModePlaneRes>
|
|
{
|
|
void operator()(drmModePlaneRes *resources)
|
|
{
|
|
drmModeFreePlaneResources(resources);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModePropertyRes>
|
|
{
|
|
void operator()(drmModePropertyRes *property)
|
|
{
|
|
drmModeFreeProperty(property);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModePropertyBlobRes>
|
|
{
|
|
void operator()(drmModePropertyBlobRes *blob)
|
|
{
|
|
drmModeFreePropertyBlob(blob);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeRes>
|
|
{
|
|
void operator()(drmModeRes *resources)
|
|
{
|
|
drmModeFreeResources(resources);
|
|
}
|
|
};
|
|
|
|
template<>
|
|
struct DrmDeleter<drmModeLesseeListRes>
|
|
{
|
|
void operator()(drmModeLesseeListRes *ptr)
|
|
{
|
|
drmFree(ptr);
|
|
}
|
|
};
|
|
|
|
template<typename T>
|
|
using DrmUniquePtr = std::unique_ptr<T, DrmDeleter<T>>;
|
|
}
|
|
|
|
#endif
|