1 #ifndef COREGL_INTERNAL_H
2 #define COREGL_INTERNAL_H
8 #define unlikely(x) __builtin_expect(x, 0)
10 // Symbol definition for real
11 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
12 # include "headers/sym.h"
18 fprintf(stderr, __VA_ARGS__)
21 fprintf(stderr, __VA_ARGS__)
27 fprintf(stderr, __VA_ARGS__)
30 fprintf(trace_fp, __VA_ARGS__)
32 # define TRACE_END() \
37 if (!(expr)) { fprintf(stderr, "\E[0;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
43 typedef GLvoid * GLvoidptr;
44 typedef GLuint GLuintmask;
46 //#define COREGL_TRACE_ALL
47 #define COREGL_TRACE_CONTEXT_INFO
48 #define COREGL_TRACE_STATE_INFO
49 //#define COREGL_TRACE_APICALL_INFO
51 #ifdef COREGL_TRACE_ALL
52 #define COREGL_TRACE_CONTEXT_INFO // Context state & thread state & Glue-context info
53 #define COREGL_TRACE_STATE_INFO // Glue-context state info
54 #define COREGL_TRACE_APICALL_INFO // API call frequency info
57 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
59 #define _COREGL_INT_INIT_VALUE -3
62 # define GLERR(fn, fl, ln, op)
64 # define GLERR(fn, fl, ln, op)
67 #define _COREGL_NAME_MANGLE(name) ovr_##name
69 typedef struct _Trace_Data Trace_Data;
71 #ifdef COREGL_TRACE_APICALL_INFO
72 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) \
73 trace_begin(api, hint, trace_total_time);
74 # define _COREGL_TRACE_API_END(api, hint, trace_total_time) \
75 trace_end(api, hint, trace_total_time);
76 # define _COREGL_TRACE_API_OUTPUT(force_output) \
77 trace_output(force_output);
79 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) NULL;
80 # define _COREGL_TRACE_API_END(api, hint, trace_total_time)
81 # define _COREGL_TRACE_API_OUTPUT(force_output)
85 #define _COREGL_FAST_FUNC_BEGIN()
87 #define _COREGL_FAST_FUNC_END()
89 #define _COREGL_FAST_FUNC_SYMCALL_BEGIN()
91 #define _COREGL_FAST_FUNC_SYMCALL_END()
93 #define _COREGL_WRAP_FUNC_BEGIN() \
94 static void *trace_hint = NULL; \
95 if (unlikely(trace_api_flag == 1)) \
96 trace_hint = _COREGL_TRACE_API_BEGIN(__func__, trace_hint, 1);
98 #define _COREGL_WRAP_FUNC_END() \
99 if (unlikely(trace_api_flag == 1)) \
100 _COREGL_TRACE_API_END(__func__, trace_hint, 1);
102 typedef enum _CoreGL_Opt_Flag
109 extern CoreGL_Opt_Flag api_opt;
111 #ifndef _COREGL_DESKTOP_GL
112 typedef EGLSurface GLSurface;
113 typedef EGLDisplay GLDisplay;
114 typedef EGLContext GLContext;
116 typedef GLXDrawable GLSurface;
117 typedef Display GLDisplay;
118 typedef GLXContext GLContext;
121 typedef struct _GLContextState
129 typedef struct _GLThreadState
133 GLContextState *cstate;
134 GLSurface *rsurf_draw;
135 GLSurface *rsurf_read;
136 Trace_Data **ftd_table;
139 typedef struct _GLContext_List
144 GLContextState *cstate;
145 struct _GLContext_List *next;
148 extern void *glue_lib_handle;
149 extern void *egl_lib_handle;
151 extern GLContext_List *glctx_list;
153 #include "coregl_thread_pthread.h"
154 extern Mutex ctx_list_access_mutex;
156 typedef struct _General_Trace_List
159 struct _General_Trace_List *next;
160 } General_Trace_List;
162 extern General_Trace_List *thread_trace_list;
163 extern Mutex general_trace_lists_access_mutex;
165 extern int trace_api_flag;
166 extern int trace_ctx_flag;
167 extern int trace_ctx_force_flag;
168 extern int trace_state_flag;
169 extern int debug_nofp;
170 extern FILE *trace_fp;
172 // Environment functions
173 extern const char *get_env_setting(const char *name);
175 // Main utility functions
176 extern int init_new_thread_state();
179 extern int mutex_lock(Mutex *mt);
180 extern int mutex_unlock(Mutex *mt);
181 extern int get_current_thread();
182 extern int set_current_thread_state(Mutex *mt, GLThreadState *tstate);
183 extern GLThreadState *get_current_thread_state();
186 // Context state functions
187 extern int add_context_state_to_list(const void *data, const int datalen, GLContextState *cstate, Mutex *mtx);
188 extern int remove_context_states_from_list(GLContextState *cstate, Mutex *mtx);
189 extern GLContextState *get_context_state_from_list(const void *data, const int datalen, Mutex *mtx);
192 // Override functions
193 extern void override_glue_normal_path();
194 extern void override_glue_fast_path();
195 extern void override_gl_normal_path();
196 extern void override_gl_fast_path();
197 extern void override_glue_apis(CoreGL_Opt_Flag opt);
198 extern void override_gl_apis(CoreGL_Opt_Flag opt);
201 // Debug & Trace functions
202 extern int add_to_general_trace_list(General_Trace_List **gtl, void *value);
203 extern int remove_from_general_trace_list(General_Trace_List **gtl, void *value);
204 extern void *trace_begin(const char *name, void *hint, int trace_total_time);
205 extern void *trace_end(const char *name, void *hint, int trace_total_time);
206 extern void trace_output(int force_output);
208 #endif // COREGL_INTERNAL_H