Merge change 534 into donut

* changes:
  Make sure to map undefined OES functions to their non-OES counterpart if it exists.
This commit is contained in:
Android (Google) Code Review
2009-04-24 13:09:06 -07:00

View File

@@ -273,6 +273,8 @@ int gpu_release(void*, request_gpu_t* gpu);
static __attribute__((noinline))
void *load_driver(const char* driver, gl_hooks_t* hooks)
{
//LOGD("%s", driver);
char scrap[256];
void* dso = dlopen(driver, RTLD_NOW | RTLD_LOCAL);
LOGE_IF(!dso,
"couldn't load <%s> library (%s)",
@@ -310,7 +312,7 @@ void *load_driver(const char* driver, gl_hooks_t* hooks)
*curr++ = f;
api++;
}
gl_hooks_t::gl_t* gl = &hooks->gl;
curr = (__eglMustCastToProperFunctionPointerType*)gl;
api = gl_names;
@@ -321,10 +323,32 @@ void *load_driver(const char* driver, gl_hooks_t* hooks)
if (f == NULL) {
// couldn't find the entry-point, use eglGetProcAddress()
f = getProcAddress(name);
if (f == NULL) {
f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented;
}
if (f == NULL) {
// Try without the OES postfix
ssize_t index = ssize_t(strlen(name)) - 3;
if ((index>0 && (index<255)) && (!strcmp(name+index, "OES"))) {
strncpy(scrap, name, index);
scrap[index] = 0;
f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap);
//LOGD_IF(f, "found <%s> instead", scrap);
}
}
if (f == NULL) {
// Try with the OES postfix
ssize_t index = ssize_t(strlen(name)) - 3;
if ((index>0 && (index<252)) && (strcmp(name+index, "OES"))) {
strncpy(scrap, name, index);
scrap[index] = 0;
strcat(scrap, "OES");
f = (__eglMustCastToProperFunctionPointerType)dlsym(dso, scrap);
//LOGD_IF(f, "found <%s> instead", scrap);
}
}
if (f == NULL) {
LOGD("%s", name);
f = (__eglMustCastToProperFunctionPointerType)gl_unimplemented;
}
*curr++ = f;
api++;
}