~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/gallium/state_trackers/egl/null/native_null.c

  • Committer: Package Import Robot
  • Author(s): Robert Hooker
  • Date: 2012-02-02 12:05:48 UTC
  • mfrom: (1.7.1) (3.3.27 sid)
  • Revision ID: package-import@ubuntu.com-20120202120548-nvkma85jq0h4coix
Tags: 8.0~rc2-0ubuntu4
Drop drisearchdir handling, it is no longer needed with multiarch
and dri-alternates being removed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Mesa 3-D graphics library
 
3
 * Version:  7.12
 
4
 *
 
5
 * Copyright (C) 2011 LunarG Inc.
 
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
 * Authors:
 
26
 *    Chia-I Wu <olv@lunarg.com>
 
27
 */
 
28
 
 
29
/**
 
30
 * For NULL window system,
 
31
 *
 
32
 *  - the only valid native display is EGL_DEFAULT_DISPLAY
 
33
 *  - there is no window or pixmap
 
34
 */
 
35
 
 
36
#include "util/u_memory.h"
 
37
#include "null/null_sw_winsys.h"
 
38
#include "common/native.h"
 
39
 
 
40
struct null_display {
 
41
   struct native_display base;
 
42
 
 
43
   const struct native_event_handler *event_handler;
 
44
 
 
45
   struct native_config *configs;
 
46
   int num_configs;
 
47
};
 
48
 
 
49
static INLINE struct null_display *
 
50
null_display(const struct native_display *ndpy)
 
51
{
 
52
   return (struct null_display *) ndpy;
 
53
}
 
54
 
 
55
static const struct native_config **
 
56
null_display_get_configs(struct native_display *ndpy, int *num_configs)
 
57
{
 
58
   struct null_display *null = null_display(ndpy);
 
59
   const struct native_config **configs;
 
60
   int i;
 
61
 
 
62
   configs = MALLOC(sizeof(*configs) * null->num_configs);
 
63
   if (configs) {
 
64
      for (i = 0; i < null->num_configs; i++)
 
65
         configs[i] = &null->configs[i];
 
66
      if (num_configs)
 
67
         *num_configs = null->num_configs;
 
68
   }
 
69
 
 
70
   return configs;
 
71
}
 
72
 
 
73
static int
 
74
null_display_get_param(struct native_display *ndpy,
 
75
                      enum native_param_type param)
 
76
{
 
77
   return 0;
 
78
}
 
79
 
 
80
static void
 
81
null_display_destroy(struct native_display *ndpy)
 
82
{
 
83
   struct null_display *null = null_display(ndpy);
 
84
 
 
85
   FREE(null->configs);
 
86
   ndpy_uninit(&null->base);
 
87
   FREE(null);
 
88
}
 
89
 
 
90
static boolean
 
91
null_display_init_config(struct native_display *ndpy)
 
92
{
 
93
   const enum pipe_format color_formats[] =  {
 
94
      PIPE_FORMAT_B8G8R8A8_UNORM,
 
95
      PIPE_FORMAT_B8G8R8X8_UNORM,
 
96
      PIPE_FORMAT_B5G6R5_UNORM,
 
97
      PIPE_FORMAT_NONE
 
98
   };
 
99
   struct null_display *null = null_display(ndpy);
 
100
   int i;
 
101
 
 
102
   null->configs = CALLOC(Elements(color_formats) - 1, sizeof(*null->configs));
 
103
   if (!null->configs)
 
104
      return FALSE;
 
105
 
 
106
   /* add configs */
 
107
   for (i = 0; color_formats[i] != PIPE_FORMAT_NONE; i++) {
 
108
      if (null->base.screen->is_format_supported(null->base.screen,
 
109
               color_formats[i], PIPE_TEXTURE_2D, 0,
 
110
               PIPE_BIND_RENDER_TARGET)) {
 
111
         struct native_config *nconf = &null->configs[null->num_configs];
 
112
 
 
113
         nconf->color_format = color_formats[i];
 
114
         nconf->buffer_mask = 1 << NATIVE_ATTACHMENT_BACK_LEFT;
 
115
         null->num_configs++;
 
116
      }
 
117
   }
 
118
 
 
119
   return TRUE;
 
120
}
 
121
 
 
122
static boolean
 
123
null_display_init_screen(struct native_display *ndpy)
 
124
{
 
125
   struct null_display *null = null_display(ndpy);
 
126
   struct sw_winsys *ws;
 
127
 
 
128
   ws = null_sw_create();
 
129
   if (!ws)
 
130
      return FALSE;
 
131
 
 
132
   null->base.screen = null->event_handler->new_sw_screen(&null->base, ws);
 
133
   if (!null->base.screen) {
 
134
      if (ws->destroy)
 
135
         ws->destroy(ws);
 
136
      return FALSE;
 
137
   }
 
138
 
 
139
   if (!null_display_init_config(&null->base)) {
 
140
      ndpy_uninit(&null->base);
 
141
      return FALSE;
 
142
   }
 
143
 
 
144
   return TRUE;
 
145
}
 
146
 
 
147
static struct native_display *
 
148
null_display_create(const struct native_event_handler *event_handler)
 
149
{
 
150
   struct null_display *null;
 
151
 
 
152
   null = CALLOC_STRUCT(null_display);
 
153
   if (!null)
 
154
      return NULL;
 
155
 
 
156
   null->event_handler = event_handler;
 
157
 
 
158
   null->base.init_screen = null_display_init_screen;
 
159
   null->base.destroy = null_display_destroy;
 
160
   null->base.get_param = null_display_get_param;
 
161
   null->base.get_configs = null_display_get_configs;
 
162
 
 
163
   return &null->base;
 
164
}
 
165
 
 
166
static const struct native_event_handler *null_event_handler;
 
167
 
 
168
static struct native_display *
 
169
native_create_display(void *dpy, boolean use_sw)
 
170
{
 
171
   struct native_display *ndpy = NULL;
 
172
 
 
173
   /* the only valid display is NULL */
 
174
   if (!dpy)
 
175
      ndpy = null_display_create(null_event_handler);
 
176
 
 
177
   return ndpy;
 
178
}
 
179
 
 
180
static const struct native_platform null_platform = {
 
181
   "NULL", /* name */
 
182
   native_create_display
 
183
};
 
184
 
 
185
const struct native_platform *
 
186
native_get_null_platform(const struct native_event_handler *event_handler)
 
187
{
 
188
   null_event_handler = event_handler;
 
189
   return &null_platform;
 
190
}