libGLES_android: fix 64-bit compile errors

Fix size of vertex_t on 64-bit architectures
Fix __get_tls casts, the TLS area is a void**
Cast through uintptr_t to store integers in a pointer
Use %zu to print size_t

Change-Id: I91079ec76025237e6d2081784c5348518b0ce122
This commit is contained in:
Colin Cross 2014-01-24 14:35:39 -08:00
parent b6c2100458
commit 444839b842
3 changed files with 14 additions and 10 deletions

View File

@ -163,9 +163,9 @@ void Tokenizer::dump() const
{
const run_t* ranges = mRanges.array();
const size_t c = mRanges.size();
ALOGD("Tokenizer (%p, size = %u)\n", this, c);
ALOGD("Tokenizer (%p, size = %zu)\n", this, c);
for (size_t i=0 ; i<c ; i++) {
ALOGD("%u: (%u, %u)\n", i, ranges[i].first, ranges[i].length);
ALOGD("%zu: (%u, %u)\n", i, ranges[i].first, ranges[i].length);
}
}

View File

@ -147,7 +147,11 @@ struct vertex_t {
vec4_t color;
vec4_t texture[GGL_TEXTURE_UNIT_COUNT];
#ifdef __LP64__
uint32_t reserved1[2];
#else
uint32_t reserved1[4];
#endif
inline void clear() {
flags = index = locked = mru = 0;
@ -578,10 +582,10 @@ private:
#ifdef HAVE_ANDROID_OS
// We have a dedicated TLS slot in bionic
inline void setGlThreadSpecific(ogles_context_t *value) {
((uint32_t *)__get_tls())[TLS_SLOT_OPENGL] = (uint32_t)value;
__get_tls()[TLS_SLOT_OPENGL] = value;
}
inline ogles_context_t* getGlThreadSpecific() {
return (ogles_context_t *)(((unsigned *)__get_tls())[TLS_SLOT_OPENGL]);
return static_cast<ogles_context_t*>(__get_tls()[TLS_SLOT_OPENGL]);
}
#else
extern pthread_key_t gGLKey;

View File

@ -78,20 +78,20 @@ static T setError(GLint error, T returnValue) {
pthread_key_create(&gEGLErrorKey, NULL);
pthread_mutex_unlock(&gErrorKeyMutex);
}
pthread_setspecific(gEGLErrorKey, (void*)error);
pthread_setspecific(gEGLErrorKey, (void*)(uintptr_t)error);
return returnValue;
}
static GLint getError() {
if (ggl_unlikely(gEGLErrorKey == -1))
return EGL_SUCCESS;
GLint error = (GLint)pthread_getspecific(gEGLErrorKey);
GLint error = (GLint)(uintptr_t)pthread_getspecific(gEGLErrorKey);
if (error == 0) {
// The TLS key has been created by another thread, but the value for
// this thread has not been initialized.
return EGL_SUCCESS;
}
pthread_setspecific(gEGLErrorKey, (void*)EGL_SUCCESS);
pthread_setspecific(gEGLErrorKey, (void*)(uintptr_t)EGL_SUCCESS);
return error;
}
@ -1201,7 +1201,7 @@ static EGLBoolean getConfigAttrib(EGLDisplay dpy, EGLConfig config,
EGLint attribute, EGLint *value)
{
size_t numConfigs = NELEM(gConfigs);
int index = (int)config;
int index = (int)(uintptr_t)config;
if (uint32_t(index) >= numConfigs)
return setError(EGL_BAD_CONFIG, EGL_FALSE);
@ -1448,7 +1448,7 @@ EGLBoolean eglGetConfigs( EGLDisplay dpy,
}
GLint i;
for (i=0 ; i<numConfigs && i<config_size ; i++) {
*configs++ = (EGLConfig)i;
*configs++ = (EGLConfig)(uintptr_t)i;
}
*num_config = i;
return EGL_TRUE;
@ -1519,7 +1519,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
if (configs) {
for (int i=0 ; config_size && i<numConfigs ; i++) {
if (possibleMatch & (1<<i)) {
*configs++ = (EGLConfig)i;
*configs++ = (EGLConfig)(uintptr_t)i;
config_size--;
n++;
}