1 #ifndef COREGL_INTERNAL_H
2 #define COREGL_INTERNAL_H
8 // Symbol definition for real
9 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
10 # include "headers/sym.h"
16 fprintf(stderr, __VA_ARGS__)
19 fprintf(stderr, __VA_ARGS__)
25 fprintf(stderr, __VA_ARGS__)
28 fprintf(trace_fp, __VA_ARGS__)
30 # define TRACE_END() \
35 if (!(expr)) { fprintf(stderr, "\E[0;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
41 typedef GLvoid * GLvoidptr;
42 typedef GLuint GLuintmask;
44 //#define COREGL_TRACE_ALL
45 #define COREGL_TRACE_CONTEXT_INFO
46 #define COREGL_TRACE_STATE_INFO
47 //#define COREGL_TRACE_APICALL_INFO
49 #ifdef COREGL_TRACE_ALL
50 #define COREGL_TRACE_CONTEXT_INFO // Context state & thread state & Glue-context info
51 #define COREGL_TRACE_STATE_INFO // Glue-context state info
52 #define COREGL_TRACE_APICALL_INFO // API call frequency info
55 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
57 #define _COREGL_INT_INIT_VALUE -3
60 # define GLERR(fn, fl, ln, op)
62 # define GLERR(fn, fl, ln, op)
65 #define _COREGL_NAME_MANGLE(name) ovr_##name
67 typedef struct _Trace_Data Trace_Data;
69 #ifdef COREGL_TRACE_APICALL_INFO
70 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) \
71 trace_begin(api, hint, trace_total_time);
72 # define _COREGL_TRACE_API_END(api, hint, trace_total_time) \
73 trace_end(api, hint, trace_total_time);
74 # define _COREGL_TRACE_API_OUTPUT(force_output) \
75 trace_output(force_output);
77 # define _COREGL_TRACE_API_BEGIN(api, hint, trace_total_time) NULL;
78 # define _COREGL_TRACE_API_END(api, hint, trace_total_time)
79 # define _COREGL_TRACE_API_OUTPUT(force_output)
83 #define _COREGL_FAST_FUNC_BEGIN()
85 #define _COREGL_FAST_FUNC_END()
87 #define _COREGL_FAST_FUNC_SYMCALL_BEGIN()
89 #define _COREGL_FAST_FUNC_SYMCALL_END()
91 #define _COREGL_WRAP_FUNC_BEGIN() \
92 static void *trace_hint = NULL; \
93 if (trace_api_flag == 1) \
94 trace_hint = _COREGL_TRACE_API_BEGIN(__func__, trace_hint, 1);
96 #define _COREGL_WRAP_FUNC_END() \
97 if (trace_api_flag == 1) \
98 _COREGL_TRACE_API_END(__func__, trace_hint, 1);
100 typedef enum _CoreGL_Opt_Flag
107 extern CoreGL_Opt_Flag api_opt;
109 #ifndef _COREGL_DESKTOP_GL
110 typedef EGLSurface GLSurface;
111 typedef EGLDisplay GLDisplay;
112 typedef EGLContext GLContext;
114 typedef GLXDrawable GLSurface;
115 typedef Display GLDisplay;
116 typedef GLXContext GLContext;
119 typedef struct _GLContextState
127 typedef struct _GLThreadState
131 GLContextState *cstate;
132 GLSurface *rsurf_draw;
133 GLSurface *rsurf_read;
134 Trace_Data **ftd_table;
137 typedef struct _GLContext_List
142 GLContextState *cstate;
143 struct _GLContext_List *next;
146 extern void *glue_lib_handle;
147 extern void *egl_lib_handle;
149 extern GLContext_List *glctx_list;
151 #include "coregl_thread_pthread.h"
152 extern Mutex ctx_list_access_mutex;
154 typedef struct _General_Trace_List
157 struct _General_Trace_List *next;
158 } General_Trace_List;
160 extern General_Trace_List *thread_trace_list;
161 extern Mutex general_trace_lists_access_mutex;
163 extern int trace_api_flag;
164 extern int trace_ctx_flag;
165 extern int trace_ctx_force_flag;
166 extern int trace_state_flag;
167 extern int debug_nofp;
168 extern FILE *trace_fp;
170 // Environment functions
171 extern const char *get_env_setting(const char *name);
173 // Main utility functions
174 extern int init_new_thread_state();
177 extern int mutex_lock(Mutex *mt);
178 extern int mutex_unlock(Mutex *mt);
179 extern int get_current_thread();
180 extern int set_current_thread_state(Mutex *mt, GLThreadState *tstate);
181 extern GLThreadState *get_current_thread_state();
184 // Context state functions
185 extern int add_context_state_to_list(const void *data, const int datalen, GLContextState *cstate, Mutex *mtx);
186 extern int remove_context_states_from_list(GLContextState *cstate, Mutex *mtx);
187 extern GLContextState *get_context_state_from_list(const void *data, const int datalen, Mutex *mtx);
190 // Override functions
191 extern void override_glue_normal_path();
192 extern void override_glue_fast_path();
193 extern void override_gl_normal_path();
194 extern void override_gl_fast_path();
195 extern void override_glue_apis(CoreGL_Opt_Flag opt);
196 extern void override_gl_apis(CoreGL_Opt_Flag opt);
199 // Debug & Trace functions
200 extern int add_to_general_trace_list(General_Trace_List **gtl, void *value);
201 extern int remove_from_general_trace_list(General_Trace_List **gtl, void *value);
202 extern void *trace_begin(const char *name, void *hint, int trace_total_time);
203 extern void *trace_end(const char *name, void *hint, int trace_total_time);
204 extern void trace_output(int force_output);
206 #endif // COREGL_INTERNAL_H