Loading opengl/libs/EGL/getProcAddress.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ namespace android { #if USE_FAST_TLS_KEY #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -57,6 +59,41 @@ namespace android { : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_EXTENSION_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn], $ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " nop\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, \ ext.extensions[_api])) \ : \ ); #else #error Unsupported architecture #endif #define GL_EXTENSION_NAME(_n) __glExtFwd##_n #define GL_EXTENSION(_n) \ Loading opengl/libs/GLES2/gl2.cpp +40 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ using namespace android; #if USE_FAST_TLS_KEY #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -59,6 +61,44 @@ using namespace android; : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ register unsigned int v0 asm("v0"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn],$ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " move %[v0], $0\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0), \ [v0] "=&r"(v0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ : \ ); #else #error Unsupported architecture #endif #define CALL_GL_API_RETURN(_api, ...) \ CALL_GL_API(_api, __VA_ARGS__) \ return 0; // placate gcc's warnings. never reached. Loading opengl/libs/GLES_CM/gl.cpp +38 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,8 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, #if USE_FAST_TLS_KEY && !CHECK_FOR_GL_ERRORS #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -115,6 +117,42 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ register unsigned int v0 asm("v0"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn], $ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " move %[v0], $0\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0), \ [v0] "=&r"(v0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ : \ ); #else #error Unsupported architecture #endif #define CALL_GL_API_RETURN(_api, ...) \ CALL_GL_API(_api, __VA_ARGS__) \ return 0; // placate gcc's warnings. never reached. Loading opengl/libs/hooks.h +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> #if !defined(__arm__) #if !defined(__arm__) && !defined(__mips__) #define USE_SLOW_BINDING 1 #else #define USE_SLOW_BINDING 0 Loading Loading
opengl/libs/EGL/getProcAddress.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ namespace android { #if USE_FAST_TLS_KEY #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -57,6 +59,41 @@ namespace android { : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_EXTENSION_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn], $ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " nop\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, \ ext.extensions[_api])) \ : \ ); #else #error Unsupported architecture #endif #define GL_EXTENSION_NAME(_n) __glExtFwd##_n #define GL_EXTENSION(_n) \ Loading
opengl/libs/GLES2/gl2.cpp +40 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,8 @@ using namespace android; #if USE_FAST_TLS_KEY #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -59,6 +61,44 @@ using namespace android; : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ register unsigned int v0 asm("v0"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn],$ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " move %[v0], $0\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0), \ [v0] "=&r"(v0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ : \ ); #else #error Unsupported architecture #endif #define CALL_GL_API_RETURN(_api, ...) \ CALL_GL_API(_api, __VA_ARGS__) \ return 0; // placate gcc's warnings. never reached. Loading
opengl/libs/GLES_CM/gl.cpp +38 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,8 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, #if USE_FAST_TLS_KEY && !CHECK_FOR_GL_ERRORS #if defined(__arm__) #define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n" #define API_ENTRY(_api) __attribute__((naked)) _api Loading @@ -115,6 +117,42 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, : \ ); #elif defined(__mips__) #define API_ENTRY(_api) __attribute__((noinline)) _api #define CALL_GL_API(_api, ...) \ register unsigned int t0 asm("t0"); \ register unsigned int fn asm("t1"); \ register unsigned int tls asm("v1"); \ register unsigned int v0 asm("v0"); \ asm volatile( \ ".set push\n\t" \ ".set noreorder\n\t" \ ".set mips32r2\n\t" \ "rdhwr %[tls], $29\n\t" \ "lw %[t0], %[OPENGL_API](%[tls])\n\t" \ "beqz %[t0], 1f\n\t" \ " move %[fn], $ra\n\t" \ "lw %[fn], %[API](%[t0])\n\t" \ "movz %[fn], $ra, %[fn]\n\t" \ "1:\n\t" \ "j %[fn]\n\t" \ " move %[v0], $0\n\t" \ ".set pop\n\t" \ : [fn] "=c"(fn), \ [tls] "=&r"(tls), \ [t0] "=&r"(t0), \ [v0] "=&r"(v0) \ : [OPENGL_API] "I"(TLS_SLOT_OPENGL_API*4), \ [API] "I"(__builtin_offsetof(gl_hooks_t, gl._api)) \ : \ ); #else #error Unsupported architecture #endif #define CALL_GL_API_RETURN(_api, ...) \ CALL_GL_API(_api, __VA_ARGS__) \ return 0; // placate gcc's warnings. never reached. Loading
opengl/libs/hooks.h +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> #if !defined(__arm__) #if !defined(__arm__) && !defined(__mips__) #define USE_SLOW_BINDING 1 #else #define USE_SLOW_BINDING 0 Loading