2 #ifndef _EGL_TRACKER_H_
3 #define _EGL_TRACKER_H_
8 #include "eglcontext.h"
9 #include "egldisplay.h"
10 #include "egldriver.h"
11 #include "eglglobals.h"
13 #include "eglscreen.h"
14 #include "eglsurface.h"
17 #include "xf86drmMode.h"
19 #include "pipe/p_compiler.h"
21 #include "state_tracker/st_public.h"
23 #define MAX_SCREENS 16
35 _EGLDriver base
; /* base class/object */
41 struct pipe_winsys
*winsys
;
42 struct pipe_screen
*screen
;
49 drmVersionPtr version
;
54 struct drm_screen
*screens
[MAX_SCREENS
];
60 _EGLSurface base
; /* base class/object */
67 struct st_framebuffer
*stfb
;
73 struct drm_context
*user
;
74 struct drm_screen
*screen
;
82 _EGLContext base
; /* base class/object */
86 struct pipe_context
*pipe
;
87 struct st_context
*st
;
98 struct pipe_buffer
*buffer
;
99 struct pipe_texture
*tex
;
100 struct pipe_surface
*surface
;
113 /* currently only support one connector */
114 drmModeConnectorPtr connector
;
115 uint32_t connectorID
;
117 /* Has this screen been shown */
120 /* Surface that is currently attached to this screen */
121 struct drm_surface
*surf
;
127 /* crtc and mode used */
128 /*drmModeCrtcPtr crtc;*/
131 drmModeModeInfoPtr mode
;
135 static INLINE
struct drm_context
*
136 lookup_drm_context(EGLContext context
)
138 _EGLContext
*c
= _eglLookupContext(context
);
139 return (struct drm_context
*) c
;
143 static INLINE
struct drm_surface
*
144 lookup_drm_surface(EGLSurface surface
)
146 _EGLSurface
*s
= _eglLookupSurface(surface
);
147 return (struct drm_surface
*) s
;
150 static INLINE
struct drm_screen
*
151 lookup_drm_screen(EGLDisplay dpy
, EGLScreenMESA screen
)
153 _EGLScreen
*s
= _eglLookupScreen(dpy
, screen
);
154 return (struct drm_screen
*) s
;
161 void drm_visual_modes_destroy(__GLcontextModes
*modes
);
162 __GLcontextModes
* drm_visual_modes_create(unsigned count
, size_t minimum_size
);
163 __GLcontextModes
* drm_visual_from_config(_EGLConfig
*conf
);
170 void drm_takedown_shown_screen(_EGLDriver
*drv
, struct drm_screen
*screen
);
174 * All function exported to the egl side.
177 EGLBoolean
drm_initialize(_EGLDriver
*drv
, EGLDisplay dpy
, EGLint
*major
, EGLint
*minor
);
178 EGLBoolean
drm_terminate(_EGLDriver
*drv
, EGLDisplay dpy
);
179 EGLContext
drm_create_context(_EGLDriver
*drv
, EGLDisplay dpy
, EGLConfig config
, EGLContext share_list
, const EGLint
*attrib_list
);
180 EGLBoolean
drm_destroy_context(_EGLDriver
*drv
, EGLDisplay dpy
, EGLContext context
);
181 EGLSurface
drm_create_window_surface(_EGLDriver
*drv
, EGLDisplay dpy
, EGLConfig config
, NativeWindowType window
, const EGLint
*attrib_list
);
182 EGLSurface
drm_create_pixmap_surface(_EGLDriver
*drv
, EGLDisplay dpy
, EGLConfig config
, NativePixmapType pixmap
, const EGLint
*attrib_list
);
183 EGLSurface
drm_create_pbuffer_surface(_EGLDriver
*drv
, EGLDisplay dpy
, EGLConfig config
, const EGLint
*attrib_list
);
184 EGLSurface
drm_create_screen_surface_mesa(_EGLDriver
*drv
, EGLDisplay dpy
, EGLConfig cfg
, const EGLint
*attrib_list
);
185 EGLBoolean
drm_show_screen_surface_mesa(_EGLDriver
*drv
, EGLDisplay dpy
, EGLScreenMESA screen
, EGLSurface surface
, EGLModeMESA m
);
186 EGLBoolean
drm_destroy_surface(_EGLDriver
*drv
, EGLDisplay dpy
, EGLSurface surface
);
187 EGLBoolean
drm_make_current(_EGLDriver
*drv
, EGLDisplay dpy
, EGLSurface draw
, EGLSurface read
, EGLContext context
);
188 EGLBoolean
drm_swap_buffers(_EGLDriver
*drv
, EGLDisplay dpy
, EGLSurface draw
);