149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu/*
249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Mesa 3-D graphics library
349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Version:  7.8
449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Copyright (C) 2009-2010 Chia-I Wu <olv@0xlab.org>
649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * copy of this software and associated documentation files (the "Software"),
949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * to deal in the Software without restriction, including without limitation
1049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
1249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * Software is furnished to do so, subject to the following conditions:
1349381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
1449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * The above copyright notice and this permission notice shall be included
1549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * in all copies or substantial portions of the Software.
1649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu *
17ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23ba81b0743efd978509b1931d7b4b93f37e8aeb5eChia-I Wu * DEALINGS IN THE SOFTWARE.
2449381d63e61c724b156b76068058df1c01a906c2Chia-I Wu */
2549381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
2649381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "util/u_debug.h"
2711f4360f2e915f236558da22efe5bdabd81446f3Chia-I Wu#include "util/u_memory.h"
28870a9d643b1f256e6a379d96a325284dd2f7eeeaChia-I Wu#include "util/u_string.h"
2949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "egllog.h"
3049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
3149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu#include "native_x11.h"
3249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
3373df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wustatic const struct native_event_handler *x11_event_handler;
34a22a332fc7cc54d4d0973dcd21a90159cc51de1aChia-I Wu
35f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wustatic struct native_display *
3673df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_create_display(void *dpy, boolean use_sw)
3749381d63e61c724b156b76068058df1c01a906c2Chia-I Wu{
3849381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   struct native_display *ndpy = NULL;
3949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   boolean force_sw;
4049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
4149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   force_sw = debug_get_bool_option("EGL_SOFTWARE", FALSE);
4295c5c69b505f562b61e23fa7dd500dbdd432a70dChia-I Wu
43a22a332fc7cc54d4d0973dcd21a90159cc51de1aChia-I Wu   if (force_sw || use_sw) {
44a22a332fc7cc54d4d0973dcd21a90159cc51de1aChia-I Wu      _eglLog(_EGL_INFO, "use software fallback");
4573df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu      ndpy = x11_create_ximage_display((Display *) dpy, x11_event_handler);
46a22a332fc7cc54d4d0973dcd21a90159cc51de1aChia-I Wu   }
47a22a332fc7cc54d4d0973dcd21a90159cc51de1aChia-I Wu   else {
4873df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu      ndpy = x11_create_dri2_display((Display *) dpy, x11_event_handler);
4949381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   }
5049381d63e61c724b156b76068058df1c01a906c2Chia-I Wu
5149381d63e61c724b156b76068058df1c01a906c2Chia-I Wu   return ndpy;
5249381d63e61c724b156b76068058df1c01a906c2Chia-I Wu}
53f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu
54d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wustatic const struct native_platform x11_platform = {
55d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu   "X11", /* name */
56d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu   native_create_display
57d5ab243d5a5bacbd2ba615d40f13c8ab37364745Chia-I Wu};
58f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu
59f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wuconst struct native_platform *
6073df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wunative_get_x11_platform(const struct native_event_handler *event_handler)
61f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu{
6273df31eedd0f33c8a9907855cb247c8f87964c48Chia-I Wu   x11_event_handler = event_handler;
63f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu   return &x11_platform;
64f66a4e20c19d55005854bbee312947ec16e287e3Chia-I Wu}
65