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 struct {
|
||||
QString name;
|
||||
QString description;
|
||||
QString version;
|
||||
QString bus;
|
||||
bool kms;
|
||||
} dri_info;
|
||||
|
||||
static struct {
|
||||
#ifdef KCM_ENABLE_OPENGL
|
||||
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)
|
||||
{
|
||||
#ifdef KCM_ENABLE_DRM
|
||||
QTreeWidgetItem *l2 = NULL, *l3 = NULL;
|
||||
|
||||
if (after) {
|
||||
|
@ -196,68 +187,60 @@ static QTreeWidgetItem *print_drm_info(QTreeWidgetItem *l1, QTreeWidgetItem *aft
|
|||
|
||||
l1->setExpanded(true);
|
||||
|
||||
const bool drmAvailable = get_dri_device();
|
||||
if (drmAvailable) {
|
||||
l2 = newItem(l1, i18n("Driver"));
|
||||
l2->setExpanded(true);
|
||||
l3 = newItem(l2, l3, i18n("Name"), dri_info.name);
|
||||
l3 = newItem(l2, l3, i18n("Description"), dri_info.description);
|
||||
l3 = newItem(l2, l3, i18n("Version"), dri_info.version);
|
||||
l3 = newItem(l2, l3, i18n("Bus"), dri_info.bus);
|
||||
l3 = newItem(l2, l3, i18n("Kernel mode-setting"), dri_info.kms ? i18n("Yes") : i18n("No"));
|
||||
} else {
|
||||
l2 = newItem(l1, l2, i18n("Driver"), i18n("unknown"));
|
||||
}
|
||||
|
||||
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);
|
||||
#ifndef MAX3
|
||||
// libdrm DRM_NODE_NAME_MAX() macro references MAX3() macro that is not defined anywhere
|
||||
# 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) {
|
||||
kWarning() << "get_dri_device: QT_OPEN() fail";
|
||||
return false;
|
||||
// depends on how many devices are available
|
||||
kDebug() << "QT_OPEN() failed for" << i;
|
||||
continue;
|
||||
}
|
||||
|
||||
drmVersionPtr driVer = drmGetVersion(driFd);
|
||||
if (!driVer) {
|
||||
kWarning() << "get_dri_device: drmGetVersion() fail";
|
||||
kWarning() << "drmGetVersion() failed for" << i;
|
||||
drmClose(driFd);
|
||||
return false;
|
||||
continue;
|
||||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
|
||||
return true;
|
||||
}
|
||||
#else
|
||||
static bool get_dri_device() { return false; }
|
||||
l2 = newItem(l1, i18n("Device %1", i));
|
||||
l2->setExpanded(true);
|
||||
l3 = newItem(l2, l3, i18n("Name"), dri_name);
|
||||
l3 = newItem(l2, l3, i18n("Description"), dri_description);
|
||||
l3 = newItem(l2, l3, i18n("Version"), dri_version);
|
||||
l3 = newItem(l2, l3, i18n("Bus"), dri_bus);
|
||||
l3 = newItem(l2, l3, i18n("Kernel mode-setting"), dri_kms ? i18n("Yes") : i18n("No"));
|
||||
}
|
||||
|
||||
#ifdef UNDEFINE_MAX3
|
||||
# undef MAX3
|
||||
#endif
|
||||
#endif // KCM_ENABLE_DRM
|
||||
|
||||
return l1;
|
||||
}
|
||||
#ifdef KCM_ENABLE_OPENGL
|
||||
#if defined(GLX_ARB_get_proc_address) && defined(__GLXextFuncPtr)
|
||||
extern "C" {
|
||||
|
@ -724,7 +707,14 @@ bool GetInfo_OpenGL(QTreeWidget *treeWidget)
|
|||
l1->setExpanded(true);
|
||||
l1->setFlags(Qt::ItemIsEnabled);
|
||||
|
||||
|
||||
#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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue