Merge branch 'radeon-rewrite' of git+ssh://agd5f@git.freedesktop.org/git/mesa/mesa...
[mesa.git] / src / gallium / state_trackers / egl / egl_tracker.h
1
2 #ifndef _EGL_TRACKER_H_
3 #define _EGL_TRACKER_H_
4
5 #include <stdint.h>
6
7 #include "eglconfig.h"
8 #include "eglcontext.h"
9 #include "egldisplay.h"
10 #include "egldriver.h"
11 #include "eglglobals.h"
12 #include "eglmode.h"
13 #include "eglscreen.h"
14 #include "eglsurface.h"
15
16 #include "xf86drm.h"
17 #include "xf86drmMode.h"
18
19 #include "pipe/p_compiler.h"
20
21 #include "state_tracker/st_public.h"
22
23 #define MAX_SCREENS 16
24
25 struct pipe_winsys;
26 struct pipe_screen;
27 struct pipe_context;
28 struct state_tracker;
29
30 struct drm_screen;
31 struct drm_context;
32
33 struct drm_device
34 {
35 _EGLDriver base; /* base class/object */
36
37 /*
38 * pipe
39 */
40
41 struct pipe_winsys *winsys;
42 struct pipe_screen *screen;
43
44 /*
45 * drm
46 */
47
48 int drmFD;
49 drmVersionPtr version;
50 int deviceID;
51
52 drmModeResPtr res;
53
54 struct drm_screen *screens[MAX_SCREENS];
55 size_t count_screens;
56 };
57
58 struct drm_surface
59 {
60 _EGLSurface base; /* base class/object */
61
62 /*
63 * pipe
64 */
65
66
67 struct st_framebuffer *stfb;
68
69 /*
70 * drm
71 */
72
73 struct drm_context *user;
74 struct drm_screen *screen;
75
76 int w;
77 int h;
78 };
79
80 struct drm_context
81 {
82 _EGLContext base; /* base class/object */
83
84 /* pipe */
85
86 struct pipe_context *pipe;
87 struct st_context *st;
88 };
89
90 struct drm_screen
91 {
92 _EGLScreen base;
93
94 /*
95 * pipe
96 */
97
98 struct pipe_buffer *buffer;
99 struct pipe_texture *tex;
100 struct pipe_surface *surface;
101
102 /*
103 * drm
104 */
105
106 struct {
107 unsigned height;
108 unsigned width;
109 unsigned pitch;
110 unsigned handle;
111 } front;
112
113 /* currently only support one connector */
114 drmModeConnectorPtr connector;
115 uint32_t connectorID;
116
117 /* dpms property */
118 drmModePropertyPtr dpms;
119
120 /* Has this screen been shown */
121 int shown;
122
123 /* Surface that is currently attached to this screen */
124 struct drm_surface *surf;
125
126 /* framebuffer */
127 drmModeFBPtr fb;
128 uint32_t fbID;
129
130 /* crtc and mode used */
131 /*drmModeCrtcPtr crtc;*/
132 uint32_t crtcID;
133
134 drmModeModeInfoPtr mode;
135 };
136
137
138 static INLINE struct drm_context *
139 lookup_drm_context(EGLContext context)
140 {
141 _EGLContext *c = _eglLookupContext(context);
142 return (struct drm_context *) c;
143 }
144
145
146 static INLINE struct drm_surface *
147 lookup_drm_surface(EGLSurface surface)
148 {
149 _EGLSurface *s = _eglLookupSurface(surface);
150 return (struct drm_surface *) s;
151 }
152
153 static INLINE struct drm_screen *
154 lookup_drm_screen(EGLDisplay dpy, EGLScreenMESA screen)
155 {
156 _EGLScreen *s = _eglLookupScreen(dpy, screen);
157 return (struct drm_screen *) s;
158 }
159
160 /**
161 * egl_visual.h
162 */
163 /*@{*/
164 void drm_visual_modes_destroy(__GLcontextModes *modes);
165 __GLcontextModes* drm_visual_modes_create(unsigned count, size_t minimum_size);
166 __GLcontextModes* drm_visual_from_config(_EGLConfig *conf);
167 /*@}*/
168
169 /**
170 * egl_surface.h
171 */
172 /*@{*/
173 void drm_takedown_shown_screen(_EGLDriver *drv, struct drm_screen *screen);
174 /*@}*/
175
176 /**
177 * All function exported to the egl side.
178 */
179 /*@{*/
180 EGLBoolean drm_initialize(_EGLDriver *drv, EGLDisplay dpy, EGLint *major, EGLint *minor);
181 EGLBoolean drm_terminate(_EGLDriver *drv, EGLDisplay dpy);
182 EGLContext drm_create_context(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, EGLContext share_list, const EGLint *attrib_list);
183 EGLBoolean drm_destroy_context(_EGLDriver *drv, EGLDisplay dpy, EGLContext context);
184 EGLSurface drm_create_window_surface(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativeWindowType window, const EGLint *attrib_list);
185 EGLSurface drm_create_pixmap_surface(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, NativePixmapType pixmap, const EGLint *attrib_list);
186 EGLSurface drm_create_pbuffer_surface(_EGLDriver *drv, EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list);
187 EGLSurface drm_create_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy, EGLConfig cfg, const EGLint *attrib_list);
188 EGLBoolean drm_show_screen_surface_mesa(_EGLDriver *drv, EGLDisplay dpy, EGLScreenMESA screen, EGLSurface surface, EGLModeMESA m);
189 EGLBoolean drm_destroy_surface(_EGLDriver *drv, EGLDisplay dpy, EGLSurface surface);
190 EGLBoolean drm_make_current(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext context);
191 EGLBoolean drm_swap_buffers(_EGLDriver *drv, EGLDisplay dpy, EGLSurface draw);
192 /*@}*/
193
194 #endif