VENDOR_EGL_LIB_PATH = "\"/usr/lib/egl/libEGL.so\""
VENDOR_GL_LIB_PATH = "\"/usr/lib/egl/libGLESv2.so\""
-CFLAGS = -g -O2 -fvisibility=hidden -fPIC -Wall -std=c99 -D_COREGL_COMPILE_DATE=$(COMPILE_DATE)
+CFLAGS = -g -O2 -fvisibility=hidden -fPIC -fno-strict-aliasing -Wall -std=c99 -D_COREGL_COMPILE_DATE=$(COMPILE_DATE)
CFLAGS += -D_COREGL_VENDOR_EGL_LIB_PATH=$(VENDOR_EGL_LIB_PATH)
CFLAGS += -D_COREGL_VENDOR_GL_LIB_PATH=$(VENDOR_GL_LIB_PATH)
CFLAGS += `pkg-config --cflags dlog`
fflush(trace_fp)
#define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
+static inline GLint GET_INT_FROM_FLOAT(GLfloat value) { return *((GLint *)&value); }
+static inline GLuint GET_UINT_FROM_FLOAT(GLfloat value) { return *((GLint *)&value); }
+
#ifdef COREGL_DEBUG
# define AST(expr) \
int i;
for (i = 0; i < initial_ctx->gl_num_uniform_buffer_bindings[0]; i++)
{
- _orig_fastpath_glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, &(((GLint *)params)[i]));
+/////////////////////////////////////////////////////////////////////////////////
+// XXXX : AVOID SEGFAULT in ADRENO
+ ((GLint *)params)[i] = 0;
+// _orig_fastpath_glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, &(((GLint *)params)[i]));
+/////////////////////////////////////////////////////////////////////////////////
}
}
}
}
+
+static float
+_get_gl_version()
+{
+ float GLver = 0.0;
+ const char *vret;
+ int vlen = _COREGL_INT_INIT_VALUE;
+ int i = _COREGL_INT_INIT_VALUE;
+ char vret_tmp[80 + 1] = { 0 };
+ IF_GL_SUCCESS(vret = (const char *)_orig_fastpath_glGetString(GL_VERSION))
+ {
+ vlen = (int)strlen(vret);
+ if (!strncmp(vret, "OpenGL ES", 9) && vlen >= 11)
+ {
+ int stp = 10;
+ if (vret[9] == '-')
+ {
+ if (vlen < 14) return 0.0f;
+ stp = 13;
+ }
+
+ for (i = stp; ; i++)
+ {
+ if (vret[i] == ' ' || vret[i] == 0x00 || i >= 80)
+ {
+ strncpy(vret_tmp, &vret[stp], i - stp);
+ vret_tmp[i - stp] = 0x00;
+ break;
+ }
+ }
+ if (vret_tmp[0] != 0x00)
+ GLver = atof(vret_tmp);
+ }
+ }
+ return GLver;
+}
+
+
Mutex extension_check_mutex = MUTEX_INITIALIZER;
char string_extensions[16384] = { 0x00 };
char string_each_extensions[128][64];
int gl_extension_count = 0;
+
static void
_valid_extension_string()
{
char string_tmpbuf[2048];
- int i = _COREGL_INT_INIT_VALUE;
const char *res = NULL;
AST(mutex_lock(&extension_check_mutex) == 1);
{
if (string_extensions[0] == 0x00)
{
- double GLver = 0.0;
- const char *vret;
- char vret_tmp[80] = { 0 };
- IF_GL_SUCCESS(vret = (const char *)_orig_fastpath_glGetString(GL_VERSION))
- {
- if (!strncmp(vret, "OpenGL ES", 9))
- {
- int stp = 10;
- if (vret[9] == '-') stp = 13;
-
- for (i = stp; ; i++)
- {
- if (vret[i] == ' ' || vret[i] == 0x00 || i >= 80)
- {
- strncpy(vret_tmp, &vret[stp], i - stp);
- vret_tmp[i - stp] = 0x00;
- break;
- }
- }
- if (vret_tmp[0] != 0x00)
- GLver = atof(vret_tmp);
- }
- }
+ double GLver = _get_gl_version();
strcpy(string_tmpbuf, res);
char *fstr = &string_tmpbuf[0], *estr = NULL;
{
const char *ret = NULL;
static const char *string_gles20 = "OpenGL ES 2.0";
+ static const char *string_gles30 = "OpenGL ES 3.0";
DEFINE_FASTPAH_GL_FUNC();
_COREGL_FASTPATH_FUNC_BEGIN();
case GL_VERSION:
IF_GL_SUCCESS(ret = (const char *)_orig_fastpath_glGetString(name))
{
- if (strncmp(ret, "OpenGL ES 2.0", 13))
+ double GLver = _get_gl_version();
+ if (GLver > 3.0)
+ {
+ COREGL_WRN("\E[40;31;1mFastpath can't support %s (Fixed to %s)\E[0m\n", ret, string_gles30);
+ ret = string_gles30;
+ }
+ if (GLver < 2.0)
{
COREGL_WRN("\E[40;31;1mFastpath can't support %s (Fixed to %s)\E[0m\n", ret, string_gles20);
ret = string_gles20;
SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, SET_4(0, 0, 0, 1)),
SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, _sym_glGetVertexAttribfv(i, GL_CURRENT_VERTEX_ATTRIB, (GLfloat *)value);))
GLUE_STATE(GLint, gl_vertex_attrib_value_integer, 4 * INITIAL_CTX->gl_num_vertex_attribs[0], MAX_VERTEX_ATTRIBS,
- SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, SET_4(0, 0, 0, 1)),
- SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, _sym_glGetVertexAttribfv(i, GL_CURRENT_VERTEX_ATTRIB, (GLfloat *)value);))
+ SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, SET_4(0, 0, 0, GET_INT_FROM_FLOAT(1.0f))),
+ SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, _sym_glGetVertexAttribIiv(i, GL_CURRENT_VERTEX_ATTRIB, (GLint *)value);))
GLUE_STATE(GLuint, gl_vertex_attrib_value_unsigned_integer, 4 * INITIAL_CTX->gl_num_vertex_attribs[0], MAX_VERTEX_ATTRIBS,
- SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, SET_4(0, 0, 0, 1)),
- SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, _sym_glGetVertexAttribfv(i, GL_CURRENT_VERTEX_ATTRIB, (GLfloat *)value);))
+ SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, SET_4(0, 0, 0, GET_UINT_FROM_FLOAT(1.0f))),
+ SET_N(INITIAL_CTX->gl_num_vertex_attribs[0], 4, _sym_glGetVertexAttribIuiv(i, GL_CURRENT_VERTEX_ATTRIB, (GLuint *)value);))
// MISC FLAG 3
GLUE_STATE(GLenum, gl_read_buffer, 1, 1, SET_1(GL_BACK), _sym_glGetIntegerv(GL_READ_BUFFER, (GLint *)value);)
int i;
for (i = 0; i < initial_fake_ctx->gl_num_uniform_buffer_bindings[0]; i++)
{
- _orig_tracepath_glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, &(((GLint *)params)[i]));
+/////////////////////////////////////////////////////////////////////////////////
+// XXXX : AVOID SEGFAULT in ADRENO
+ ((GLint *)params)[i] = 0;
+// _orig_tracepath_glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, i, &(((GLint *)params)[i]));
+/////////////////////////////////////////////////////////////////////////////////
}
}