diff options
author | Gary King <gking@nvidia.com> | 2010-03-04 17:13:36 -0800 |
---|---|---|
committer | Brint E. Kriebel <github@bekit.net> | 2010-11-14 22:27:14 -0700 |
commit | 4f7c126f4b6a20272d99cedf123a1bccd591e712 (patch) | |
tree | 088ccca818fd87857ed6f7959b0b8ca30d7a5f26 | |
parent | bcee4ac25210c8dea1e94eec9e1b77cefe17b35d (diff) | |
download | frameworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.zip frameworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.tar.gz frameworks_base-4f7c126f4b6a20272d99cedf123a1bccd591e712.tar.bz2 |
[opengl] implement work around for tegra errata 657451
copy the tegra errata work around compile flags from bionic, to
pick up the correct __get_tls implementation
Change-Id: Idf131ad536b3f6bce643a83bb99e007a9b45c3bb
-rw-r--r-- | opengl/libagl/Android.mk | 3 | ||||
-rw-r--r-- | opengl/libs/Android.mk | 18 | ||||
-rw-r--r-- | opengl/libs/GLES2/gl2.cpp | 11 | ||||
-rw-r--r-- | opengl/libs/GLES_CM/gl.cpp | 11 |
4 files changed, 41 insertions, 2 deletions
diff --git a/opengl/libagl/Android.mk b/opengl/libagl/Android.mk index 6cb146c..517b5b8 100644 --- a/opengl/libagl/Android.mk +++ b/opengl/libagl/Android.mk @@ -44,6 +44,9 @@ ifneq ($(TARGET_SIMULATOR),true) ifeq ($(TARGET_ARCH)-$(ARCH_ARM_HAVE_TLS_REGISTER),arm-true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif + ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 + endif LOCAL_C_INCLUDES += bionic/libc/private endif diff --git a/opengl/libs/Android.mk b/opengl/libs/Android.mk index 6b7020f..06aac2d 100644 --- a/opengl/libs/Android.mk +++ b/opengl/libs/Android.mk @@ -26,6 +26,9 @@ else LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif # we need to access the private Bionic header <bionic_tls.h> + ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 + endif LOCAL_C_INCLUDES += bionic/libc/private endif @@ -40,6 +43,9 @@ endif ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif +ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 +endif include $(BUILD_SHARED_LIBRARY) installed_libEGL := $(LOCAL_INSTALLED_MODULE) @@ -83,6 +89,9 @@ else ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif + ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 + endif LOCAL_C_INCLUDES += bionic/libc/private endif @@ -93,6 +102,9 @@ LOCAL_CFLAGS += -fvisibility=hidden ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif +ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 +endif include $(BUILD_SHARED_LIBRARY) @@ -119,6 +131,9 @@ else ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif + ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 + endif LOCAL_C_INCLUDES += bionic/libc/private endif @@ -129,6 +144,9 @@ LOCAL_CFLAGS += -fvisibility=hidden ifeq ($(ARCH_ARM_HAVE_TLS_REGISTER),true) LOCAL_CFLAGS += -DHAVE_ARM_TLS_REGISTER endif +ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true) + LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451 +endif include $(BUILD_SHARED_LIBRARY) diff --git a/opengl/libs/GLES2/gl2.cpp b/opengl/libs/GLES2/gl2.cpp index 924737e..a1667ec 100644 --- a/opengl/libs/GLES2/gl2.cpp +++ b/opengl/libs/GLES2/gl2.cpp @@ -41,9 +41,18 @@ using namespace android; #if USE_FAST_TLS_KEY + #ifdef HAVE_TEGRA_ERRATA_657451 + #define MUNGE_TLS(_tls) \ + "bfi " #_tls ", " #_tls ", #20, #1 \n" \ + "bic " #_tls ", " #_tls ", #1 \n" + #else + #define MUNGE_TLS(_tls) "\n" + #endif + #ifdef HAVE_ARM_TLS_REGISTER #define GET_TLS(reg) \ - "mrc p15, 0, " #reg ", c13, c0, 3 \n" + "mrc p15, 0, " #reg ", c13, c0, 3 \n" \ + MUNGE_TLS(reg) #else #define GET_TLS(reg) \ "mov " #reg ", #0xFFFF0FFF \n" \ diff --git a/opengl/libs/GLES_CM/gl.cpp b/opengl/libs/GLES_CM/gl.cpp index d71ff76..c6f5013 100644 --- a/opengl/libs/GLES_CM/gl.cpp +++ b/opengl/libs/GLES_CM/gl.cpp @@ -97,9 +97,18 @@ GL_API void GL_APIENTRY glWeightPointerOESBounds(GLint size, GLenum type, #if USE_FAST_TLS_KEY && !CHECK_FOR_GL_ERRORS + #ifdef HAVE_TEGRA_ERRATA_657451 + #define MUNGE_TLS(_tls) \ + "bfi " #_tls ", " #_tls ", #20, #1 \n" \ + "bic " #_tls ", " #_tls ", #1 \n" + #else + #define MUNGE_TLS(_tls) "\n" + #endif + #ifdef HAVE_ARM_TLS_REGISTER #define GET_TLS(reg) \ - "mrc p15, 0, " #reg ", c13, c0, 3 \n" + "mrc p15, 0, " #reg ", c13, c0, 3 \n" \ + MUNGE_TLS(reg) #else #define GET_TLS(reg) \ "mov " #reg ", #0xFFFF0FFF \n" \ |