diff --git a/tools/emulator/opengl/system/GLESv1/gl.cpp b/tools/emulator/opengl/system/GLESv1/gl.cpp index 2ab6986ae..142c21823 100644 --- a/tools/emulator/opengl/system/GLESv1/gl.cpp +++ b/tools/emulator/opengl/system/GLESv1/gl.cpp @@ -6,10 +6,11 @@ #include "ErrorLog.h" #include #include "gralloc_cb.h" +#include "ThreadInfo.h" //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" diff --git a/tools/emulator/opengl/system/GLESv2/gl2.cpp b/tools/emulator/opengl/system/GLESv2/gl2.cpp index f4157d762..06db29668 100644 --- a/tools/emulator/opengl/system/GLESv2/gl2.cpp +++ b/tools/emulator/opengl/system/GLESv2/gl2.cpp @@ -6,10 +6,10 @@ #include "ErrorLog.h" #include #include "gralloc_cb.h" - +#include "ThreadInfo.h" //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" diff --git a/tools/emulator/opengl/system/OpenglSystemCommon/Android.mk b/tools/emulator/opengl/system/OpenglSystemCommon/Android.mk index a04d19cd2..61987489c 100644 --- a/tools/emulator/opengl/system/OpenglSystemCommon/Android.mk +++ b/tools/emulator/opengl/system/OpenglSystemCommon/Android.mk @@ -8,6 +8,6 @@ LOCAL_SRC_FILES := \ QemuPipeStream.cpp \ ThreadInfo.cpp -$(call emugl-export,C_INCLUDES,$(LOCAL_PATH)) +$(call emugl-export,C_INCLUDES,$(LOCAL_PATH) bionic/libc/private) $(call emugl-end-module) diff --git a/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.cpp b/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.cpp index 3ab42a37c..75da8f29f 100644 --- a/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.cpp +++ b/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.cpp @@ -27,7 +27,7 @@ static void tlsDestruct(void *ptr) } } -EGLThreadInfo *getEGLThreadInfo() +EGLThreadInfo *slow_getEGLThreadInfo() { EGLThreadInfo *ti = (EGLThreadInfo *)thread_store_get(&s_tls); if (ti) return ti; diff --git a/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.h b/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.h index 98101f0e9..032873340 100644 --- a/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.h +++ b/tools/emulator/opengl/system/OpenglSystemCommon/ThreadInfo.h @@ -17,6 +17,10 @@ #define _THREAD_INFO_H #include "HostConnection.h" +#include +#ifdef HAVE_ANDROID_OS +#include +#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 diff --git a/tools/emulator/opengl/system/egl/Android.mk b/tools/emulator/opengl/system/egl/Android.mk index a84c9bc6a..49b967ae3 100644 --- a/tools/emulator/opengl/system/egl/Android.mk +++ b/tools/emulator/opengl/system/egl/Android.mk @@ -17,6 +17,7 @@ LOCAL_SRC_FILES := \ egl.cpp \ ClientAPIExts.cpp +LOCAL_C_INCLUDES += bionic/libc/private LOCAL_PRELINK_MODULE := false LOCAL_CFLAGS += -DLOG_TAG=\"EGL_emulation\" -DEGL_EGLEXT_PROTOTYPES -DWITH_GLES2 diff --git a/tools/emulator/opengl/system/gralloc/Android.mk b/tools/emulator/opengl/system/gralloc/Android.mk index 52ee26c17..6e6453729 100644 --- a/tools/emulator/opengl/system/gralloc/Android.mk +++ b/tools/emulator/opengl/system/gralloc/Android.mk @@ -15,6 +15,8 @@ LOCAL_ADDITIONAL_DEPENDENCIES := \ LOCAL_SRC_FILES := \ gralloc.cpp +LOCAL_C_INCLUDES += bionic/libc/private + LOCAL_C_INCLUDES += \ $(emulatorOpengl)/host/include/libOpenglRender \ $(emulatorOpengl)/shared/OpenglCodecCommon \