14#include "config-kwin.h"
19#ifndef GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV
20#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7
32 void testForwardCompatible();
34 void testResetOnVideoMemoryPurge();
35 void testVersionMajor();
36 void testVersionMajorAndMinor();
37 void testHighPriority();
49 std::vector<int>
build()
const override;
54 return std::vector<int>();
57void OpenGLContextAttributeBuilderTest::testCtor()
71void OpenGLContextAttributeBuilderTest::testRobust()
81void OpenGLContextAttributeBuilderTest::testForwardCompatible()
91void OpenGLContextAttributeBuilderTest::testProfile()
107void OpenGLContextAttributeBuilderTest::testResetOnVideoMemoryPurge()
117void OpenGLContextAttributeBuilderTest::testHighPriority()
127void OpenGLContextAttributeBuilderTest::testVersionMajor()
140void OpenGLContextAttributeBuilderTest::testVersionMajorAndMinor()
153void OpenGLContextAttributeBuilderTest::testEgl_data()
155 QTest::addColumn<bool>(
"requestVersion");
156 QTest::addColumn<int>(
"major");
157 QTest::addColumn<int>(
"minor");
158 QTest::addColumn<bool>(
"robust");
159 QTest::addColumn<bool>(
"forwardCompatible");
160 QTest::addColumn<bool>(
"coreProfile");
161 QTest::addColumn<bool>(
"compatibilityProfile");
162 QTest::addColumn<bool>(
"highPriority");
163 QTest::addColumn<std::vector<int>>(
"expectedAttribs");
165 QTest::newRow(
"fallback") << false << 0 << 0 << false << false << false << false << false << std::vector<int>{EGL_NONE};
166 QTest::newRow(
"legacy/robust")
167 <<
false << 0 << 0 <<
true <<
false <<
false <<
false <<
false
169 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
170 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR,
172 QTest::newRow(
"legacy/robust/high priority")
173 <<
false << 0 << 0 <<
true <<
false <<
false <<
false <<
true
175 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
176 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR,
177 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
179 QTest::newRow(
"core")
180 <<
true << 3 << 1 <<
false <<
false <<
false <<
false <<
false
182 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
183 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
185 QTest::newRow(
"core/high priority")
186 <<
true << 3 << 1 <<
false <<
false <<
false <<
false <<
true
188 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
189 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
190 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
192 QTest::newRow(
"core/robust")
193 <<
true << 3 << 1 <<
true <<
false <<
false <<
false <<
false
195 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
196 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
197 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
198 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR,
200 QTest::newRow(
"core/robust/high priority")
201 <<
true << 3 << 1 <<
true <<
false <<
false <<
false <<
true
203 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
204 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
205 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
206 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR,
207 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
209 QTest::newRow(
"core/robust/forward compatible")
210 <<
true << 3 << 1 <<
true <<
true <<
false <<
false <<
false
212 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
213 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
214 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
215 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
217 QTest::newRow(
"core/robust/forward compatible/high priority")
218 <<
true << 3 << 1 <<
true <<
true <<
false <<
false <<
true
220 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
221 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
222 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
223 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
224 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
226 QTest::newRow(
"core/forward compatible")
227 <<
true << 3 << 1 <<
false <<
true <<
false <<
false <<
false
229 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
230 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
231 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
233 QTest::newRow(
"core/forward compatible/high priority")
234 <<
true << 3 << 1 <<
false <<
true <<
false <<
false <<
true
236 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
237 EGL_CONTEXT_MINOR_VERSION_KHR, 1,
238 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
239 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
241 QTest::newRow(
"core profile/forward compatible")
242 <<
true << 3 << 2 <<
false <<
true <<
true <<
false <<
false
244 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
245 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
246 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
247 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR,
249 QTest::newRow(
"core profile/forward compatible/high priority")
250 <<
true << 3 << 2 <<
false <<
true <<
true <<
false <<
true
252 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
253 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
254 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
255 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR,
256 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
258 QTest::newRow(
"compatibility profile/forward compatible")
259 <<
true << 3 << 2 <<
false <<
true <<
false <<
true <<
false
261 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
262 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
263 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
264 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR,
266 QTest::newRow(
"compatibility profile/forward compatible/high priority")
267 <<
true << 3 << 2 <<
false <<
true <<
false <<
true <<
true
269 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
270 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
271 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
272 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR,
273 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
275 QTest::newRow(
"core profile/robust/forward compatible")
276 <<
true << 3 << 2 <<
true <<
true <<
true <<
false <<
false
278 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
279 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
280 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
281 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
282 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR,
284 QTest::newRow(
"core profile/robust/forward compatible/high priority")
285 <<
true << 3 << 2 <<
true <<
true <<
true <<
false <<
true
287 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
288 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
289 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
290 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
291 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR,
292 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
294 QTest::newRow(
"compatibility profile/robust/forward compatible")
295 <<
true << 3 << 2 <<
true <<
true <<
false <<
true <<
false
297 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
298 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
299 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
300 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
301 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR,
303 QTest::newRow(
"compatibility profile/robust/forward compatible/high priority")
304 <<
true << 3 << 2 <<
true <<
true <<
false <<
true <<
true
306 EGL_CONTEXT_MAJOR_VERSION_KHR, 3,
307 EGL_CONTEXT_MINOR_VERSION_KHR, 2,
308 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR, EGL_LOSE_CONTEXT_ON_RESET_KHR,
309 EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR,
310 EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR,
311 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
315void OpenGLContextAttributeBuilderTest::testEgl()
317 QFETCH(
bool, requestVersion);
320 QFETCH(
bool, robust);
321 QFETCH(
bool, forwardCompatible);
322 QFETCH(
bool, coreProfile);
323 QFETCH(
bool, compatibilityProfile);
324 QFETCH(
bool, highPriority);
327 if (requestVersion) {
336 auto attribs = builder.
build();
337 QTEST(attribs,
"expectedAttribs");
340void OpenGLContextAttributeBuilderTest::testGles_data()
342 QTest::addColumn<bool>(
"robust");
343 QTest::addColumn<bool>(
"highPriority");
344 QTest::addColumn<std::vector<int>>(
"expectedAttribs");
346 QTest::newRow(
"robust")
349 EGL_CONTEXT_CLIENT_VERSION, 2,
350 EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE,
351 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT, EGL_LOSE_CONTEXT_ON_RESET_EXT,
353 QTest::newRow(
"robust/high priority")
356 EGL_CONTEXT_CLIENT_VERSION, 2,
357 EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT, EGL_TRUE,
358 EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT, EGL_LOSE_CONTEXT_ON_RESET_EXT,
359 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
361 QTest::newRow(
"normal")
364 EGL_CONTEXT_CLIENT_VERSION, 2,
366 QTest::newRow(
"normal/high priority")
369 EGL_CONTEXT_CLIENT_VERSION, 2,
370 EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_HIGH_IMG,
374void OpenGLContextAttributeBuilderTest::testGles()
376 QFETCH(
bool, robust);
377 QFETCH(
bool, highPriority);
384 auto attribs = builder.
build();
385 QTEST(attribs,
"expectedAttribs");
388void OpenGLContextAttributeBuilderTest::testGlx_data()
391 QTest::addColumn<bool>(
"requestVersion");
392 QTest::addColumn<int>(
"major");
393 QTest::addColumn<int>(
"minor");
394 QTest::addColumn<bool>(
"robust");
395 QTest::addColumn<bool>(
"videoPurge");
396 QTest::addColumn<std::vector<int>>(
"expectedAttribs");
398 QTest::newRow(
"fallback")
399 <<
true << 2 << 1 <<
false <<
false
401 GLX_CONTEXT_MAJOR_VERSION_ARB, 2,
402 GLX_CONTEXT_MINOR_VERSION_ARB, 1,
404 QTest::newRow(
"legacy/robust")
405 <<
false << 0 << 0 <<
true <<
false
407 GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
408 GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB,
410 QTest::newRow(
"legacy/robust/videoPurge")
411 <<
false << 0 << 0 <<
true <<
true
413 GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
414 GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB,
417 QTest::newRow(
"core")
418 <<
true << 3 << 1 <<
false <<
false
420 GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
421 GLX_CONTEXT_MINOR_VERSION_ARB, 1,
423 QTest::newRow(
"core/robust")
424 <<
true << 3 << 1 <<
true <<
false
426 GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
427 GLX_CONTEXT_MINOR_VERSION_ARB, 1,
428 GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
429 GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB,
431 QTest::newRow(
"core/robust/videoPurge")
432 <<
true << 3 << 1 <<
true <<
true
434 GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
435 GLX_CONTEXT_MINOR_VERSION_ARB, 1,
436 GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB,
437 GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, GLX_LOSE_CONTEXT_ON_RESET_ARB,
443void OpenGLContextAttributeBuilderTest::testGlx()
446 QFETCH(
bool, requestVersion);
449 QFETCH(
bool, robust);
450 QFETCH(
bool, videoPurge);
453 if (requestVersion) {
459 auto attribs = builder.
build();
460 QTEST(attribs,
"expectedAttribs");
465#include "opengl_context_attribute_builder_test.moc"
bool isResetOnVideoMemoryPurge() const
bool isCoreProfile() const
void setCompatibilityProfile(bool compatibility)
bool isCompatibilityProfile() const
void setVersion(int major, int minor=0)
void setRobust(bool robust)
void setCoreProfile(bool core)
void setForwardCompatible(bool forward)
bool isVersionRequested() const
void setHighPriority(bool highPriority)
void setResetOnVideoMemoryPurge(bool reset)
bool isHighPriority() const
bool isForwardCompatible() const
std::vector< int > build() const override
std::vector< int > build() const override
std::vector< int > build() const override
std::vector< int > build() const override
#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV