1 #ifndef INLINE_DRM_HELPER_H
2 #define INLINE_DRM_HELPER_H
4 #include "state_tracker/drm_driver.h"
5 #include "target-helpers/inline_debug_helper.h"
9 #include "i915/drm/i915_drm_public.h"
10 #include "i915/i915_public.h"
14 #include "intel/intel_winsys.h"
15 #include "ilo/ilo_public.h"
19 #include "nouveau/drm/nouveau_drm_public.h"
23 #include "radeon/drm/radeon_winsys.h"
24 #include "radeon/drm/radeon_drm_public.h"
25 #include "r300/r300_public.h"
29 #include "radeon/drm/radeon_winsys.h"
30 #include "radeon/drm/radeon_drm_public.h"
31 #include "r600/r600_public.h"
35 #include "radeon/drm/radeon_winsys.h"
36 #include "radeon/drm/radeon_drm_public.h"
37 #include "radeonsi/si_public.h"
41 #include "svga/drm/svga_drm_public.h"
42 #include "svga/svga_public.h"
46 #include "freedreno/drm/freedreno_drm_public.h"
49 static char* driver_name
= NULL
;
51 /* XXX: We need to teardown the winsys if *screen_create() fails. */
53 #if defined(GALLIUM_I915)
54 static struct pipe_screen
*
55 pipe_i915_create_screen(int fd
)
57 struct i915_winsys
*iws
;
58 struct pipe_screen
*screen
;
60 iws
= i915_drm_winsys_create(fd
);
64 screen
= i915_screen_create(iws
);
65 return screen
? debug_screen_wrap(screen
) : NULL
;
69 #if defined(GALLIUM_ILO)
70 static struct pipe_screen
*
71 pipe_ilo_create_screen(int fd
)
73 struct intel_winsys
*iws
;
74 struct pipe_screen
*screen
;
76 iws
= intel_winsys_create_for_fd(fd
);
80 screen
= ilo_screen_create(iws
);
81 return screen
? debug_screen_wrap(screen
) : NULL
;
85 #if defined(GALLIUM_NOUVEAU)
86 #if defined(DRI_TARGET)
87 #include "dri_screen.h"
89 const __DRIextension
**__driDriverGetExtensions_nouveau(void);
91 PUBLIC
const __DRIextension
**__driDriverGetExtensions_nouveau(void)
93 globalDriverAPI
= &galliumdrm_driver_api
;
94 return galliumdrm_driver_extensions
;
98 static struct pipe_screen
*
99 pipe_nouveau_create_screen(int fd
)
101 struct pipe_screen
*screen
;
103 screen
= nouveau_drm_screen_create(fd
);
104 return screen
? debug_screen_wrap(screen
) : NULL
;
108 #if defined(GALLIUM_R300)
109 static struct pipe_screen
*
110 pipe_r300_create_screen(int fd
)
112 struct radeon_winsys
*rw
;
114 rw
= radeon_drm_winsys_create(fd
, r300_screen_create
);
115 return rw
? debug_screen_wrap(rw
->screen
) : NULL
;
119 #if defined(GALLIUM_R600)
120 static struct pipe_screen
*
121 pipe_r600_create_screen(int fd
)
123 struct radeon_winsys
*rw
;
125 rw
= radeon_drm_winsys_create(fd
, r600_screen_create
);
126 return rw
? debug_screen_wrap(rw
->screen
) : NULL
;
130 #if defined(GALLIUM_RADEONSI)
131 static struct pipe_screen
*
132 pipe_radeonsi_create_screen(int fd
)
134 struct radeon_winsys
*rw
;
136 rw
= radeon_drm_winsys_create(fd
, radeonsi_screen_create
);
137 return rw
? debug_screen_wrap(rw
->screen
) : NULL
;
141 #if defined(GALLIUM_VMWGFX)
142 static struct pipe_screen
*
143 pipe_vmwgfx_create_screen(int fd
)
145 struct svga_winsys_screen
*sws
;
146 struct pipe_screen
*screen
;
148 sws
= svga_drm_winsys_screen_create(fd
);
152 screen
= svga_screen_create(sws
);
153 return screen
? debug_screen_wrap(screen
) : NULL
;
157 #if defined(GALLIUM_FREEDRENO)
158 static struct pipe_screen
*
159 pipe_freedreno_create_screen(int fd
)
161 struct pipe_screen
*screen
;
163 screen
= fd_drm_screen_create(fd
);
164 return screen
? debug_screen_wrap(screen
) : NULL
;
168 inline struct pipe_screen
*
169 dd_create_screen(int fd
)
171 driver_name
= loader_get_driver_for_fd(fd
, _LOADER_GALLIUM
);
175 #if defined(GALLIUM_I915)
176 if (strcmp(driver_name
, "i915") == 0)
177 return pipe_i915_create_screen(fd
);
180 #if defined(GALLIUM_ILO)
181 if (strcmp(driver_name
, "i965") == 0)
182 return pipe_ilo_create_screen(fd
);
185 #if defined(GALLIUM_NOUVEAU)
186 if (strcmp(driver_name
, "nouveau") == 0)
187 return pipe_nouveau_create_screen(fd
);
190 #if defined(GALLIUM_R300)
191 if (strcmp(driver_name
, "r300") == 0)
192 return pipe_r300_create_screen(fd
);
195 #if defined(GALLIUM_R600)
196 if (strcmp(driver_name
, "r600") == 0)
197 return pipe_r600_create_screen(fd
);
200 #if defined(GALLIUM_RADEONSI)
201 if (strcmp(driver_name
, "radeonsi") == 0)
202 return pipe_radeonsi_create_screen(fd
);
205 #if defined(GALLIUM_VMWGFX)
206 if (strcmp(driver_name
, "vmwgfx") == 0)
207 return pipe_vmwgfx_create_screen(fd
);
210 #if defined(GALLIUM_FREEDRENO)
211 if ((strcmp(driver_name
, "kgsl") == 0) || (strcmp(driver_name
, "msm") == 0))
212 return pipe_freedreno_create_screen(fd
);
224 static const struct drm_conf_ret throttle_ret
= {
229 static const struct drm_conf_ret share_fd_ret
= {
234 static const struct drm_conf_ret
*
235 configuration_query(enum drm_conf conf
)
238 case DRM_CONF_THROTTLE
:
239 return &throttle_ret
;
240 case DRM_CONF_SHARE_FD
:
241 return &share_fd_ret
;
248 inline const struct drm_conf_ret
*
249 dd_configuration(enum drm_conf conf
)
254 #if defined(GALLIUM_I915)
255 if (strcmp(driver_name
, "i915") == 0)
259 #if defined(GALLIUM_ILO)
260 if (strcmp(driver_name
, "i965") == 0)
261 return configuration_query(conf
);
264 #if defined(GALLIUM_NOUVEAU)
265 if (strcmp(driver_name
, "nouveau") == 0)
266 return configuration_query(conf
);
269 #if defined(GALLIUM_R300)
270 if (strcmp(driver_name
, "r300") == 0)
271 return configuration_query(conf
);
274 #if defined(GALLIUM_R600)
275 if (strcmp(driver_name
, "r600") == 0)
276 return configuration_query(conf
);
279 #if defined(GALLIUM_RADEONSI)
280 if (strcmp(driver_name
, "radeonsi") == 0)
281 return configuration_query(conf
);
284 #if defined(GALLIUM_VMWGFX)
285 if (strcmp(driver_name
, "vmwgfx") == 0)
286 return configuration_query(conf
);
289 #if defined(GALLIUM_FREEDRENO)
290 if ((strcmp(driver_name
, "kgsl") == 0) || (strcmp(driver_name
, "msm") == 0))
296 #endif /* INLINE_DRM_HELPER_H */