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