14#include <KConfigGroup>
23 GLPlatform::cleanup();
32 void testDriverToString_data();
33 void testDriverToString();
34 void testChipClassToString_data();
35 void testChipClassToString();
36 void testPriorDetect();
37 void testDetect_data();
41void GLPlatformTest::cleanup()
48void GLPlatformTest::testDriverToString_data()
50 QTest::addColumn<Driver>(
"driver");
51 QTest::addColumn<QString>(
"expected");
53 QTest::newRow(
"R100") <<
Driver_R100 << QStringLiteral(
"Radeon");
54 QTest::newRow(
"R200") <<
Driver_R200 << QStringLiteral(
"R200");
55 QTest::newRow(
"R300C") <<
Driver_R300C << QStringLiteral(
"R300C");
56 QTest::newRow(
"R300G") <<
Driver_R300G << QStringLiteral(
"R300G");
57 QTest::newRow(
"R600C") <<
Driver_R600C << QStringLiteral(
"R600C");
58 QTest::newRow(
"R600G") <<
Driver_R600G << QStringLiteral(
"R600G");
59 QTest::newRow(
"RadeonSI") <<
Driver_RadeonSI << QStringLiteral(
"RadeonSI");
60 QTest::newRow(
"Nouveau") <<
Driver_Nouveau << QStringLiteral(
"Nouveau");
61 QTest::newRow(
"Intel") <<
Driver_Intel << QStringLiteral(
"Intel");
62 QTest::newRow(
"NVidia") <<
Driver_NVidia << QStringLiteral(
"NVIDIA");
63 QTest::newRow(
"Catalyst") <<
Driver_Catalyst << QStringLiteral(
"Catalyst");
64 QTest::newRow(
"Swrast") <<
Driver_Swrast << QStringLiteral(
"Software rasterizer");
65 QTest::newRow(
"Softpipe") <<
Driver_Softpipe << QStringLiteral(
"softpipe");
66 QTest::newRow(
"Llvmpipe") <<
Driver_Llvmpipe << QStringLiteral(
"LLVMpipe");
67 QTest::newRow(
"VirtualBox") <<
Driver_VirtualBox << QStringLiteral(
"VirtualBox (Chromium)");
68 QTest::newRow(
"VMware") <<
Driver_VMware << QStringLiteral(
"VMware (SVGA3D)");
69 QTest::newRow(
"Qualcomm") <<
Driver_Qualcomm << QStringLiteral(
"Qualcomm");
70 QTest::newRow(
"Virgl") <<
Driver_Virgl << QStringLiteral(
"Virgl (virtio-gpu, Qemu/KVM guest)");
71 QTest::newRow(
"Panfrost") <<
Driver_Panfrost << QStringLiteral(
"Panfrost");
72 QTest::newRow(
"Lima") <<
Driver_Lima << QStringLiteral(
"Mali (Lima)");
73 QTest::newRow(
"VC4") <<
Driver_VC4 << QStringLiteral(
"VideoCore IV");
74 QTest::newRow(
"V3D") <<
Driver_V3D << QStringLiteral(
"VideoCore 3D");
75 QTest::newRow(
"Unknown") <<
Driver_Unknown << QStringLiteral(
"Unknown");
78void GLPlatformTest::testDriverToString()
84void GLPlatformTest::testChipClassToString_data()
86 QTest::addColumn<ChipClass>(
"chipClass");
87 QTest::addColumn<QString>(
"expected");
89 QTest::newRow(
"R100") <<
R100 << QStringLiteral(
"R100");
90 QTest::newRow(
"R200") <<
R200 << QStringLiteral(
"R200");
91 QTest::newRow(
"R300") <<
R300 << QStringLiteral(
"R300");
92 QTest::newRow(
"R400") <<
R400 << QStringLiteral(
"R400");
93 QTest::newRow(
"R500") <<
R500 << QStringLiteral(
"R500");
94 QTest::newRow(
"R600") <<
R600 << QStringLiteral(
"R600");
95 QTest::newRow(
"R700") <<
R700 << QStringLiteral(
"R700");
96 QTest::newRow(
"Evergreen") <<
Evergreen << QStringLiteral(
"EVERGREEN");
97 QTest::newRow(
"NorthernIslands") <<
NorthernIslands << QStringLiteral(
"Northern Islands");
98 QTest::newRow(
"SouthernIslands") <<
SouthernIslands << QStringLiteral(
"Southern Islands");
99 QTest::newRow(
"SeaIslands") <<
SeaIslands << QStringLiteral(
"Sea Islands");
100 QTest::newRow(
"VolcanicIslands") <<
VolcanicIslands << QStringLiteral(
"Volcanic Islands");
101 QTest::newRow(
"Arctic Islands") <<
ArcticIslands << QStringLiteral(
"Arctic Islands");
102 QTest::newRow(
"Vega") <<
Vega << QStringLiteral(
"Vega");
103 QTest::newRow(
"UnknownRadeon") <<
UnknownRadeon << QStringLiteral(
"Unknown");
104 QTest::newRow(
"NV10") <<
NV10 << QStringLiteral(
"NV10");
105 QTest::newRow(
"NV20") <<
NV20 << QStringLiteral(
"NV20");
106 QTest::newRow(
"NV30") <<
NV30 << QStringLiteral(
"NV30");
107 QTest::newRow(
"NV40") <<
NV40 << QStringLiteral(
"NV40/G70");
108 QTest::newRow(
"G80") <<
G80 << QStringLiteral(
"G80/G90");
109 QTest::newRow(
"GF100") <<
GF100 << QStringLiteral(
"GF100");
110 QTest::newRow(
"UnknownNVidia") <<
UnknownNVidia << QStringLiteral(
"Unknown");
111 QTest::newRow(
"I8XX") <<
I8XX << QStringLiteral(
"i830/i835");
112 QTest::newRow(
"I915") <<
I915 << QStringLiteral(
"i915/i945");
113 QTest::newRow(
"I965") <<
I965 << QStringLiteral(
"i965");
114 QTest::newRow(
"SandyBridge") <<
SandyBridge << QStringLiteral(
"SandyBridge");
115 QTest::newRow(
"IvyBridge") <<
IvyBridge << QStringLiteral(
"IvyBridge");
116 QTest::newRow(
"Haswell") <<
Haswell << QStringLiteral(
"Haswell");
117 QTest::newRow(
"UnknownIntel") <<
UnknownIntel << QStringLiteral(
"Unknown");
118 QTest::newRow(
"Adreno1XX") <<
Adreno1XX << QStringLiteral(
"Adreno 1xx series");
119 QTest::newRow(
"Adreno2XX") <<
Adreno2XX << QStringLiteral(
"Adreno 2xx series");
120 QTest::newRow(
"Adreno3XX") <<
Adreno3XX << QStringLiteral(
"Adreno 3xx series");
121 QTest::newRow(
"Adreno4XX") <<
Adreno4XX << QStringLiteral(
"Adreno 4xx series");
122 QTest::newRow(
"Adreno5XX") <<
Adreno5XX << QStringLiteral(
"Adreno 5xx series");
123 QTest::newRow(
"UnknownAdreno") <<
UnknownAdreno << QStringLiteral(
"Unknown");
124 QTest::newRow(
"MaliT7XX") <<
MaliT7XX << QStringLiteral(
"Mali T7xx series");
125 QTest::newRow(
"MaliT8XX") <<
MaliT8XX << QStringLiteral(
"Mali T8xx series");
126 QTest::newRow(
"MaliGXX") <<
MaliGXX << QStringLiteral(
"Mali Gxx series");
127 QTest::newRow(
"UnknownPanfrost") <<
UnknownPanfrost << QStringLiteral(
"Unknown");
128 QTest::newRow(
"Mali400") <<
Mali400 << QStringLiteral(
"Mali 400 series");
129 QTest::newRow(
"Mali450") <<
Mali450 << QStringLiteral(
"Mali 450 series");
130 QTest::newRow(
"Mali470") <<
Mali470 << QStringLiteral(
"Mali 470 series");
131 QTest::newRow(
"UnknownLima") <<
UnknownLima << QStringLiteral(
"Unknown");
132 QTest::newRow(
"VC4_2_1") <<
VC4_2_1 << QStringLiteral(
"VideoCore IV");
133 QTest::newRow(
"UnknownVideoCore4") <<
UnknownVideoCore4 << QStringLiteral(
"Unknown");
134 QTest::newRow(
"V3D_4_2") <<
V3D_4_2 << QStringLiteral(
"VideoCore 3D");
135 QTest::newRow(
"UnknownVideoCore3D") <<
UnknownVideoCore3D << QStringLiteral(
"Unknown");
136 QTest::newRow(
"UnknownChipClass") <<
UnknownChipClass << QStringLiteral(
"Unknown");
139void GLPlatformTest::testChipClassToString()
145void GLPlatformTest::testPriorDetect()
149 QCOMPARE(gl->supports(GLFeature::LooseBinding),
false);
151 QCOMPARE(gl->glVersion(),
Version());
152 QCOMPARE(gl->glslVersion(),
Version());
153 QCOMPARE(gl->mesaVersion(),
Version());
154 QCOMPARE(gl->driverVersion(),
Version());
159 QCOMPARE(gl->isMesaDriver(),
false);
160 QCOMPARE(gl->isRadeon(),
false);
161 QCOMPARE(gl->isNvidia(),
false);
162 QCOMPARE(gl->isIntel(),
false);
163 QCOMPARE(gl->isPanfrost(),
false);
164 QCOMPARE(gl->isLima(),
false);
165 QCOMPARE(gl->isVideoCore4(),
false);
166 QCOMPARE(gl->isVideoCore3D(),
false);
168 QCOMPARE(gl->isVirtualBox(),
false);
169 QCOMPARE(gl->isVMware(),
false);
171 QCOMPARE(gl->isSoftwareEmulation(),
false);
172 QCOMPARE(gl->isVirtualMachine(),
false);
174 QCOMPARE(gl->glVersionString(), QByteArray());
175 QCOMPARE(gl->glRendererString(), QByteArray());
176 QCOMPARE(gl->glVendorString(), QByteArray());
177 QCOMPARE(gl->glShadingLanguageVersionString(), QByteArray());
179 QCOMPARE(gl->isLooseBinding(),
false);
180 QCOMPARE(gl->isGLES(),
false);
182 QCOMPARE(gl->preferBufferSubData(),
false);
186void GLPlatformTest::testDetect_data()
188 QTest::addColumn<QString>(
"configFile");
190 QDir dir(QFINDTESTDATA(
"data/glplatform"));
191 const QStringList entries = dir.entryList(QDir::NoDotAndDotDot | QDir::Files);
193 for (
const QString &file : entries) {
194 QTest::newRow(file.toUtf8().constData()) << dir.absoluteFilePath(file);
198static Version readVersion(
const KConfigGroup &group,
const char *entry)
200 const QStringList parts = group.readEntry(entry, QString()).split(
',');
201 if (parts.count() < 2) {
204 QList<qint64> versionParts;
205 for (
int i = 0; i < parts.count(); ++i) {
207 const auto value = parts.at(i).toLongLong(&ok);
209 versionParts << value;
214 while (versionParts.count() < 3) {
217 return Version(versionParts.at(0), versionParts.at(1), versionParts.at(2));
220void GLPlatformTest::testDetect()
222 QFETCH(QString, configFile);
223 KConfig config(configFile);
224 const KConfigGroup driverGroup = config.group(QStringLiteral(
"Driver"));
231 QByteArrayLiteral(
"GL_ARB_fragment_shader"),
232 QByteArrayLiteral(
"GL_ARB_vertex_shader"),
233 QByteArrayLiteral(
"GL_ARB_texture_non_power_of_two")};
241 const KConfigGroup settingsGroup = config.group(QStringLiteral(
"Settings"));
243 QCOMPARE(gl->supports(GLFeature::LooseBinding), settingsGroup.readEntry(
"LooseBinding",
false));
245 QCOMPARE(gl->glVersion(), readVersion(settingsGroup,
"GLVersion"));
246 QCOMPARE(gl->glslVersion(), readVersion(settingsGroup,
"GLSLVersion"));
247 QCOMPARE(gl->mesaVersion(), readVersion(settingsGroup,
"MesaVersion"));
248 QEXPECT_FAIL(
"amd-catalyst-radeonhd-7700M-3.1.13399",
"Detects GL version instead of driver version", Continue);
249 QCOMPARE(gl->driverVersion(), readVersion(settingsGroup,
"DriverVersion"));
254 QCOMPARE(gl->isMesaDriver(), settingsGroup.readEntry(
"Mesa",
false));
255 QCOMPARE(gl->isRadeon(), settingsGroup.readEntry(
"Radeon",
false));
256 QCOMPARE(gl->isNvidia(), settingsGroup.readEntry(
"Nvidia",
false));
257 QCOMPARE(gl->isIntel(), settingsGroup.readEntry(
"Intel",
false));
258 QCOMPARE(gl->isVirtualBox(), settingsGroup.readEntry(
"VirtualBox",
false));
259 QCOMPARE(gl->isVMware(), settingsGroup.readEntry(
"VMware",
false));
260 QCOMPARE(gl->isAdreno(), settingsGroup.readEntry(
"Adreno",
false));
261 QCOMPARE(gl->isPanfrost(), settingsGroup.readEntry(
"Panfrost",
false));
262 QCOMPARE(gl->isLima(), settingsGroup.readEntry(
"Lima",
false));
263 QCOMPARE(gl->isVideoCore4(), settingsGroup.readEntry(
"VC4",
false));
264 QCOMPARE(gl->isVideoCore3D(), settingsGroup.readEntry(
"V3D",
false));
265 QCOMPARE(gl->isVirgl(), settingsGroup.readEntry(
"Virgl",
false));
267 QCOMPARE(gl->isSoftwareEmulation(), settingsGroup.readEntry(
"SoftwareEmulation",
false));
268 QCOMPARE(gl->isVirtualMachine(), settingsGroup.readEntry(
"VirtualMachine",
false));
275 QCOMPARE(gl->isLooseBinding(), settingsGroup.readEntry(
"LooseBinding",
false));
276 QCOMPARE(gl->isGLES(), settingsGroup.readEntry(
"GLES",
false));
278 QCOMPARE(gl->preferBufferSubData(), settingsGroup.readEntry(
"PreferBufferSubData",
false));
282#include "kwinglplatformtest.moc"
void KWIN_EXPORT cleanupGL()
@ NoOpenGLPlatformInterface
QByteArray extensionsString
struct MockGL::@0 getString
QList< QByteArray > extensions
QByteArray shadingLanguageVersion