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