149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/*
249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Mesa 3-D graphics library
349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Version:  7.10
449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *
549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Copyright (C) 2011 LunarG Inc.
649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *
749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Permission is hereby granted, free of charge, to any person obtaining a
849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * copy of this software and associated documentation files (the "Software"),
949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * to deal in the Software without restriction, including without limitation
1049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * and/or sell copies of the Software, and to permit persons to whom the
1249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Software is furnished to do so, subject to the following conditions:
1349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *
1449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * The above copyright notice and this permission notice shall be included
1549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * in all copies or substantial portions of the Software.
1649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *
1749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
2049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
2349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * DEALINGS IN THE SOFTWARE.
2449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *
2549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu * Authors:
2649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu *    Chia-I Wu <olv@lunarg.com>
2749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu */
2849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "target-helpers/inline_debug_helper.h"
2949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "target-helpers/inline_sw_helper.h"
3049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "egl_pipe.h"
3149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
3249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/* for i915 */
3349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "i915/drm/i915_drm_public.h"
3449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "i915/i915_public.h"
3549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "target-helpers/inline_wrapper_sw_helper.h"
3649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/* for nouveau */
3749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "nouveau/drm/nouveau_drm_public.h"
3849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/* for r300 */
3949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "radeon/drm/radeon_drm_public.h"
4049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "r300/r300_public.h"
4149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/* for r600 */
4249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "r600/r600_public.h"
43a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard/* for radeonsi */
44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "radeonsi/radeonsi_public.h"
4549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu/* for vmwgfx */
4649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "svga/drm/svga_drm_public.h"
4749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#include "svga/svga_public.h"
4849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
4949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustatic struct pipe_screen *
5049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wupipe_i915_create_screen(int fd)
5149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
5249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#if _EGL_PIPE_I915
5349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct i915_winsys *iws;
5449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
5549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
5649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   iws = i915_drm_winsys_create(fd);
5749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!iws)
5849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
5949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
6049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = i915_screen_create(iws);
6149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!screen)
6249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
6349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
6449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = debug_screen_wrap(screen);
6549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
6649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
6749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#else
6849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return NULL;
6949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#endif
7049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
7149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
7249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustatic struct pipe_screen *
7349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wupipe_nouveau_create_screen(int fd)
7449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
7549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#if _EGL_PIPE_NOUVEAU
7649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
7749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
7849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = nouveau_drm_screen_create(fd);
7949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!screen)
8049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
8149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
8249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = debug_screen_wrap(screen);
8349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
8449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
8549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#else
8649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return NULL;
8749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#endif
8849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
8949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
9049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustatic struct pipe_screen *
9149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wupipe_r300_create_screen(int fd)
9249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
9349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#if _EGL_PIPE_R300
94d35aeff4bb0b03450b2c3c08bd7f84db5bf43283Marek Olšák   struct radeon_winsys *sws;
9549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
9649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
97d35aeff4bb0b03450b2c3c08bd7f84db5bf43283Marek Olšák   sws = radeon_drm_winsys_create(fd);
9849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!sws)
9949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
10049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
10149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = r300_screen_create(sws);
10249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!screen)
10349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
10449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
10549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = debug_screen_wrap(screen);
10649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
10749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
10849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#else
10949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return NULL;
11049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#endif
11149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
11249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
11349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustatic struct pipe_screen *
11449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wupipe_r600_create_screen(int fd)
11549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
11649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#if _EGL_PIPE_R600
117ce12f826927cf2d3ac3fd70d893abfb07adc23dbMarek Olšák   struct radeon_winsys *rw;
11849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
11949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
120ce12f826927cf2d3ac3fd70d893abfb07adc23dbMarek Olšák   rw = radeon_drm_winsys_create(fd);
12149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!rw)
12249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
12349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
12449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = r600_screen_create(rw);
12549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!screen)
12649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
12749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
12849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = debug_screen_wrap(screen);
12949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
13049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
13149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#else
13249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return NULL;
13349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#endif
13449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
13549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
13649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustatic struct pipe_screen *
137a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardpipe_radeonsi_create_screen(int fd)
138a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard{
139a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#if _EGL_PIPE_RADEONSI
140a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   struct radeon_winsys *rw;
141a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   struct pipe_screen *screen;
142a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
143a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   rw = radeon_drm_winsys_create(fd);
144a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   if (!rw)
145a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return NULL;
146a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
147a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   screen = radeonsi_screen_create(rw);
148a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   if (!screen)
149a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return NULL;
150a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
151a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   screen = debug_screen_wrap(screen);
152a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
153a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   return screen;
154a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#else
155a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   return NULL;
156a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#endif
157a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard}
158a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard
159a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardstatic struct pipe_screen *
16049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wupipe_vmwgfx_create_screen(int fd)
16149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
16249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#if _EGL_PIPE_VMWGFX
16349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct svga_winsys_screen *sws;
16449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
16549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
16649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   sws = svga_drm_winsys_screen_create(fd);
16749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!sws)
16849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
16949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
17049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = svga_screen_create(sws);
17149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (!screen)
17249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
17349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
17449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = debug_screen_wrap(screen);
17549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
17649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
17749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#else
17849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return NULL;
17949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu#endif
18049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
18149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
18249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustruct pipe_screen *
18349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wuegl_pipe_create_drm_screen(const char *name, int fd)
18449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
18549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (strcmp(name, "i915") == 0)
18649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return pipe_i915_create_screen(fd);
18749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   else if (strcmp(name, "nouveau") == 0)
18849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return pipe_nouveau_create_screen(fd);
18949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   else if (strcmp(name, "r300") == 0)
19049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return pipe_r300_create_screen(fd);
19149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   else if (strcmp(name, "r600") == 0)
19249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return pipe_r600_create_screen(fd);
193a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard   else if (strcmp(name, "radeonsi") == 0)
194a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard      return pipe_radeonsi_create_screen(fd);
19549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   else if (strcmp(name, "vmwgfx") == 0)
19649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return pipe_vmwgfx_create_screen(fd);
19749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   else
19849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      return NULL;
19949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
20049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
20149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wustruct pipe_screen *
20249ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wuegl_pipe_create_swrast_screen(struct sw_winsys *ws)
20349ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu{
20449ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   struct pipe_screen *screen;
20549ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
20649ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   screen = sw_screen_create(ws);
20749ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   if (screen)
20849ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu      screen = debug_screen_wrap(screen);
20949ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu
21049ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu   return screen;
21149ed5bb28d501cd6751bd59dc25a60a4293bcd75Chia-I Wu}
212