1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright © 2011 Intel Corporation 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software. 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DEALINGS IN THE SOFTWARE. 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <gtest/gtest.h> 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <string.h> 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxclient.h" 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <xcb/glx.h> 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "mock_xdisplay.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "fake_glx_screen.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * \name Wrappers around some X structures to make the more usable for tests 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@{*/ 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass fake_glx_screen; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass fake_glx_display : public glx_display { 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic: 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fake_glx_display(mock_XDisplay *dpy, int major, int minor) 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->next = 0; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->dpy = dpy; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->majorOpcode = 0; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->majorVersion = major; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->minorVersion = minor; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->serverGLXvendor = 0; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->serverGLXversion = 0; 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->glXDrawHash = 0; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->screens = new glx_screen *[dpy->nscreens]; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(this->screens, 0, sizeof(struct glx_screen *) * dpy->nscreens); 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ~fake_glx_display() 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (int i = 0; i < this->dpy->nscreens; i++) { 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (this->screens[i] != NULL) 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete this->screens[i]; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete [] this->screens; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void init_screen(int i, const char *ext); 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass glX_send_client_info_test : public ::testing::Test { 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic: 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glX_send_client_info_test(); 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual ~glX_send_client_info_test(); 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org virtual void SetUp(); 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void common_protocol_expected_false_test(unsigned major, unsigned minor, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext, bool *value); 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void common_protocol_expected_true_test(unsigned major, unsigned minor, 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext, bool *value); 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void create_single_screen_display(unsigned major, unsigned minor, 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext); 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void destroy_display(); 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgprotected: 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fake_glx_display *glx_dpy; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org mock_XDisplay *display; 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfake_glx_display::init_screen(int i, const char *ext) 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (this->screens[i] != NULL) 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete this->screens[i]; 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->screens[i] = new fake_glx_screen(this, i, ext); 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*@}*/ 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const char ext[] = "GL_XXX_dummy"; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic bool ClientInfo_was_sent; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic bool SetClientInfoARB_was_sent; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic bool SetClientInfo2ARB_was_sent; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic xcb_connection_t *connection_used; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int gl_ext_length; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char *gl_ext_string; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int glx_ext_length; 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic char *glx_ext_string; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int num_gl_versions; 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic uint32_t *gl_versions; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int glx_major; 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int glx_minor; 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" xcb_connection_t * 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgXGetXCBConnection(Display *dpy) 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return (xcb_connection_t *) 0xdeadbeef; 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" xcb_void_cookie_t 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgxcb_glx_client_info(xcb_connection_t *c, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t major_version, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t minor_version, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t str_len, 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *string) 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xcb_void_cookie_t cookie; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ClientInfo_was_sent = true; 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org connection_used = c; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_string = (char *) malloc(str_len); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(gl_ext_string, string, str_len); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_length = str_len; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_major = major_version; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_minor = minor_version; 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cookie.sequence = 0; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return cookie; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" xcb_void_cookie_t 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgxcb_glx_set_client_info_arb(xcb_connection_t *c, 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t major_version, 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t minor_version, 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t num_versions, 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t gl_str_len, 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t glx_str_len, 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const uint32_t *versions, 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *gl_string, 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_string) 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xcb_void_cookie_t cookie; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetClientInfoARB_was_sent = true; 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org connection_used = c; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_string = new char[gl_str_len]; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(gl_ext_string, gl_string, gl_str_len); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_length = gl_str_len; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_string = new char[glx_str_len]; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(glx_ext_string, glx_string, glx_str_len); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_length = glx_str_len; 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_versions = new uint32_t[num_versions * 2]; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(gl_versions, versions, sizeof(uint32_t) * num_versions * 2); 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_gl_versions = num_versions; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_major = major_version; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_minor = minor_version; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cookie.sequence = 0; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return cookie; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" xcb_void_cookie_t 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgxcb_glx_set_client_info_2arb(xcb_connection_t *c, 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t major_version, 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t minor_version, 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t num_versions, 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t gl_str_len, 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint32_t glx_str_len, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const uint32_t *versions, 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *gl_string, 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_string) 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xcb_void_cookie_t cookie; 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetClientInfo2ARB_was_sent = true; 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org connection_used = c; 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_string = new char[gl_str_len]; 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(gl_ext_string, gl_string, gl_str_len); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_length = gl_str_len; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_string = new char[glx_str_len]; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(glx_ext_string, glx_string, glx_str_len); 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_length = glx_str_len; 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_versions = new uint32_t[num_versions * 3]; 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(gl_versions, versions, sizeof(uint32_t) * num_versions * 3); 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_gl_versions = num_versions; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_major = major_version; 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_minor = minor_version; 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cookie.sequence = 0; 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return cookie; 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" char * 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org__glXGetClientGLExtensionString() 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *str = (char *) malloc(sizeof(ext)); 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(str, ext, sizeof(ext)); 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return str; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::glX_send_client_info_test() 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org : glx_dpy(0), display(0) 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* empty */ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::~glX_send_client_info_test() 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (glx_dpy) 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete glx_dpy; 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (display) 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete display; 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::destroy_display() 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (this->glx_dpy != NULL) { 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (this->glx_dpy->screens != NULL) { 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (int i = 0; i < this->display->nscreens; i++) { 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete [] this->glx_dpy->screens[i]->serverGLXexts; 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete this->glx_dpy->screens[i]; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete [] this->glx_dpy->screens; 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete this->glx_dpy; 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delete this->display; 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::SetUp() 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ClientInfo_was_sent = false; 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetClientInfoARB_was_sent = false; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org SetClientInfo2ARB_was_sent = false; 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org connection_used = (xcb_connection_t *) ~0; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_length = 0; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_ext_string = (char *) 0; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_length = 0; 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_ext_string = (char *) 0; 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org num_gl_versions = 0; 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org gl_versions = (uint32_t *) 0; 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_major = 0; 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org glx_minor = 0; 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::create_single_screen_display(unsigned major, 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned minor, 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext) 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->display = new mock_XDisplay(1); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->glx_dpy = new fake_glx_display(this->display, major, minor); 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org this->glx_dpy->init_screen(0, glx_ext); 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::common_protocol_expected_false_test(unsigned major, 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned minor, 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext, 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool *value) 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(major, minor, glx_ext); 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_FALSE(*value); 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgglX_send_client_info_test::common_protocol_expected_true_test(unsigned major, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned minor, 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *glx_ext, 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool *value) 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(major, minor, glx_ext); 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_TRUE(*value); 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_ClientInfo_for_1_0) 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXClientInfo protocol was added in GLX 1.1. Verify that no 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXClientInfo is sent to a GLX server that only has GLX 1.0. 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 0, "", &ClientInfo_was_sent); 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_0) 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that only has GLX 1.0 regardless of the extension 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * setting. 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 0, 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context", 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_1) 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that only has GLX 1.0 regardless of the extension 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * setting. 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 1, 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context", 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_4_with_empty_extensions) 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 but has an empty extension string 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * (i.e., no extensions at all). 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "", 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_4_without_extension) 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 but doesn't have the extension. 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_texture_from_pixmap", 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_4_with_wrong_extension) 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 but does not have the extension. 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This test differs from 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * doesnt_send_SetClientInfoARB_for_1_4_without_extension in that an 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extension exists that looks like the correct extension but isn't. 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context2", 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfoARB_for_1_4_with_profile_extension) 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that no glXSetClientInfoARB is 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 but does not have the extension. 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This test differs from 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * doesnt_send_SetClientInfoARB_for_1_4_without_extension in that an 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extension exists that looks like the correct extension but isn't. 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile", 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfo2ARB_for_1_0) 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context_profile extension. Verify that no 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXSetClientInfo2ARB is sent to a GLX server that only has GLX 1.0 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * regardless of the extension setting. 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 0, 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile", 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfo2ARB_for_1_1) 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context_profile extension. Verify that no 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXSetClientInfo2ARB is sent to a GLX server that only has GLX 1.1 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * regardless of the extension setting. 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 1, 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile", 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfo2ARB_for_1_4_with_empty_extensions) 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context_profile extension. Verify that no 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but has an 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * empty extension string (i.e., no extensions at all). 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "", 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfo2ARB_for_1_4_without_extension) 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context_profile extension. Verify that no 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * doesn't have the extension. 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_EXT_texture_from_pixmap", 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, doesnt_send_SetClientInfo2ARB_for_1_4_with_wrong_extension) 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfo2ARB protocol was added in GLX 1.4 with the 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context_profile extension. Verify that no 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXSetClientInfo2ARB is sent to a GLX server that has GLX 1.4 but does 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * not have the extension. 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * This test differs from 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * doesnt_send_SetClientInfo2ARB_for_1_4_without_extension in that an 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * extension exists that looks like the correct extension but isn't. 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_false_test(1, 4, 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile2", 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, does_send_ClientInfo_for_1_1) 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXClientInfo protocol was added in GLX 1.1. Verify that 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * glXClientInfo is sent to a GLX server that has GLX 1.1. 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_true_test(1, 1, 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "", 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &ClientInfo_was_sent); 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, does_send_SetClientInfoARB_for_1_4_with_extension) 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 and the extension. 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_true_test(1, 4, 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context", 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfoARB_was_sent); 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, does_send_SetClientInfo2ARB_for_1_4_with_just_profile_extension) 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 and the extension. 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_true_test(1, 4, 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile", 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, does_send_SetClientInfo2ARB_for_1_4_with_both_extensions) 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 and the extension. 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_true_test(1, 4, 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context " 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile", 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, does_send_SetClientInfo2ARB_for_1_4_with_both_extensions_reversed) 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* The glXSetClientInfoARB protocol was added in GLX 1.4 with the 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * GLX_ARB_create_context extension. Verify that glXSetClientInfoARB is 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sent to a GLX server that has GLX 1.4 and the extension. 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org common_protocol_expected_true_test(1, 4, 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context_profile " 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "GLX_ARB_create_context", 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &SetClientInfo2ARB_was_sent); 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, uses_correct_connection) 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 1, ""); 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ((xcb_connection_t *) 0xdeadbeef, connection_used); 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, sends_correct_gl_extension_string) 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 1, ""); 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_EQ((int) sizeof(ext), gl_ext_length); 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE((char *) 0, gl_ext_string); 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0, memcmp(gl_ext_string, ext, sizeof(ext))); 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, gl_versions_are_sane) 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context"); 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE(0, num_gl_versions); 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned versions_below_3_0 = 0; 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (int i = 0; i < num_gl_versions; i++) { 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_LT(0u, gl_versions[i * 2]); 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(4u, gl_versions[i * 2]); 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Verify that the minor version advertised with the major version makes 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sense. 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (gl_versions[i * 2]) { 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(5u, gl_versions[i * 2 + 1]); 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org versions_below_3_0++; 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(1u, gl_versions[i * 2 + 1]); 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org versions_below_3_0++; 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(3u, gl_versions[i * 2 + 1]); 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(2u, gl_versions[i * 2 + 1]); 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* From the GLX_ARB_create_context spec: 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Only the highest supported version below 3.0 should be sent, since 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OpenGL 2.1 is backwards compatible with all earlier versions." 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_LE(versions_below_3_0, 1u); 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, gl_versions_and_profiles_are_sane) 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context_profile"); 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE(0, num_gl_versions); 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const uint32_t all_valid_bits = GLX_CONTEXT_CORE_PROFILE_BIT_ARB 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org | GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned versions_below_3_0 = 0; 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (int i = 0; i < num_gl_versions; i++) { 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_LT(0u, gl_versions[i * 3]); 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(4u, gl_versions[i * 3]); 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Verify that the minor version advertised with the major version makes 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * sense. 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org switch (gl_versions[i * 3]) { 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 1: 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(5u, gl_versions[i * 3 + 1]); 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0u, gl_versions[i * 3 + 2]); 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org versions_below_3_0++; 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 2: 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(1u, gl_versions[i * 3 + 1]); 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0u, gl_versions[i * 3 + 2]); 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org versions_below_3_0++; 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 3: 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(3u, gl_versions[i * 3 + 1]); 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* Profiles were not introduced until OpenGL 3.2. 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (gl_versions[i * 3 + 1] < 2) { 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0u, gl_versions[i * 3 + 2]); 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } else { 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0u, gl_versions[i * 3 + 2] & ~all_valid_bits); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org case 4: 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_GE(2u, gl_versions[i * 3 + 1]); 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(0u, gl_versions[i * 3 + 2] & ~all_valid_bits); 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* From the GLX_ARB_create_context_profile spec: 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Only the highest supported version below 3.0 should be sent, since 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OpenGL 2.1 is backwards compatible with all earlier versions." 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_LE(versions_below_3_0, 1u); 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_version_is_1_4_for_1_1) 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 1, ""); 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(1, glx_major); 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(4, glx_minor); 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_version_is_1_4_for_1_4) 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, ""); 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(1, glx_major); 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(4, glx_minor); 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_version_is_1_4_for_1_4_with_ARB_create_context) 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context"); 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(1, glx_major); 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(4, glx_minor); 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_version_is_1_4_for_1_4_with_ARB_create_context_profile) 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context_profile"); 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(1, glx_major); 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(4, glx_minor); 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_version_is_1_4_for_1_5) 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 5, ""); 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(1, glx_major); 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_EQ(4, glx_minor); 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_extensions_has_GLX_ARB_create_context) 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context"); 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE(0, glx_ext_length); 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE((char *) 0, glx_ext_string); 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool found_GLX_ARB_create_context = false; 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *const needle = "GLX_ARB_create_context"; 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned len = strlen(needle); 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *haystack = glx_ext_string; 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (haystack != NULL) { 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *match = strstr(haystack, needle); 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (match[len] == '\0' || match[len] == ' ') { 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org found_GLX_ARB_create_context = true; 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org haystack = match + len; 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_TRUE(found_GLX_ARB_create_context); 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgTEST_F(glX_send_client_info_test, glx_extensions_has_GLX_ARB_create_context_profile) 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org create_single_screen_display(1, 4, "GLX_ARB_create_context_profile"); 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org __glX_send_client_info(this->glx_dpy); 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE(0, glx_ext_length); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ASSERT_NE((char *) 0, glx_ext_string); 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bool found_GLX_ARB_create_context_profile = false; 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const char *const needle = "GLX_ARB_create_context_profile"; 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned len = strlen(needle); 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *haystack = glx_ext_string; 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org while (haystack != NULL) { 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org char *match = strstr(haystack, needle); 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (match[len] == '\0' || match[len] == ' ') { 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org found_GLX_ARB_create_context_profile = true; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org haystack = match + len; 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPECT_TRUE(found_GLX_ARB_create_context_profile); 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 724