File indexing completed on 2024-05-19 04:01:08
0001 /* 0002 SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include <openglinfosource.h> 0008 #include <src/provider/core/openglinfosource_p.h> 0009 0010 #include <QDebug> 0011 #include <QtTest/qtest.h> 0012 #include <QObject> 0013 #include <QStandardPaths> 0014 0015 using namespace KUserFeedback; 0016 0017 class OpenGLInfoSourceTest : public QObject 0018 { 0019 Q_OBJECT 0020 private Q_SLOTS: 0021 void initTestCase() 0022 { 0023 QStandardPaths::setTestModeEnabled(true); 0024 } 0025 0026 void testOpenGLInfoSource() 0027 { 0028 OpenGLInfoSource src; 0029 const auto m = src.data().toMap(); 0030 QVERIFY(m.contains(QLatin1String("type"))); 0031 const auto type = m.value(QLatin1String("type")).toString(); 0032 QVERIFY(!type.isEmpty()); 0033 QVERIFY(type == QLatin1String("GL") || type == QLatin1String("GLES")); 0034 0035 QVERIFY(m.contains(QLatin1String("vendor"))); 0036 QVERIFY(!m.value(QLatin1String("vendor")).toString().isEmpty()); 0037 QVERIFY(m.contains(QLatin1String("renderer"))); 0038 QVERIFY(!m.value(QLatin1String("renderer")).toString().isEmpty()); 0039 QVERIFY(m.contains(QLatin1String("version"))); 0040 QVERIFY(!m.value(QLatin1String("version")).toString().isEmpty()); 0041 QVERIFY(m.contains(QLatin1String("vendorVersion"))); 0042 QVERIFY(!m.value(QLatin1String("vendorVersion")).toString().isEmpty()); 0043 QVERIFY(m.contains(QLatin1String("glslVersion"))); 0044 QVERIFY(!m.value(QLatin1String("glslVersion")).toString().isEmpty()); 0045 } 0046 0047 void testParseGLVersion_data() 0048 { 0049 QTest::addColumn<QString>("glVersion"); 0050 QTest::addColumn<QString>("vendorVersion"); 0051 QTest::addColumn<QString>("version"); 0052 0053 QTest::newRow("empty") << QString() << QString() << QString(); 0054 QTest::newRow("default") << QStringLiteral("3.0") << QString() << QStringLiteral("3.0"); 0055 QTest::newRow("mesa") << QStringLiteral("3.0 Mesa 17.1.1") << QStringLiteral("Mesa 17.1.1") << QStringLiteral("3.0"); 0056 QTest::newRow("mesa compat") << QStringLiteral("4.5 (Compatibility Profile) Mesa 19.2.1") << QStringLiteral("Mesa 19.2.1") << QStringLiteral("4.5"); 0057 QTest::newRow("nvidia") << QStringLiteral("4.5 NVIDIA 375.26") << QStringLiteral("NVIDIA 375.26") << QStringLiteral("4.5"); 0058 QTest::newRow("intel osx") << QStringLiteral("2.1 INTEL-10.25.13") << QStringLiteral("INTEL-10.25.13") << QStringLiteral("2.1"); 0059 QTest::newRow("intel win") << QStringLiteral("4.3 - Build 20.19.15.4568") << QStringLiteral("Build 20.19.15.4568") << QStringLiteral("4.3"); 0060 } 0061 0062 void testParseGLVersion() 0063 { 0064 QFETCH(QString, glVersion); 0065 QFETCH(QString, vendorVersion); 0066 QFETCH(QString, version); 0067 0068 QVariantMap m; 0069 OpenGLInfoSourcePrivate::parseGLVersion(glVersion.toUtf8().constData(), m); 0070 QCOMPARE(m.value(QLatin1String("vendorVersion")).toString(), vendorVersion); 0071 QCOMPARE(m.value(QLatin1String("version")).toString(), version); 0072 0073 // don't overwrite version if we could correctly determine this by other means already 0074 m.clear(); 0075 m.insert(QStringLiteral("version"), QStringLiteral("12345.6789")); 0076 OpenGLInfoSourcePrivate::parseGLVersion(glVersion.toUtf8().constData(), m); 0077 QCOMPARE(m.value(QLatin1String("vendorVersion")).toString(), vendorVersion); 0078 QCOMPARE(m.value(QLatin1String("version")).toString(), QLatin1String("12345.6789")); 0079 } 0080 0081 void testParseGLESVersion_data() 0082 { 0083 QTest::addColumn<QString>("glVersion"); 0084 QTest::addColumn<QString>("version"); 0085 QTest::addColumn<QString>("vendorVersion"); 0086 0087 QTest::newRow("empty") << QString() << QStringLiteral("unknown") << QString(); 0088 QTest::newRow("invalid") << QStringLiteral("OpenGL 2.0") << QStringLiteral("unknown") << QStringLiteral("OpenGL 2.0"); 0089 QTest::newRow("default") << QStringLiteral("OpenGL ES 2.0") << QStringLiteral("2.0") << QString(); 0090 QTest::newRow("angle") << QStringLiteral("OpenGL ES 2.0 (ANGLE 2.1.0.8613f4946861)") << QStringLiteral("2.0") << QStringLiteral("ANGLE 2.1.0.8613f4946861"); 0091 } 0092 0093 void testParseGLESVersion() 0094 { 0095 QFETCH(QString, glVersion); 0096 QFETCH(QString, version); 0097 QFETCH(QString, vendorVersion); 0098 0099 QVariantMap m; 0100 OpenGLInfoSourcePrivate::parseGLESVersion(glVersion.toUtf8().constData(), m); 0101 QCOMPARE(m.value(QLatin1String("version")).toString(), version); 0102 QCOMPARE(m.value(QLatin1String("vendorVersion")).toString(), vendorVersion); 0103 } 0104 0105 void testParseGLSLVersion_data() 0106 { 0107 QTest::addColumn<QString>("input"); 0108 QTest::addColumn<QString>("glslVersion"); 0109 0110 QTest::newRow("empty") << QString() << QString(); 0111 QTest::newRow("default") << QStringLiteral("1.30") << QStringLiteral("1.30"); 0112 QTest::newRow("nvidia") << QStringLiteral("4.50 NVIDIA") << QStringLiteral("4.50"); 0113 } 0114 0115 void testParseGLSLVersion() 0116 { 0117 QFETCH(QString, input); 0118 QFETCH(QString, glslVersion); 0119 0120 QVariantMap m; 0121 OpenGLInfoSourcePrivate::parseGLSLVersion(input.toUtf8().constData(), m); 0122 QCOMPARE(m.value(QLatin1String("glslVersion")).toString(), glslVersion); 0123 } 0124 0125 void testParseESGLSLVersion_data() 0126 { 0127 QTest::addColumn<QString>("input"); 0128 QTest::addColumn<QString>("glslVersion"); 0129 0130 QTest::newRow("empty") << QString() << QString(); 0131 QTest::newRow("invalid") << QStringLiteral("GLSL 1.00") << QStringLiteral("GLSL 1.00"); 0132 QTest::newRow("default") << QStringLiteral("OpenGL ES GLSL ES 1.00") << QStringLiteral("1.00"); 0133 QTest::newRow("angle") << QStringLiteral("OpenGL ES GLSL ES 1.00 (ANGLE 2.1.0.8613f4946861)") << QStringLiteral("1.00"); 0134 } 0135 0136 void testParseESGLSLVersion() 0137 { 0138 QFETCH(QString, input); 0139 QFETCH(QString, glslVersion); 0140 0141 QVariantMap m; 0142 OpenGLInfoSourcePrivate::parseESGLSLVersion(input.toUtf8().constData(), m); 0143 QCOMPARE(m.value(QLatin1String("glslVersion")).toString(), glslVersion); 0144 } 0145 0146 void testNormalizeVendor_data() 0147 { 0148 QTest::addColumn<QString>("input"); 0149 QTest::addColumn<QString>("vendor"); 0150 0151 QTest::newRow("empty") << QString() << QString(); 0152 QTest::newRow("intel window") << QStringLiteral("Intel") << QStringLiteral("Intel"); 0153 QTest::newRow("intel linux") << QStringLiteral("Intel Open Source Technology Center") << QStringLiteral("Intel"); 0154 QTest::newRow("intel macOS") << QStringLiteral("Intel Inc.") << QStringLiteral("Intel"); 0155 QTest::newRow("nvidia") << QStringLiteral("NVIDIA Corporation") << QStringLiteral("NVIDIA Corporation"); 0156 } 0157 0158 void testNormalizeVendor() 0159 { 0160 QFETCH(QString, input); 0161 QFETCH(QString, vendor); 0162 0163 QCOMPARE(OpenGLInfoSourcePrivate::normalizeVendor(input.toLocal8Bit().constData()), vendor); 0164 } 0165 0166 void testNormalizeRenderer_data() 0167 { 0168 QTest::addColumn<QString>("input"); 0169 QTest::addColumn<QString>("renderer"); 0170 0171 QTest::newRow("empty") << QString() << QString(); 0172 QTest::newRow("intel mesa") << QStringLiteral("Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2)") << QStringLiteral("HD Graphics 520"); 0173 QTest::newRow("intel mesa 2") << QStringLiteral("Mesa Intel HD Graphics 530 (Skylake GT2)") << QStringLiteral("HD Graphics 530"); 0174 QTest::newRow("intel mesa 3") << QStringLiteral("Mesa Intel Iris Plus Graphics 640 (Kaby Lake GT3e) (KBL GT3)") << QStringLiteral("Iris Plus Graphics 640"); 0175 QTest::newRow("intel macOS") << QStringLiteral("Intel Iris Pro OpenGL Engine") << QStringLiteral("Iris Pro"); 0176 QTest::newRow("intel windows") << QStringLiteral("Intel(R) HD Graphics 4600") << QStringLiteral("HD Graphics 4600"); 0177 QTest::newRow("nvidia") << QStringLiteral("GeForce GTX 1060 6GB/PCIe/SSE2") << QStringLiteral("GeForce GTX 1060 6GB/PCIe/SSE2"); 0178 QTest::newRow("nvidia macos") << QStringLiteral("NVIDIA GeForce GT 750M OpenGL Engine") << QStringLiteral("GeForce GT 750M"); 0179 QTest::newRow("angle") << QStringLiteral("ANGLE (VirtualBox Graphics Adapter for Windows 8+ Direct3D9Ex vs_3_0 ps_3_0)") << QStringLiteral("ANGLE"); 0180 QTest::newRow("gallium") << QStringLiteral("Gallium 0.4 on AMD BARTS (DRM 2.49.0 / 4.11.1-1-default, LLVM 4.0.0)") << QStringLiteral("Gallium 0.4 on AMD BARTS"); 0181 QTest::newRow("AMD 1") << QStringLiteral("AMD BARTS (DRM 2.50.0 / 4.17.2-1-default, LLVM 6.0.0)") << QStringLiteral("AMD BARTS"); 0182 QTest::newRow("AMD 2") << QStringLiteral("AMD Radeon (TM) RX 480 Graphics (POLARIS10 / DRM 3.19.0 / 4.14.50-gentoo, LLVM 6.0.0)") << QStringLiteral("AMD Radeon RX 480 Graphics"); 0183 QTest::newRow("Radeon") << QStringLiteral("Radeon RX 590 Series (POLARIS10, DRM 3.35.0, 5.4.13-zen1-1-zen, LLVM 9.0.1)") << QStringLiteral("Radeon RX 590 Series"); 0184 QTest::newRow("llvmpipe") << QStringLiteral("llvmpipe (LLVM 9.0, 128 bits)") << QStringLiteral("llvmpipe"); 0185 } 0186 0187 void testNormalizeRenderer() 0188 { 0189 QFETCH(QString, input); 0190 QFETCH(QString, renderer); 0191 0192 QCOMPARE(OpenGLInfoSourcePrivate::normalizeRenderer(input.toLocal8Bit().constData()), renderer); 0193 } 0194 0195 }; 0196 0197 QTEST_MAIN(OpenGLInfoSourceTest) 0198 0199 #include "openglinfosourcetest.moc"