diff options
author | Brian Paul <[email protected]> | 2015-06-16 15:32:46 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2015-06-19 08:45:00 -0600 |
commit | 73bdf4ba86751983dff011ac488ac60321d70a7f (patch) | |
tree | 20272b2075f96a356640e70a452519815db84bc5 /src/gallium | |
parent | 8d005a643ed94c1871ec854bc069366cdda6581f (diff) |
stw: use new stw_get_nop_function() function to avoid Viewperf 12 crashes
Also, print a warning if we do return NULL from wglGetProcAddress() to
help spot this sort of problem in the future.
Reviewed-by: José Fonseca <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/state_trackers/wgl/stw_getprocaddress.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/gallium/state_trackers/wgl/stw_getprocaddress.c b/src/gallium/state_trackers/wgl/stw_getprocaddress.c index 2ffeec1a2fb..33949b6606f 100644 --- a/src/gallium/state_trackers/wgl/stw_getprocaddress.c +++ b/src/gallium/state_trackers/wgl/stw_getprocaddress.c @@ -35,6 +35,7 @@ #include "glapi/glapi.h" #include "stw_device.h" #include "stw_icd.h" +#include "stw_nopfuncs.h" struct stw_extension_entry { @@ -79,6 +80,7 @@ DrvGetProcAddress( LPCSTR lpszProc ) { const struct stw_extension_entry *entry; + PROC p; if (!stw_dev) return NULL; @@ -88,8 +90,23 @@ DrvGetProcAddress( if (strcmp( lpszProc, entry->name ) == 0) return entry->proc; - if (lpszProc[0] == 'g' && lpszProc[1] == 'l') - return (PROC) _glapi_get_proc_address( lpszProc ); - + if (lpszProc[0] == 'g' && lpszProc[1] == 'l') { + p = (PROC) _glapi_get_proc_address(lpszProc); + if (p) + return p; + } + + /* If we get here, we'd normally just return NULL, but since some apps + * (like Viewperf12) crash when they try to use the null pointer, try + * returning a pointer to a no-op function instead. + */ + p = stw_get_nop_function(lpszProc); + if (p) { + debug_printf("wglGetProcAddress(\"%s\") returning no-op function\n", + lpszProc); + return p; + } + + debug_printf("wglGetProcAddress(\"%s\") returning NULL\n", lpszProc); return NULL; } |