Initial Commit
[platform/core/uifw/coregl.git] / src / coregl_internal.h
1 #ifndef COREGL_INTERNAL_H
2 #define COREGL_INTERNAL_H
3
4 #include <stdio.h>
5
6 #include "coregl.h"
7
8 #define COREGL_DEBUG
9
10 # define ERR(...) \
11      fprintf(stderr, __VA_ARGS__)
12 # ifdef COREGL_DEBUG
13 #  define DBG(...) \
14      fprintf(stderr, __VA_ARGS__)
15 # else
16 #  define DBG(...)
17 # endif
18
19 # define LOG(...) \
20      fprintf(stderr, __VA_ARGS__)
21
22 #ifdef COREGL_DEBUG
23 # define AST(expr) \
24      if (!(expr)) { fprintf(stderr, "\E[0;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
25 #else
26 # define AST(expr) \
27      if (expr)
28 #endif
29
30 typedef GLvoid *     GLvoidptr;
31 typedef GLuint       GLuintmask;
32
33 //#define COREGL_TRACE_ALL
34 #define COREGL_TRACE_CONTEXT_INFO
35 #define COREGL_TRACE_STATE_INFO
36 #define COREGL_TRACE_APICALL_INFO
37
38 #ifdef COREGL_TRACE_ALL
39 #define COREGL_TRACE_CONTEXT_INFO   // Context state & thread state & Glue-context info
40 #define COREGL_TRACE_STATE_INFO     // Glue-context state info
41 #define COREGL_TRACE_APICALL_INFO   // API call frequency info
42 #endif
43
44 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
45
46 // Symbol definition for static
47 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
48 # include "headers/sym.h"
49 #undef _COREGL_SYMBOL
50
51 // Symbol definition for wrappath
52 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (evgl_##FUNC_NAME) PARAM_LIST;
53 # include "headers/sym.h"
54 #undef _COREGL_SYMBOL
55
56 // Symbol definition for fastpath
57 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (fpgl_##FUNC_NAME) PARAM_LIST;
58 # include "headers/sym.h"
59 #undef _COREGL_SYMBOL
60
61 #define _COREGL_INT_INIT_VALUE -3
62
63
64 #ifdef COREGL_ERRORS
65 # define GLERR(fn, fl, ln, op)
66 #else
67 # define GLERR(fn, fl, ln, op)
68 #endif
69
70
71 typedef struct _Trace_Data Trace_Data;
72
73 #ifdef COREGL_TRACE_APICALL_INFO
74 # define _COREGL_TRACE_API_BEGIN(api) \
75    trace_begin(api);
76 # define _COREGL_TRACE_API_END(api) \
77    trace_end(api);
78 # define _COREGL_TRACE_API_OUTPUT(force_output) \
79    trace_output(force_output);
80 #else
81 # define _COREGL_TRACE_API_BEGIN(api)
82 # define _COREGL_TRACE_API_END(api)
83 # define _COREGL_TRACE_API_OUTPUT(force_output)
84 #endif
85
86
87 #define _COREGL_FAST_FUNC_BEGIN()
88
89 #define _COREGL_FAST_FUNC_END()
90
91 #define _COREGL_WRAP_FUNC_BEGIN() \
92    _COREGL_TRACE_API_BEGIN(__func__);
93
94 #define _COREGL_WRAP_FUNC_END() \
95    _COREGL_TRACE_API_END(__func__);
96
97 typedef enum _CoreGL_Opt_Flag
98 {
99     COREGL_NORMAL_PATH,
100     GL_WRAPPED_PATH,
101     COREGL_FAST_PATH
102 } CoreGL_Opt_Flag;
103
104
105 #ifndef _COREGL_DESKTOP_GL
106 typedef EGLSurface     GLSurface;
107 typedef EGLDisplay     GLDisplay;
108 typedef EGLContext     GLContext;
109 #else
110 typedef GLXDrawable    GLSurface;
111 typedef Display        GLDisplay;
112 typedef GLXContext     GLContext;
113 #endif
114
115 typedef struct _GLContextState
116 {
117         int                      ref_count;
118         GLContext               *rctx;
119         GLDisplay               *rdpy;
120         void                    *data;
121 } GLContextState;
122
123 typedef struct _GLThreadState
124 {
125         int                      thread_id;
126         GLContextState          *cstate;
127         GLSurface               *rsurf_draw;
128         GLSurface               *rsurf_read;
129         Trace_Data             **ftd_table;
130 } GLThreadState;
131
132 typedef struct _GLContext_List
133 {
134         void                    *option;
135         int                      option_len;
136         int                      thread_id;
137         GLContextState          *cstate;
138         struct _GLContext_List *next;
139 } GLContext_List;
140
141 extern void                *glue_lib_handle;
142 extern void                *egl_lib_handle;
143
144 extern GLContext_List      *glctx_list;
145
146 #include "coregl_thread_pthread.h"
147 extern Mutex                ctx_list_access_mutex;
148
149 typedef struct _General_Trace_List
150 {
151         void                          *value;
152         struct _General_Trace_List    *next;
153 } General_Trace_List;
154
155 extern General_Trace_List  *thread_trace_list;
156 extern Mutex                general_trace_lists_access_mutex;
157
158 extern int                  trace_api_flag;
159
160 // Environment functions
161 extern const char *get_env_setting(const char *name);
162
163 // Main utility functions
164 extern int                 init_new_thread_state();
165
166 // Thread functions
167 extern int                 mutex_lock(Mutex *mt);
168 extern int                 mutex_unlock(Mutex *mt);
169 extern int                 get_current_thread();
170 extern int                 set_current_thread_state(Mutex *mt, GLThreadState *tstate);
171 extern GLThreadState      *get_current_thread_state();
172
173
174 // Context state functions
175 extern int                 add_context_state_to_list(const void *data, const int datalen, GLContextState *cstate, Mutex *mtx);
176 extern int                 remove_context_states_from_list(GLContextState *cstate, Mutex *mtx);
177 extern GLContextState     *get_context_state_from_list(const void *data, const int datalen, Mutex *mtx);
178
179
180 // Override functions
181 extern void                override_glue_normal_path();
182 extern void                override_glue_fast_path();
183 extern void                override_gl_normal_path();
184 extern void                override_gl_fast_path();
185 extern void                override_glue_apis(CoreGL_Opt_Flag opt);
186 extern void                override_gl_apis(CoreGL_Opt_Flag opt);
187
188
189 // Debug & Trace functions
190 extern int                 add_to_general_trace_list(General_Trace_List **gtl, void *value);
191 extern int                 remove_from_general_trace_list(General_Trace_List **gtl, void *value);
192 extern void                trace_begin(const char *name);
193 extern void                trace_end(const char *name);
194 extern void                trace_output(int force_output);
195
196 #endif // COREGL_INTERNAL_H
197