summaryrefslogtreecommitdiffstats
path: root/opengl
diff options
context:
space:
mode:
authorGary King <gking@nvidia.com>2010-03-04 17:13:36 -0800
committerBrint E. Kriebel <github@bekit.net>2010-12-21 15:26:54 -0800
commit251e278ddf1470cd148f066ef9cc82f30c10709b (patch)
tree3b8ab125ab967fac5f9afcd063183d110ccfdf24 /opengl
parentec5be46dbb57a96478df2fdefd258a3e9a5438ad (diff)
downloadframeworks_base-251e278ddf1470cd148f066ef9cc82f30c10709b.zip
frameworks_base-251e278ddf1470cd148f066ef9cc82f30c10709b.tar.gz
frameworks_base-251e278ddf1470cd148f066ef9cc82f30c10709b.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: Ifccd4f5f382cc05328222c92da7f621faa1ec507
Diffstat (limited to 'opengl')
-rw-r--r--opengl/libagl/Android.mk3
-rw-r--r--opengl/libs/Android.mk18
-rw-r--r--opengl/libs/GLES2/gl2.cpp11
-rw-r--r--opengl/libs/GLES_CM/gl.cpp11
4 files changed, 41 insertions, 2 deletions
diff --git a/opengl/libagl/Android.mk b/opengl/libagl/Android.mk
index b5c018f..5017478 100644
--- a/opengl/libagl/Android.mk
+++ b/opengl/libagl/Android.mk
@@ -45,6 +45,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 ae924cd..d61edc3 100644
--- a/opengl/libs/Android.mk
+++ b/opengl/libs/Android.mk
@@ -27,6 +27,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
@@ -41,6 +44,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)
@@ -84,6 +90,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
@@ -94,6 +103,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)
@@ -120,6 +132,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
@@ -130,6 +145,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 18dd483..af5734c 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 ee29f12..b62515b 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" \