Add support for GLES 3.2
[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 #include <stdint.h>
6
7 #include "coregl.h"
8
9 #include "modules/coregl_module.h"
10
11 #define unlikely(x) __builtin_expect(x, 0)
12
13 // Symbol definition for real
14 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST)     extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
15 # include "headers/sym.h"
16 #undef _COREGL_SYMBOL
17
18 #define COREGL_DEBUG
19
20 ///////////////////////////////////////
21 // Disable dlog for debugging urgent issues //
22 #ifdef COREGL_DEBUG
23 //# define LOG_TAG "CoreGL"
24 //# include <dlog.h>
25 # define LOGE(...) fprintf(stderr, __VA_ARGS__)
26 # define LOGW(...) fprintf(stderr, __VA_ARGS__)
27 # define LOGD(...) fprintf(stderr, __VA_ARGS__)
28 #endif
29 ///////////////////////////////////////
30
31 # define COREGL_ERR(...) \
32      LOGE(" "__VA_ARGS__)
33 # define COREGL_WRN(...) \
34      LOGW(" "__VA_ARGS__)
35 # ifdef COREGL_DEBUG
36 #  define COREGL_DBG(...) \
37      LOGD(" "__VA_ARGS__)
38 # else
39 #  define COREGL_DBG(...)
40 # endif
41
42 # define COREGL_LOG(...) \
43      LOGD(" "__VA_ARGS__)
44
45
46 # define TRACE(...) \
47      if (trace_fp != NULL) \
48        fprintf(trace_fp, __VA_ARGS__); \
49      else \
50        LOGD(" "__VA_ARGS__)
51
52 # define TRACE_END() \
53      if (trace_fp != NULL) \
54        fflush(trace_fp)
55 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
56
57 static inline GLint GET_INT_FROM_FLOAT(GLfloat value)
58 {
59         return (GLint)value;
60 }
61 static inline GLuint GET_UINT_FROM_FLOAT(GLfloat value)
62 {
63         return (GLuint)value;
64 }
65
66
67 #ifdef COREGL_DEBUG
68 # define AST(expr) \
69      if (!(expr)) { LOGE("\E[40;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
70 #else
71 # define AST(expr) \
72      if (expr)
73 #endif
74
75 typedef GLvoid      *GLvoidptr;
76 typedef GLuint       GLuintmask;
77
78 #define COREGL_GLAPI_32 5
79 #define COREGL_GLAPI_31 4
80 #define COREGL_GLAPI_3  3
81 #define COREGL_GLAPI_2  2
82 #define COREGL_GLAPI_1  1
83 #define COREGL_GLAPI_1_2_COMMON 1
84
85
86 #define _COREGL_INT_INIT_VALUE -3
87
88 #define COREGL_OVERRIDE_API(mangle, func, prefix) \
89         mangle##func = prefix##func
90
91 typedef EGLSurface     GLSurface;
92 typedef EGLDisplay     GLDisplay;
93 typedef EGLContext     GLContext;
94
95 #define COREGL_GL_NO_CONTEXT EGL_NO_CONTEXT
96
97 typedef struct _GLThreadState {
98         int                      thread_id;
99         void                    *module_data[COREGL_MAX_MODULES];
100 } GLThreadState;
101
102 extern void                *glue_lib_handle;
103 extern void                *egl_lib_handle;
104
105 #include "coregl_thread_pthread.h"
106
107 typedef struct _General_Trace_List {
108         void                          *value;
109         struct _General_Trace_List    *next;
110 } General_Trace_List;
111
112 extern General_Trace_List  *thread_trace_list;
113 extern Mutex                general_trace_lists_access_mutex;
114
115 extern FILE               *trace_fp;
116
117 extern int                 trace_api_flag;
118 extern int                 trace_api_all_flag;
119 extern int                 trace_api_frame_flag;
120 extern int                 trace_mem_flag;
121 extern int                 trace_mem_all_flag;
122 extern int                 trace_ctx_flag;
123 extern int                 trace_ctx_force_flag;
124 extern int                 trace_state_flag;
125 extern int                 trace_surface_flag;
126 extern int                 trace_surface_sequence_sort_flag;
127 extern int                 trace_surface_filter_period_begin;
128 extern int                 trace_surface_filter_period_end;
129 extern int                 trace_surface_filter_type;
130 extern uintptr_t           trace_surface_filter_handle;
131 extern int                 trace_surface_filter_size_w;
132 extern int                 trace_surface_filter_size_h;
133 extern int                 trace_surface_print_only_flag;
134
135 #define USE_TRACEPATH           (trace_api_flag == 1 || trace_ctx_flag == 1 || trace_state_flag == 1 || trace_mem_flag == 1 || trace_surface_flag == 1)
136
137 // Environment functions
138 extern const char         *get_env_setting(const char *name);
139
140 // Main utility functions
141 extern int                 init_new_thread_state();
142
143 // Thread functions
144 extern int                 mutex_init(Mutex *mt);
145 extern int                 mutex_lock(Mutex *mt);
146 extern int                 mutex_unlock(Mutex *mt);
147 extern int                 get_current_thread();
148 extern int                 set_current_thread_state(GLThreadState *tstate);
149 extern GLThreadState      *get_current_thread_state();
150
151
152 // Override functions
153 extern void                init_export();
154 extern void                deinit_export();
155
156 // Module interfaces
157 extern void                init_modules();
158 extern void                deinit_modules();
159 extern void                reset_modules_override();
160 extern void                init_modules_tstate(GLThreadState *tstate);
161 extern void                deinit_modules_tstate(GLThreadState *tstate);
162
163
164 // Debug & Trace functions
165 extern int                 add_to_general_trace_list(General_Trace_List **gtl,
166                 void *value);
167 extern int                 remove_from_general_trace_list(
168         General_Trace_List **gtl, void *value);
169
170 #endif // COREGL_INTERNAL_H
171