EGL: add x86/64 assembly code for EGL/GLES wrappers
There was no explicit support for x86/64 architecture in EGL/GLES wrappers. This resulted either in failures or sub-optimal implementation of the wrapper functions. Change-Id: I20d99d7372fbf642ee4b94a05c8cb971cba29988 Signed-off-by: Wajdeczko, Michal <michal.wajdeczko@intel.com>
This commit is contained in:
parent
c9fcaf3751
commit
c80aafa61d
@ -56,6 +56,50 @@ namespace android {
|
||||
: \
|
||||
);
|
||||
|
||||
#elif defined(__i386__)
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_EXTENSION_API(_api) \
|
||||
register void** fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%gs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"cmovne %P[api](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%[fn]\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, \
|
||||
ext.extensions[_api])) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__x86_64__)
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_EXTENSION_API(_api) \
|
||||
register void** fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%fs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"cmovne %P[api](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%[fn]\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, \
|
||||
ext.extensions[_api])) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__mips__)
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
@ -86,6 +130,7 @@ namespace android {
|
||||
ext.extensions[_api])) \
|
||||
: \
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CALL_GL_EXTENSION_API)
|
||||
|
@ -58,6 +58,44 @@ using namespace android;
|
||||
: \
|
||||
);
|
||||
|
||||
#elif defined(__i386__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_API(_api, ...) \
|
||||
register void** fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%gs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%P[api](%[fn])\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__x86_64__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_API(_api, ...) \
|
||||
register void** fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%fs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%P[api](%[fn])\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__mips__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
@ -110,6 +110,44 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type,
|
||||
: \
|
||||
);
|
||||
|
||||
#elif defined(__i386__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_API(_api, ...) \
|
||||
register void* fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%gs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%P[api](%[fn])\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__x86_64__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
||||
#define CALL_GL_API(_api, ...) \
|
||||
register void** fn; \
|
||||
__asm__ volatile( \
|
||||
"mov %%fs:0, %[fn]\n" \
|
||||
"mov %P[tls](%[fn]), %[fn]\n" \
|
||||
"test %[fn], %[fn]\n" \
|
||||
"je 1f\n" \
|
||||
"jmp *%P[api](%[fn])\n" \
|
||||
"1:\n" \
|
||||
: [fn] "=r" (fn) \
|
||||
: [tls] "i" (TLS_SLOT_OPENGL_API*sizeof(void*)), \
|
||||
[api] "i" (__builtin_offsetof(gl_hooks_t, gl._api)) \
|
||||
: "cc" \
|
||||
);
|
||||
|
||||
#elif defined(__mips__) && !USE_SLOW_BINDING
|
||||
|
||||
#define API_ENTRY(_api) __attribute__((noinline)) _api
|
||||
|
Loading…
Reference in New Issue
Block a user