#include "glapi/glapi.h"
#include "stw_device.h"
#include "stw_icd.h"
+#include "stw_nopfuncs.h"
+
+#include "util/u_debug.h"
struct stw_extension_entry
{
/* WGL_EXT_extensions_string */
STW_EXTENSION_ENTRY( wglGetExtensionsStringEXT ),
- /* WGL_EXT_swap_interval */
+ /* WGL_EXT_swap_control */
STW_EXTENSION_ENTRY( wglGetSwapIntervalEXT ),
STW_EXTENSION_ENTRY( wglSwapIntervalEXT ),
/* WGL_ARB_create_context */
STW_EXTENSION_ENTRY( wglCreateContextAttribsARB ),
+ /* WGL_ARB_render_texture */
+ STW_EXTENSION_ENTRY( wglBindTexImageARB ),
+ STW_EXTENSION_ENTRY( wglReleaseTexImageARB ),
+ STW_EXTENSION_ENTRY( wglSetPbufferAttribARB ),
+
+ /* WGL_ARB_make_current_read */
+ STW_EXTENSION_ENTRY( wglMakeContextCurrentARB ),
+ STW_EXTENSION_ENTRY( wglGetCurrentReadDCARB ),
{ NULL, NULL }
};
LPCSTR lpszProc )
{
const struct stw_extension_entry *entry;
+ PROC p;
if (!stw_dev)
return NULL;
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;
}