Tizen 2.0 Release
[profile/ivi/osmesa.git] / src / mesa / drivers / dri / common / drisw_util.h
1 /*
2  * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
3  * All Rights Reserved.
4  * Copyright 2010 George Sapountzis <gsapountzis@gmail.com>
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23
24 /**
25  * @file
26  * Binding of the DRI interface (dri_interface.h) for DRISW.
27  *
28  * The DRISW structs are 'base classes' of the corresponding DRI1 / DRI2 (DRM)
29  * structs. The bindings for SW and DRM can be unified by making the DRM structs
30  * 'sub-classes' of the SW structs, either proper or with field re-ordering.
31  *
32  * The code can also be unified but that requires cluttering the common code
33  * with ifdef's and guarding with (__DRIscreen::fd >= 0) for DRM.
34  */
35
36 #ifndef _DRISW_UTIL_H
37 #define _DRISW_UTIL_H
38
39 #include "main/mtypes.h"
40
41 #include <GL/gl.h>
42 #include <GL/internal/dri_interface.h>
43 typedef struct _drmLock drmLock;
44
45
46 /**
47  * Extensions
48  */
49 extern const __DRIcoreExtension driCoreExtension;
50 extern const __DRIswrastExtension driSWRastExtension;
51
52
53 /**
54  * Driver callback functions
55  */
56 struct __DriverAPIRec {
57     const __DRIconfig **(*InitScreen) (__DRIscreen * priv);
58
59     void (*DestroyScreen)(__DRIscreen *driScrnPriv);
60
61     GLboolean (*CreateContext)(gl_api glapi,
62                                const struct gl_config *glVis,
63                                __DRIcontext *driContextPriv,
64                                void *sharedContextPrivate);
65
66     void (*DestroyContext)(__DRIcontext *driContextPriv);
67
68     GLboolean (*CreateBuffer)(__DRIscreen *driScrnPriv,
69                               __DRIdrawable *driDrawPriv,
70                               const struct gl_config *glVis,
71                               GLboolean pixmapBuffer);
72
73     void (*DestroyBuffer)(__DRIdrawable *driDrawPriv);
74
75     void (*SwapBuffers)(__DRIdrawable *driDrawPriv);
76
77     GLboolean (*MakeCurrent)(__DRIcontext *driContextPriv,
78                              __DRIdrawable *driDrawPriv,
79                              __DRIdrawable *driReadPriv);
80
81     GLboolean (*UnbindContext)(__DRIcontext *driContextPriv);
82 };
83
84 extern const struct __DriverAPIRec driDriverAPI;
85
86
87 /**
88  * Data types
89  */
90 struct __DRIscreenRec {
91     int myNum;
92
93     int fd;
94
95     void *private;
96
97     const __DRIextension **extensions;
98
99     const __DRIswrastLoaderExtension *swrast_loader;
100 };
101
102 struct __DRIcontextRec {
103
104     void *driverPrivate;
105
106     void *loaderPrivate;
107
108     __DRIdrawable *driDrawablePriv;
109
110     __DRIdrawable *driReadablePriv;
111
112     __DRIscreen *driScreenPriv;
113 };
114
115 struct __DRIdrawableRec {
116
117     void *driverPrivate;
118
119     void *loaderPrivate;
120
121     __DRIcontext *driContextPriv;
122
123     __DRIscreen *driScreenPriv;
124
125     int refcount;
126
127     /* gallium */
128     unsigned int lastStamp;
129
130     int w;
131     int h;
132 };
133
134 #endif /* _DRISW_UTIL_H */