2 * Copyright © 2011 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
23 #include <gtest/gtest.h>
26 #include "glxclient.h"
30 #include "mock_xdisplay.h"
31 #include "fake_glx_screen.h"
34 * \name Wrappers around some X structures to make the more usable for tests
37 class fake_glx_screen
;
39 class fake_glx_display
: public glx_display
{
41 fake_glx_display(mock_XDisplay
*dpy
, int major
, int minor
)
45 this->majorOpcode
= 0;
46 this->majorVersion
= major
;
47 this->minorVersion
= minor
;
48 this->serverGLXvendor
= 0;
49 this->serverGLXversion
= 0;
50 this->glXDrawHash
= 0;
52 this->screens
= new glx_screen
*[dpy
->nscreens
];
53 memset(this->screens
, 0, sizeof(struct glx_screen
*) * dpy
->nscreens
);
58 for (int i
= 0; i
< this->dpy
->nscreens
; i
++) {
59 if (this->screens
[i
] != NULL
)
60 delete this->screens
[i
];
63 delete [] this->screens
;
66 void init_screen(int i
, const char *ext
);
69 class glX_send_client_info_test
: public ::testing::Test
{
71 glX_send_client_info_test();
72 virtual ~glX_send_client_info_test();
75 void common_protocol_expected_false_test(unsigned major
, unsigned minor
,
76 const char *glx_ext
, bool *value
);
78 void common_protocol_expected_true_test(unsigned major
, unsigned minor
,
79 const char *glx_ext
, bool *value
);
81 void create_single_screen_display(unsigned major
, unsigned minor
,
84 void destroy_display();
87 fake_glx_display
*glx_dpy
;
88 mock_XDisplay
*display
;
92 fake_glx_display::init_screen(int i
, const char *ext
)
94 if (this->screens
[i
] != NULL
)
95 delete this->screens
[i
];
97 this->screens
[i
] = new fake_glx_screen(this, i
, ext
);
101 static const char ext
[] = "GL_XXX_dummy";
103 static bool ClientInfo_was_sent
;
104 static bool SetClientInfoARB_was_sent
;
105 static bool SetClientInfo2ARB_was_sent
;
106 static xcb_connection_t
*connection_used
;
107 static int gl_ext_length
;
108 static char *gl_ext_string
;
109 static int glx_ext_length
;
110 static char *glx_ext_string
;
111 static int num_gl_versions
;
112 static uint32_t *gl_versions
;
113 static int glx_major
;
114 static int glx_minor
;
116 extern "C" xcb_connection_t
*
117 XGetXCBConnection(Display
*dpy
)
119 return (xcb_connection_t
*) 0xdeadbeef;
122 extern "C" xcb_void_cookie_t
123 xcb_glx_client_info(xcb_connection_t
*c
,
124 uint32_t major_version
,
125 uint32_t minor_version
,
129 xcb_void_cookie_t cookie
;
131 ClientInfo_was_sent
= true;
134 gl_ext_string
= (char *) malloc(str_len
);
135 memcpy(gl_ext_string
, string
, str_len
);
136 gl_ext_length
= str_len
;
138 glx_major
= major_version
;
139 glx_minor
= minor_version
;
145 extern "C" xcb_void_cookie_t
146 xcb_glx_set_client_info_arb(xcb_connection_t
*c
,
147 uint32_t major_version
,
148 uint32_t minor_version
,
149 uint32_t num_versions
,
151 uint32_t glx_str_len
,
152 const uint32_t *versions
,
153 const char *gl_string
,
154 const char *glx_string
)
156 xcb_void_cookie_t cookie
;
158 SetClientInfoARB_was_sent
= true;
161 gl_ext_string
= new char[gl_str_len
];
162 memcpy(gl_ext_string
, gl_string
, gl_str_len
);
163 gl_ext_length
= gl_str_len
;
165 glx_ext_string
= new char[glx_str_len
];
166 memcpy(glx_ext_string
, glx_string
, glx_str_len
);
167 glx_ext_length
= glx_str_len
;
169 gl_versions
= new uint32_t[num_versions
* 2];
170 memcpy(gl_versions
, versions
, sizeof(uint32_t) * num_versions
* 2);
171 num_gl_versions
= num_versions
;
173 glx_major
= major_version
;
174 glx_minor
= minor_version
;
180 extern "C" xcb_void_cookie_t
181 xcb_glx_set_client_info_2arb(xcb_connection_t
*c
,
182 uint32_t major_version
,
183 uint32_t minor_version
,
184 uint32_t num_versions
,
186 uint32_t glx_str_len
,
187 const uint32_t *versions
,
188 const char *gl_string
,
189 const char *glx_string
)
191 xcb_void_cookie_t cookie
;
193 SetClientInfo2ARB_was_sent
= true;
196 gl_ext_string
= new char[gl_str_len
];
197 memcpy(gl_ext_string
, gl_string
, gl_str_len
);
198 gl_ext_length
= gl_str_len
;
200 glx_ext_string
= new char[glx_str_len
];
201 memcpy(glx_ext_string
, glx_string
, glx_str_len
);
202 glx_ext_length
= glx_str_len
;
204 gl_versions
= new uint32_t[num_versions
* 3];
205 memcpy(gl_versions
, versions
, sizeof(uint32_t) * num_versions
* 3);
206 num_gl_versions
= num_versions
;
208 glx_major
= major_version
;
209 glx_minor
= minor_version
;
216 __glXGetClientGLExtensionString()
218 char *str
= (char *) malloc(sizeof(ext
));
220 memcpy(str
, ext
, sizeof(ext
));
224 glX_send_client_info_test::glX_send_client_info_test()
225 : glx_dpy(0), display(0)
230 glX_send_client_info_test::~glX_send_client_info_test()
240 glX_send_client_info_test::destroy_display()
242 if (this->glx_dpy
!= NULL
) {
243 if (this->glx_dpy
->screens
!= NULL
) {
244 for (int i
= 0; i
< this->display
->nscreens
; i
++) {
245 delete [] this->glx_dpy
->screens
[i
]->serverGLXexts
;
246 delete this->glx_dpy
->screens
[i
];
249 delete [] this->glx_dpy
->screens
;
252 delete this->glx_dpy
;
253 delete this->display
;
258 glX_send_client_info_test::SetUp()
260 ClientInfo_was_sent
= false;
261 SetClientInfoARB_was_sent
= false;
262 SetClientInfo2ARB_was_sent
= false;
263 connection_used
= (xcb_connection_t
*) ~0;
265 gl_ext_string
= (char *) 0;
267 glx_ext_string
= (char *) 0;
269 gl_versions
= (uint32_t *) 0;
275 glX_send_client_info_test::create_single_screen_display(unsigned major
,
279 this->display
= new mock_XDisplay(1);
281 this->glx_dpy
= new fake_glx_display(this->display
, major
, minor
);
282 this->glx_dpy
->init_screen(0, glx_ext
);
286 glX_send_client_info_test::common_protocol_expected_false_test(unsigned major
,
291 create_single_screen_display(major
, minor
, glx_ext
);
292 __glX_send_client_info(this->glx_dpy
);
293 EXPECT_FALSE(*value
);
297 glX_send_client_info_test::common_protocol_expected_true_test(unsigned major
,
302 create_single_screen_display(major
, minor
, glx_ext
);
303 __glX_send_client_info(this->glx_dpy
);
307 TEST_F(glX_send_client_info_test
, doesnt_send_ClientInfo_for_1_0
)
309 /* The glXClientInfo protocol was added in GLX 1.1. Verify that no
310 * glXClientInfo is sent to a GLX server that only has GLX 1.0.
312 common_protocol_expected_false_test(1, 0, "", &ClientInfo_was_sent
);
315 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_0
)
317 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
318 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
319 * sent to a GLX server that only has GLX 1.0 regardless of the extension
322 common_protocol_expected_false_test(1, 0,
323 "GLX_ARB_create_context",
324 &SetClientInfoARB_was_sent
);
327 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_1
)
329 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
330 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
331 * sent to a GLX server that only has GLX 1.0 regardless of the extension
334 common_protocol_expected_false_test(1, 1,
335 "GLX_ARB_create_context",
336 &SetClientInfoARB_was_sent
);
339 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_4_with_empty_extensions
)
341 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
342 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
343 * sent to a GLX server that has GLX 1.4 but has an empty extension string
344 * (i.e., no extensions at all).
346 common_protocol_expected_false_test(1, 4,
348 &SetClientInfoARB_was_sent
);
351 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_4_without_extension
)
353 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
354 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
355 * sent to a GLX server that has GLX 1.4 but doesn't have the extension.
357 common_protocol_expected_false_test(1, 4,
358 "GLX_EXT_texture_from_pixmap",
359 &SetClientInfoARB_was_sent
);
362 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_4_with_wrong_extension
)
364 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
365 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
366 * sent to a GLX server that has GLX 1.4 but does not have the extension.
368 * This test differs from
369 * doesnt_send_SetClientInfoARB_for_1_4_without_extension in that an
370 * extension exists that looks like the correct extension but isn't.
372 common_protocol_expected_false_test(1, 4,
373 "GLX_ARB_create_context2",
374 &SetClientInfoARB_was_sent
);
377 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfoARB_for_1_4_with_profile_extension
)
379 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
380 * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is
381 * sent to a GLX server that has GLX 1.4 but does not have the extension.
383 * This test differs from
384 * doesnt_send_SetClientInfoARB_for_1_4_without_extension in that an
385 * extension exists that looks like the correct extension but isn't.
387 common_protocol_expected_false_test(1, 4,
388 "GLX_ARB_create_context_profile",
389 &SetClientInfoARB_was_sent
);
392 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfo2ARB_for_1_0
)
394 /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the
395 * GLX_ARB_create_context_profile extension. Verify that no
396 * glXSetClientInfo2ARB is sent to a GLX server that only has GLX 1.0
397 * regardless of the extension setting.
399 common_protocol_expected_false_test(1, 0,
400 "GLX_ARB_create_context_profile",
401 &SetClientInfo2ARB_was_sent
);
404 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfo2ARB_for_1_1
)
406 /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the
407 * GLX_ARB_create_context_profile extension. Verify that no
408 * glXSetClientInfo2ARB is sent to a GLX server that only has GLX 1.1
409 * regardless of the extension setting.
411 common_protocol_expected_false_test(1, 1,
412 "GLX_ARB_create_context_profile",
413 &SetClientInfo2ARB_was_sent
);
416 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfo2ARB_for_1_4_with_empty_extensions
)
418 /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the
419 * GLX_ARB_create_context_profile extension. Verify that no
420 * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but has an
421 * empty extension string (i.e., no extensions at all).
423 common_protocol_expected_false_test(1, 4,
425 &SetClientInfo2ARB_was_sent
);
428 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfo2ARB_for_1_4_without_extension
)
430 /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the
431 * GLX_ARB_create_context_profile extension. Verify that no
432 * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but
433 * doesn't have the extension.
435 common_protocol_expected_false_test(1, 4,
436 "GLX_EXT_texture_from_pixmap",
437 &SetClientInfo2ARB_was_sent
);
440 TEST_F(glX_send_client_info_test
, doesnt_send_SetClientInfo2ARB_for_1_4_with_wrong_extension
)
442 /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the
443 * GLX_ARB_create_context_profile extension. Verify that no
444 * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but does
445 * not have the extension.
447 * This test differs from
448 * doesnt_send_SetClientInfo2ARB_for_1_4_without_extension in that an
449 * extension exists that looks like the correct extension but isn't.
451 common_protocol_expected_false_test(1, 4,
452 "GLX_ARB_create_context_profile2",
453 &SetClientInfo2ARB_was_sent
);
456 TEST_F(glX_send_client_info_test
, does_send_ClientInfo_for_1_1
)
458 /* The glXClientInfo protocol was added in GLX 1.1. Verify that
459 * glXClientInfo is sent to a GLX server that has GLX 1.1.
461 common_protocol_expected_true_test(1, 1,
463 &ClientInfo_was_sent
);
466 TEST_F(glX_send_client_info_test
, does_send_SetClientInfoARB_for_1_4_with_extension
)
468 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
469 * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is
470 * sent to a GLX server that has GLX 1.4 and the extension.
472 common_protocol_expected_true_test(1, 4,
473 "GLX_ARB_create_context",
474 &SetClientInfoARB_was_sent
);
477 TEST_F(glX_send_client_info_test
, does_send_SetClientInfo2ARB_for_1_4_with_just_profile_extension
)
479 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
480 * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is
481 * sent to a GLX server that has GLX 1.4 and the extension.
483 common_protocol_expected_true_test(1, 4,
484 "GLX_ARB_create_context_profile",
485 &SetClientInfo2ARB_was_sent
);
488 TEST_F(glX_send_client_info_test
, does_send_SetClientInfo2ARB_for_1_4_with_both_extensions
)
490 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
491 * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is
492 * sent to a GLX server that has GLX 1.4 and the extension.
494 common_protocol_expected_true_test(1, 4,
495 "GLX_ARB_create_context "
496 "GLX_ARB_create_context_profile",
497 &SetClientInfo2ARB_was_sent
);
500 TEST_F(glX_send_client_info_test
, does_send_SetClientInfo2ARB_for_1_4_with_both_extensions_reversed
)
502 /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the
503 * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is
504 * sent to a GLX server that has GLX 1.4 and the extension.
506 common_protocol_expected_true_test(1, 4,
507 "GLX_ARB_create_context_profile "
508 "GLX_ARB_create_context",
509 &SetClientInfo2ARB_was_sent
);
512 TEST_F(glX_send_client_info_test
, uses_correct_connection
)
514 create_single_screen_display(1, 1, "");
515 __glX_send_client_info(this->glx_dpy
);
516 EXPECT_EQ((xcb_connection_t
*) 0xdeadbeef, connection_used
);
519 TEST_F(glX_send_client_info_test
, sends_correct_gl_extension_string
)
521 create_single_screen_display(1, 1, "");
522 __glX_send_client_info(this->glx_dpy
);
524 ASSERT_EQ((int) sizeof(ext
), gl_ext_length
);
525 ASSERT_NE((char *) 0, gl_ext_string
);
526 EXPECT_EQ(0, memcmp(gl_ext_string
, ext
, sizeof(ext
)));
529 TEST_F(glX_send_client_info_test
, gl_versions_are_sane
)
531 create_single_screen_display(1, 4, "GLX_ARB_create_context");
532 __glX_send_client_info(this->glx_dpy
);
534 ASSERT_NE(0, num_gl_versions
);
536 unsigned versions_below_3_0
= 0;
537 for (int i
= 0; i
< num_gl_versions
; i
++) {
538 EXPECT_LT(0u, gl_versions
[i
* 2]);
539 EXPECT_GE(4u, gl_versions
[i
* 2]);
541 /* Verify that the minor version advertised with the major version makes
544 switch (gl_versions
[i
* 2]) {
546 EXPECT_GE(5u, gl_versions
[i
* 2 + 1]);
547 versions_below_3_0
++;
550 EXPECT_GE(1u, gl_versions
[i
* 2 + 1]);
551 versions_below_3_0
++;
554 EXPECT_GE(3u, gl_versions
[i
* 2 + 1]);
557 EXPECT_GE(2u, gl_versions
[i
* 2 + 1]);
562 /* From the GLX_ARB_create_context spec:
564 * "Only the highest supported version below 3.0 should be sent, since
565 * OpenGL 2.1 is backwards compatible with all earlier versions."
567 EXPECT_LE(versions_below_3_0
, 1u);
570 TEST_F(glX_send_client_info_test
, gl_versions_and_profiles_are_sane
)
572 create_single_screen_display(1, 4, "GLX_ARB_create_context_profile");
573 __glX_send_client_info(this->glx_dpy
);
575 ASSERT_NE(0, num_gl_versions
);
577 const uint32_t all_valid_bits
= GLX_CONTEXT_CORE_PROFILE_BIT_ARB
578 | GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB
;
580 unsigned versions_below_3_0
= 0;
582 for (int i
= 0; i
< num_gl_versions
; i
++) {
583 EXPECT_LT(0u, gl_versions
[i
* 3]);
584 EXPECT_GE(4u, gl_versions
[i
* 3]);
586 /* Verify that the minor version advertised with the major version makes
589 switch (gl_versions
[i
* 3]) {
591 EXPECT_GE(5u, gl_versions
[i
* 3 + 1]);
592 EXPECT_EQ(0u, gl_versions
[i
* 3 + 2]);
593 versions_below_3_0
++;
596 EXPECT_GE(1u, gl_versions
[i
* 3 + 1]);
597 EXPECT_EQ(0u, gl_versions
[i
* 3 + 2]);
598 versions_below_3_0
++;
601 EXPECT_GE(3u, gl_versions
[i
* 3 + 1]);
603 /* Profiles were not introduced until OpenGL 3.2.
605 if (gl_versions
[i
* 3 + 1] < 2) {
606 EXPECT_EQ(0u, gl_versions
[i
* 3 + 2]);
608 EXPECT_EQ(0u, gl_versions
[i
* 3 + 2] & ~all_valid_bits
);
612 EXPECT_GE(2u, gl_versions
[i
* 3 + 1]);
613 EXPECT_EQ(0u, gl_versions
[i
* 3 + 2] & ~all_valid_bits
);
618 /* From the GLX_ARB_create_context_profile spec:
620 * "Only the highest supported version below 3.0 should be sent, since
621 * OpenGL 2.1 is backwards compatible with all earlier versions."
623 EXPECT_LE(versions_below_3_0
, 1u);
626 TEST_F(glX_send_client_info_test
, glx_version_is_1_4_for_1_1
)
628 create_single_screen_display(1, 1, "");
629 __glX_send_client_info(this->glx_dpy
);
631 EXPECT_EQ(1, glx_major
);
632 EXPECT_EQ(4, glx_minor
);
635 TEST_F(glX_send_client_info_test
, glx_version_is_1_4_for_1_4
)
637 create_single_screen_display(1, 4, "");
638 __glX_send_client_info(this->glx_dpy
);
640 EXPECT_EQ(1, glx_major
);
641 EXPECT_EQ(4, glx_minor
);
644 TEST_F(glX_send_client_info_test
, glx_version_is_1_4_for_1_4_with_ARB_create_context
)
646 create_single_screen_display(1, 4, "GLX_ARB_create_context");
647 __glX_send_client_info(this->glx_dpy
);
649 EXPECT_EQ(1, glx_major
);
650 EXPECT_EQ(4, glx_minor
);
653 TEST_F(glX_send_client_info_test
, glx_version_is_1_4_for_1_4_with_ARB_create_context_profile
)
655 create_single_screen_display(1, 4, "GLX_ARB_create_context_profile");
656 __glX_send_client_info(this->glx_dpy
);
658 EXPECT_EQ(1, glx_major
);
659 EXPECT_EQ(4, glx_minor
);
662 TEST_F(glX_send_client_info_test
, glx_version_is_1_4_for_1_5
)
664 create_single_screen_display(1, 5, "");
665 __glX_send_client_info(this->glx_dpy
);
667 EXPECT_EQ(1, glx_major
);
668 EXPECT_EQ(4, glx_minor
);
671 TEST_F(glX_send_client_info_test
, glx_extensions_has_GLX_ARB_create_context
)
673 create_single_screen_display(1, 4, "GLX_ARB_create_context");
674 __glX_send_client_info(this->glx_dpy
);
676 ASSERT_NE(0, glx_ext_length
);
677 ASSERT_NE((char *) 0, glx_ext_string
);
679 bool found_GLX_ARB_create_context
= false;
680 const char *const needle
= "GLX_ARB_create_context";
681 const unsigned len
= strlen(needle
);
682 char *haystack
= glx_ext_string
;
683 while (haystack
!= NULL
) {
684 char *match
= strstr(haystack
, needle
);
686 if (match
[len
] == '\0' || match
[len
] == ' ') {
687 found_GLX_ARB_create_context
= true;
691 haystack
= match
+ len
;
694 EXPECT_TRUE(found_GLX_ARB_create_context
);
697 TEST_F(glX_send_client_info_test
, glx_extensions_has_GLX_ARB_create_context_profile
)
699 create_single_screen_display(1, 4, "GLX_ARB_create_context_profile");
700 __glX_send_client_info(this->glx_dpy
);
702 ASSERT_NE(0, glx_ext_length
);
703 ASSERT_NE((char *) 0, glx_ext_string
);
705 bool found_GLX_ARB_create_context_profile
= false;
706 const char *const needle
= "GLX_ARB_create_context_profile";
707 const unsigned len
= strlen(needle
);
708 char *haystack
= glx_ext_string
;
709 while (haystack
!= NULL
) {
710 char *match
= strstr(haystack
, needle
);
712 if (match
[len
] == '\0' || match
[len
] == ' ') {
713 found_GLX_ARB_create_context_profile
= true;
717 haystack
= match
+ len
;
720 EXPECT_TRUE(found_GLX_ARB_create_context_profile
);