Merge "opengles emulator: use bionic tls slot"
This commit is contained in:
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
Reference in New Issue
Block a user