Merge "opengles emulator: use bionic tls slot"

This commit is contained in:
David Turner
2011-08-16 07:35:29 -07:00
committed by Android Code Review
7 changed files with 35 additions and 6 deletions

View File

@@ -6,10 +6,11 @@
#include "ErrorLog.h" #include "ErrorLog.h"
#include <private/ui/android_natives_priv.h> #include <private/ui/android_natives_priv.h>
#include "gralloc_cb.h" #include "gralloc_cb.h"
#include "ThreadInfo.h"
//XXX: fix this macro to get the context from fast tls path //XXX: fix this macro to get the context from fast tls path
#define GET_CONTEXT gl_client_context_t * ctx = HostConnection::get()->glEncoder(); #define GET_CONTEXT gl_client_context_t * ctx = getEGLThreadInfo()->hostConn->glEncoder();
#include "gl_entry.cpp" #include "gl_entry.cpp"

View File

@@ -6,10 +6,10 @@
#include "ErrorLog.h" #include "ErrorLog.h"
#include <private/ui/android_natives_priv.h> #include <private/ui/android_natives_priv.h>
#include "gralloc_cb.h" #include "gralloc_cb.h"
#include "ThreadInfo.h"
//XXX: fix this macro to get the context from fast tls path //XXX: fix this macro to get the context from fast tls path
#define GET_CONTEXT gl2_client_context_t * ctx = HostConnection::get()->gl2Encoder(); #define GET_CONTEXT gl2_client_context_t * ctx = getEGLThreadInfo()->hostConn->gl2Encoder();
#include "gl2_entry.cpp" #include "gl2_entry.cpp"

View File

@@ -8,6 +8,6 @@ LOCAL_SRC_FILES := \
QemuPipeStream.cpp \ QemuPipeStream.cpp \
ThreadInfo.cpp ThreadInfo.cpp
$(call emugl-export,C_INCLUDES,$(LOCAL_PATH)) $(call emugl-export,C_INCLUDES,$(LOCAL_PATH) bionic/libc/private)
$(call emugl-end-module) $(call emugl-end-module)

View File

@@ -27,7 +27,7 @@ static void tlsDestruct(void *ptr)
} }
} }
EGLThreadInfo *getEGLThreadInfo() EGLThreadInfo *slow_getEGLThreadInfo()
{ {
EGLThreadInfo *ti = (EGLThreadInfo *)thread_store_get(&s_tls); EGLThreadInfo *ti = (EGLThreadInfo *)thread_store_get(&s_tls);
if (ti) return ti; if (ti) return ti;

View File

@@ -17,6 +17,10 @@
#define _THREAD_INFO_H #define _THREAD_INFO_H
#include "HostConnection.h" #include "HostConnection.h"
#include <pthread.h>
#ifdef HAVE_ANDROID_OS
#include <bionic_tls.h>
#endif
struct EGLContext_t; 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
#endif // of _THREAD_INFO_H

View File

@@ -17,6 +17,7 @@ LOCAL_SRC_FILES := \
egl.cpp \ egl.cpp \
ClientAPIExts.cpp ClientAPIExts.cpp
LOCAL_C_INCLUDES += bionic/libc/private
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -DLOG_TAG=\"EGL_emulation\" -DEGL_EGLEXT_PROTOTYPES -DWITH_GLES2 LOCAL_CFLAGS += -DLOG_TAG=\"EGL_emulation\" -DEGL_EGLEXT_PROTOTYPES -DWITH_GLES2

View File

@@ -15,6 +15,8 @@ LOCAL_ADDITIONAL_DEPENDENCIES := \
LOCAL_SRC_FILES := \ LOCAL_SRC_FILES := \
gralloc.cpp gralloc.cpp
LOCAL_C_INCLUDES += bionic/libc/private
LOCAL_C_INCLUDES += \ LOCAL_C_INCLUDES += \
$(emulatorOpengl)/host/include/libOpenglRender \ $(emulatorOpengl)/host/include/libOpenglRender \
$(emulatorOpengl)/shared/OpenglCodecCommon \ $(emulatorOpengl)/shared/OpenglCodecCommon \