1 /*
2  * Mesa 3-D graphics library
3  * Version:  7.8
4  *
5  * Copyright (C) 2009-2010 Chia-I Wu <olv@0xlab.org>
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23  * DEALINGS IN THE SOFTWARE.
24  */
25 
26 #include "util/u_debug.h"
27 #include "util/u_memory.h"
28 #include "util/u_string.h"
29 #include "egllog.h"
30 
31 #include "native_x11.h"
32 
33 static const struct native_event_handler *x11_event_handler;
34 
35 static struct native_display *
native_create_display(void * dpy,boolean use_sw)36 native_create_display(void *dpy, boolean use_sw)
37 {
38    struct native_display *ndpy = NULL;
39    boolean force_sw;
40 
41    force_sw = debug_get_bool_option("EGL_SOFTWARE", FALSE);
42 
43    if (force_sw || use_sw) {
44       _eglLog(_EGL_INFO, "use software fallback");
45       ndpy = x11_create_ximage_display((Display *) dpy, x11_event_handler);
46    }
47    else {
48       ndpy = x11_create_dri2_display((Display *) dpy, x11_event_handler);
49    }
50 
51    return ndpy;
52 }
53 
54 static const struct native_platform x11_platform = {
55    "X11", /* name */
56    native_create_display
57 };
58 
59 const struct native_platform *
native_get_x11_platform(const struct native_event_handler * event_handler)60 native_get_x11_platform(const struct native_event_handler *event_handler)
61 {
62    x11_event_handler = event_handler;
63    return &x11_platform;
64 }
65