opengles emulator: use bionic tls slot

This make the EGL/GLESv1/GLESv2 libraries on the guest to use
the OPENGL bionic tls slot for faster tls access.
Note that we still setting the slower tls in order to have the
tls destructor which allow us to close the host connection
when the thread exits.

Gives slightly performance improvement, the avg score for the
teapot test in 0xBench goes from 34 to 37 fps. (This test is
near immediate mode since it renders a lot of small primitives
so it is a good candicate to be improved).

Change-Id: I9060c75cc29c2e28721fa11d3f318b438edb5da9
This commit is contained in:
Guy Zadickario
2011-08-16 15:01:07 +03:00
parent 2c68d0f347
commit 75094ee1ac
7 changed files with 35 additions and 6 deletions

View File

@@ -17,6 +17,10 @@
#define _THREAD_INFO_H
#include "HostConnection.h"
#include <pthread.h>
#ifdef HAVE_ANDROID_OS
#include <bionic_tls.h>
#endif
struct EGLContext_t;
@@ -30,5 +34,26 @@ struct EGLThreadInfo
};
EGLThreadInfo *getEGLThreadInfo();
EGLThreadInfo *slow_getEGLThreadInfo();
#ifdef HAVE_ANDROID_OS
// We have a dedicated TLS slot in bionic
inline EGLThreadInfo* getEGLThreadInfo() {
EGLThreadInfo *tInfo =
(EGLThreadInfo *)(((unsigned *)__get_tls())[TLS_SLOT_OPENGL]);
if (!tInfo) {
tInfo = slow_getEGLThreadInfo();
((uint32_t *)__get_tls())[TLS_SLOT_OPENGL] = (uint32_t)tInfo;
}
return tInfo;
}
#else
inline EGLThreadInfo* getEGLThreadInfo() {
return slow_getEGLThreadInfo();
}
#endif
#endif // of _THREAD_INFO_H