mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-23 18:32:50 +00:00
kinfocenter: implement information for all DRM devices
hack included Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
cee4f5ec91
commit
045dee4615
1 changed files with 58 additions and 68 deletions
|
@ -132,14 +132,6 @@ static const int scrnum = 0;
|
||||||
|
|
||||||
static bool IsDirect = false;
|
static bool IsDirect = false;
|
||||||
|
|
||||||
static struct {
|
|
||||||
QString name;
|
|
||||||
QString description;
|
|
||||||
QString version;
|
|
||||||
QString bus;
|
|
||||||
bool kms;
|
|
||||||
} dri_info;
|
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
#ifdef KCM_ENABLE_OPENGL
|
#ifdef KCM_ENABLE_OPENGL
|
||||||
const char *serverVendor;
|
const char *serverVendor;
|
||||||
|
@ -182,10 +174,9 @@ static void print_extension_list(const char *ext, QTreeWidgetItem *l1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool get_dri_device();
|
|
||||||
|
|
||||||
static QTreeWidgetItem *print_drm_info(QTreeWidgetItem *l1, QTreeWidgetItem *after, const QString &title)
|
static QTreeWidgetItem *print_drm_info(QTreeWidgetItem *l1, QTreeWidgetItem *after, const QString &title)
|
||||||
{
|
{
|
||||||
|
#ifdef KCM_ENABLE_DRM
|
||||||
QTreeWidgetItem *l2 = NULL, *l3 = NULL;
|
QTreeWidgetItem *l2 = NULL, *l3 = NULL;
|
||||||
|
|
||||||
if (after) {
|
if (after) {
|
||||||
|
@ -196,68 +187,60 @@ static QTreeWidgetItem *print_drm_info(QTreeWidgetItem *l1, QTreeWidgetItem *aft
|
||||||
|
|
||||||
l1->setExpanded(true);
|
l1->setExpanded(true);
|
||||||
|
|
||||||
const bool drmAvailable = get_dri_device();
|
#ifndef MAX3
|
||||||
if (drmAvailable) {
|
// libdrm DRM_NODE_NAME_MAX() macro references MAX3() macro that is not defined anywhere
|
||||||
l2 = newItem(l1, i18n("Driver"));
|
# define MAX3(A, B, C) A + B + C
|
||||||
|
# define UNDEFINE_MAX3
|
||||||
|
#endif
|
||||||
|
for (int i = 0; i < DRM_NODE_MAX; i++) {
|
||||||
|
char driDevBuff[DRM_NODE_NAME_MAX];
|
||||||
|
::snprintf(driDevBuff, sizeof(driDevBuff), DRM_DEV_NAME, DRM_DIR_NAME, i);
|
||||||
|
#ifdef O_CLOEXEC
|
||||||
|
int driFd = QT_OPEN(driDevBuff, O_RDWR | O_CLOEXEC, 0);
|
||||||
|
#else
|
||||||
|
int driFd = QT_OPEN(driDevBuff, O_RDWR, 0);
|
||||||
|
#endif
|
||||||
|
if (driFd < 0) {
|
||||||
|
// depends on how many devices are available
|
||||||
|
kDebug() << "QT_OPEN() failed for" << i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
drmVersionPtr driVer = drmGetVersion(driFd);
|
||||||
|
if (!driVer) {
|
||||||
|
kWarning() << "drmGetVersion() failed for" << i;
|
||||||
|
drmClose(driFd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* driBus = drmGetBusid(driFd);
|
||||||
|
|
||||||
|
QString dri_name = QString::fromLatin1(driVer->name, driVer->name_len);
|
||||||
|
QString dri_description = QString::fromLatin1(driVer->desc, driVer->desc_len);
|
||||||
|
QString dri_version = QString::fromLatin1("%1.%2.%3").arg(driVer->version_major).arg(driVer->version_minor).arg(driVer->version_patchlevel);
|
||||||
|
QString dri_bus = QString::fromLatin1(driBus);
|
||||||
|
bool dri_kms = (drmIsKMS(driFd) == 1);
|
||||||
|
|
||||||
|
drmFreeBusid(driBus);
|
||||||
|
drmFreeVersion(driVer);
|
||||||
|
drmClose(driFd);
|
||||||
|
|
||||||
|
l2 = newItem(l1, i18n("Device %1", i));
|
||||||
l2->setExpanded(true);
|
l2->setExpanded(true);
|
||||||
l3 = newItem(l2, l3, i18n("Name"), dri_info.name);
|
l3 = newItem(l2, l3, i18n("Name"), dri_name);
|
||||||
l3 = newItem(l2, l3, i18n("Description"), dri_info.description);
|
l3 = newItem(l2, l3, i18n("Description"), dri_description);
|
||||||
l3 = newItem(l2, l3, i18n("Version"), dri_info.version);
|
l3 = newItem(l2, l3, i18n("Version"), dri_version);
|
||||||
l3 = newItem(l2, l3, i18n("Bus"), dri_info.bus);
|
l3 = newItem(l2, l3, i18n("Bus"), dri_bus);
|
||||||
l3 = newItem(l2, l3, i18n("Kernel mode-setting"), dri_info.kms ? i18n("Yes") : i18n("No"));
|
l3 = newItem(l2, l3, i18n("Kernel mode-setting"), dri_kms ? i18n("Yes") : i18n("No"));
|
||||||
} else {
|
|
||||||
l2 = newItem(l1, l2, i18n("Driver"), i18n("unknown"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef UNDEFINE_MAX3
|
||||||
|
# undef MAX3
|
||||||
|
#endif
|
||||||
|
#endif // KCM_ENABLE_DRM
|
||||||
|
|
||||||
return l1;
|
return l1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(KCM_ENABLE_DRM)
|
|
||||||
static bool get_dri_device()
|
|
||||||
{
|
|
||||||
const int driAvail = drmAvailable();
|
|
||||||
// qDebug() << "driAvail" << driAvail;
|
|
||||||
if (!driAvail) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
char driDevBuff[128];
|
|
||||||
snprintf(driDevBuff, sizeof(driDevBuff), DRM_DEV_NAME, DRM_DIR_NAME, 0);
|
|
||||||
#ifdef O_CLOEXEC
|
|
||||||
int driFd = QT_OPEN(driDevBuff, O_RDWR | O_CLOEXEC, 0);
|
|
||||||
#else
|
|
||||||
int driFd = QT_OPEN(driDevBuff, O_RDWR, 0);
|
|
||||||
#endif
|
|
||||||
if (driFd < 0) {
|
|
||||||
kWarning() << "get_dri_device: QT_OPEN() fail";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
drmVersionPtr driVer = drmGetVersion(driFd);
|
|
||||||
if (!driVer) {
|
|
||||||
kWarning() << "get_dri_device: drmGetVersion() fail";
|
|
||||||
drmClose(driFd);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* driBus = drmGetBusid(driFd);
|
|
||||||
|
|
||||||
dri_info.name = QString::fromLatin1(driVer->name, driVer->name_len);
|
|
||||||
dri_info.description = QString::fromLatin1(driVer->desc, driVer->desc_len);
|
|
||||||
dri_info.version = QString::fromLatin1("%1.%2.%3").arg(driVer->version_major).arg(driVer->version_minor).arg(driVer->version_patchlevel);
|
|
||||||
dri_info.bus = QString::fromLatin1(driBus);
|
|
||||||
dri_info.kms = (drmIsKMS(driFd) == 1);
|
|
||||||
|
|
||||||
drmFreeBusid(driBus);
|
|
||||||
drmFreeVersion(driVer);
|
|
||||||
drmClose(driFd);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static bool get_dri_device() { return false; }
|
|
||||||
#endif // KCM_ENABLE_DRM
|
|
||||||
|
|
||||||
#ifdef KCM_ENABLE_OPENGL
|
#ifdef KCM_ENABLE_OPENGL
|
||||||
#if defined(GLX_ARB_get_proc_address) && defined(__GLXextFuncPtr)
|
#if defined(GLX_ARB_get_proc_address) && defined(__GLXextFuncPtr)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -724,7 +707,14 @@ bool GetInfo_OpenGL(QTreeWidget *treeWidget)
|
||||||
l1->setExpanded(true);
|
l1->setExpanded(true);
|
||||||
l1->setFlags(Qt::ItemIsEnabled);
|
l1->setFlags(Qt::ItemIsEnabled);
|
||||||
|
|
||||||
l2 = print_drm_info(l1, l2, i18n("Direct Rendering"));
|
|
||||||
|
#if defined(KCM_ENABLE_DRM)
|
||||||
|
const int driAvail = drmAvailable();
|
||||||
|
// qDebug() << "driAvail" << driAvail;
|
||||||
|
if (driAvail) {
|
||||||
|
l2 = print_drm_info(l1, l2, i18n("Direct Rendering"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO: print_visual_info(dpy, mode);
|
// TODO: print_visual_info(dpy, mode);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue