4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
8 * Sanghyun Lee <sanghyunnim.lee@samsung.com>
9 * Juyoung Kim <j0.kim@samsung.com>
10 * Vitaliy Cherepanov <v.cherepanov@samsung.com>
12 * This library is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 2.1 of the License, or (at your option)
17 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this library; if not, write to the Free Software Foundation, Inc., 51
24 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
35 * TODO find this headers. need for EGL_Context and other
49 /* TODO add egl header for next */
50 #define EGLContext void *
51 extern EGLContext eglGetCurrentContext(void);
53 #define NO_RETURN_FORMAT "%s"
54 #define NO_RETURN_VALUE 0
55 #define APITYPE_INIT 0
56 #define APITYPE_CONTEXT 1
57 #define APITYPE_NO_CONTEXT 2
59 #define FUNC(FUNCNAME) FUNCNAME
60 #define FUNCSTR(FUNCNAME) #FUNCNAME
61 #define FUNCID(FUNCNAME) API_ID_##FUNCNAME
63 #define PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time) \
64 do { /* PACK_GL_ADD_COMMON */ \
65 /* TODO restore eglGetCurrentContext */ \
66 /*BUF_PTR = pack_int64(BUF_PTR, voidp_to_uint64((void *)eglGetCurrentContext()));*/\
67 BUF_PTR = pack_int64(BUF_PTR, voidp_to_uint64((void *)0));\
68 BUF_PTR = pack_int32(BUF_PTR, (uint32_t)GL_api_type); \
69 BUF_PTR = pack_int64(BUF_PTR, (uint64_t)GL_elapsed_time); \
72 #define PACK_GL_ADD(GL_api_type, GL_elapsed_time, GL_context_value) \
73 do { /* PACK_GL_ADD */ \
74 PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time); \
75 BUF_PTR = pack_string(BUF_PTR, GL_context_value); \
78 #define PACK_GL_SHADER(GL_api_type, GL_elapsed_time, GL_shader, GL_shader_size) \
79 do { /* PACK_GL_SHADER */ \
80 PACK_GL_ADD_COMMON(GL_api_type, GL_elapsed_time); \
81 uint32_t min = (sizeof(LOCAL_BUF) - (BUF_PTR - LOCAL_BUF)); \
82 if (min > MAX_SHADER_LEN) \
83 min = MAX_SHADER_LEN; \
84 BUF_PTR = pack_string_to_file(BUF_PTR, GL_shader, \
85 GL_shader_size, min); \
88 #define BEFORE_GL_ORIG(FUNCNAME) \
89 DECLARE_VARIABLE_STANDARD_NORET; \
90 GLenum error = GL_NO_ERROR; \
91 static methodType FUNCNAME ## p = 0; \
92 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
93 uint64_t start_nsec = 0; \
95 if(blockresult != 0) \
96 start_nsec = get_current_nsec(); \
98 init_probe_gl(#FUNCNAME, (void **)&FUNCNAME##p, \
99 LIBGLES20, blockresult, vAPI_ID); \
102 #define BEFORE_GL_API(FUNCNAME) \
103 DECLARE_VARIABLE_STANDARD_NORET; \
104 GLenum error = GL_NO_ERROR; \
105 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
106 uint64_t start_nsec = 0; \
108 if(blockresult != 0) \
109 start_nsec = get_current_nsec(); \
110 if(!__gl_api->FUNCNAME) { \
111 probe_terminate_with_err("api not initialized", \
112 #FUNCNAME, LIBGLES20); \
115 #define INIT_LIB_ID_STR(LIB_ID, LIB_STR, KEYS) \
116 if (lib_handle[LIB_ID] == ((void *) 0)) { \
117 lib_handle[LIB_ID] = dlopen(LIB_STR, RTLD_LAZY | RTLD_GLOBAL); \
118 if (lib_handle[LIB_ID] == ((void *) 0)) { \
119 char perror_msg[128]; \
120 sprintf(perror_msg, "dlopen failed : [%s],%s", \
121 __FUNCTION__, LIB_STR); \
122 perror(perror_msg); \
127 #define INIT_LIB(LIB_ID, KEYS) \
128 INIT_LIB_ID_STR(LIB_ID, lib_string[LIB_ID], KEYS)
131 #define BEFORE_EGL_NATIVE(FUNCNAME) \
132 DECLARE_VARIABLE_STANDARD_NORET; \
133 GLenum error = EGL_SUCCESS; \
134 static methodType FUNCNAME ## p = 0; \
135 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
136 uint64_t start_nsec = 0; \
138 if(blockresult != 0) \
139 start_nsec = get_current_nsec(); \
141 init_probe_egl(#FUNCNAME, (void **)&FUNCNAME##p, LIBEGL)
143 #define EGL_GET_ERROR() \
144 if (blockresult != 0) { \
145 error = eglGetError(); \
148 #define AFTER(RET_TYPE, RET_VAL, APITYPE, CONTEXT_VAL, INPUTFORMAT, ...) \
149 POST_PACK_PROBEBLOCK_BEGIN(); \
150 PREPARE_LOCAL_BUF(); \
151 PACK_COMMON_BEGIN(MSG_PROBE_GL, vAPI_ID, INPUTFORMAT, __VA_ARGS__); \
152 PACK_COMMON_END(RET_TYPE, RET_VAL, error, blockresult); \
153 PACK_GL_ADD(APITYPE, get_current_nsec() - start_nsec, CONTEXT_VAL); \
155 POST_PACK_PROBEBLOCK_END()
157 #define AFTER_NO_PARAM(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE) \
158 AFTER(RET_TYPE, RETVAL, APITYPE, CONTEXTVALUE, "", 0)
160 #define GL_GET_ERROR() \
161 if (blockresult != 0) { \
162 error = REAL_NAME(glGetError)(); \
165 #define AFTER_SHADER(RET_TYPE, RET_VAL, APITYPE, CONTEXT_VAL, CONTEXT_SIZE, INPUTFORMAT, ...) \
166 POST_PACK_PROBEBLOCK_BEGIN(); \
167 PREPARE_LOCAL_BUF(); \
168 PACK_COMMON_BEGIN(MSG_PROBE_GL, vAPI_ID, INPUTFORMAT, __VA_ARGS__); \
169 PACK_COMMON_END(RET_TYPE, RET_VAL, error, blockresult); \
170 PACK_GL_SHADER(APITYPE, get_current_nsec() - start_nsec, CONTEXT_VAL, CONTEXT_SIZE); \
172 POST_PACK_PROBEBLOCK_END()
174 #define BEFORE_EVAS_GL(FUNCNAME) \
175 DECLARE_VARIABLE_STANDARD_NORET; \
176 GLenum error = GL_NO_ERROR; \
177 static methodType FUNCNAME ## p = 0; \
178 int32_t vAPI_ID = API_ID_ ## FUNCNAME; \
179 uint64_t start_nsec = 0; \
181 if(blockresult != 0) \
182 start_nsec = get_current_nsec(); \
183 GET_REAL_FUNC_RTLD_NEXT(FUNCNAME)
185 GLenum glGetError(void);
186 void glGetIntegerv(GLenum pname, GLint * params);
187 extern Evas_GL_API *__gl_api;
188 extern void save_orig_gl_api_list(Evas_GL_API *api);
189 extern void change_gl_api_list(Evas_GL_API *api);
191 #endif /* DA_GLES20_H_ */