am d3b2c029
: Merge "[MIPS] Add MIPS architecture support to opengl framework"
* commit 'd3b2c029eba356e7bed3754d60ade556c216348e': [MIPS] Add MIPS architecture support to opengl framework
This commit is contained in:
commit
111d920bb5
@ -37,6 +37,8 @@ namespace android {
|
|||||||
|
|
||||||
#if USE_FAST_TLS_KEY
|
#if USE_FAST_TLS_KEY
|
||||||
|
|
||||||
|
#if defined(__arm__)
|
||||||
|
|
||||||
#define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n"
|
#define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n"
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((naked)) _api
|
#define API_ENTRY(_api) __attribute__((naked)) _api
|
||||||
@ -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_NAME(_n) __glExtFwd##_n
|
||||||
|
|
||||||
#define GL_EXTENSION(_n) \
|
#define GL_EXTENSION(_n) \
|
||||||
|
@ -41,6 +41,8 @@ using namespace android;
|
|||||||
|
|
||||||
#if USE_FAST_TLS_KEY
|
#if USE_FAST_TLS_KEY
|
||||||
|
|
||||||
|
#if defined(__arm__)
|
||||||
|
|
||||||
#define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n"
|
#define GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n"
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((naked)) _api
|
#define API_ENTRY(_api) __attribute__((naked)) _api
|
||||||
@ -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, ...) \
|
#define CALL_GL_API_RETURN(_api, ...) \
|
||||||
CALL_GL_API(_api, __VA_ARGS__) \
|
CALL_GL_API(_api, __VA_ARGS__) \
|
||||||
return 0; // placate gcc's warnings. never reached.
|
return 0; // placate gcc's warnings. never reached.
|
||||||
|
@ -97,6 +97,8 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
|
|||||||
|
|
||||||
#if USE_FAST_TLS_KEY && !CHECK_FOR_GL_ERRORS
|
#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 GET_TLS(reg) "mrc p15, 0, " #reg ", c13, c0, 3 \n"
|
||||||
|
|
||||||
#define API_ENTRY(_api) __attribute__((naked)) _api
|
#define API_ENTRY(_api) __attribute__((naked)) _api
|
||||||
@ -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, ...) \
|
#define CALL_GL_API_RETURN(_api, ...) \
|
||||||
CALL_GL_API(_api, __VA_ARGS__) \
|
CALL_GL_API(_api, __VA_ARGS__) \
|
||||||
return 0; // placate gcc's warnings. never reached.
|
return 0; // placate gcc's warnings. never reached.
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
#include <GLES2/gl2.h>
|
#include <GLES2/gl2.h>
|
||||||
#include <GLES2/gl2ext.h>
|
#include <GLES2/gl2ext.h>
|
||||||
|
|
||||||
#if !defined(__arm__)
|
#if !defined(__arm__) && !defined(__mips__)
|
||||||
#define USE_SLOW_BINDING 1
|
#define USE_SLOW_BINDING 1
|
||||||
#else
|
#else
|
||||||
#define USE_SLOW_BINDING 0
|
#define USE_SLOW_BINDING 0
|
||||||
|
Loading…
Reference in New Issue
Block a user