X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fstate_trackers%2Fwgl%2Fstw_getprocaddress.c;h=c8138f61fa4c191f90beb96535520ca5a355ba79;hb=21be5c8edd3ad156f6cbfbceb96e7939716d9f2c;hp=8875dc22f3dc3e6f302225ceeafd5da9a66b5f63;hpb=e128cc205e30540597ecd57849060a6bf4714d9f;p=mesa.git diff --git a/src/gallium/state_trackers/wgl/stw_getprocaddress.c b/src/gallium/state_trackers/wgl/stw_getprocaddress.c index 8875dc22f3d..c8138f61fa4 100644 --- a/src/gallium/state_trackers/wgl/stw_getprocaddress.c +++ b/src/gallium/state_trackers/wgl/stw_getprocaddress.c @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2008 VMware, Inc. * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a @@ -18,7 +18,7 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -33,7 +33,11 @@ #include #include "glapi/glapi.h" -#include "stw_ext_gallium.h" +#include "stw_device.h" +#include "stw_icd.h" +#include "stw_nopfuncs.h" + +#include "util/u_debug.h" struct stw_extension_entry { @@ -48,6 +52,13 @@ static const struct stw_extension_entry stw_extension_entries[] = { /* WGL_ARB_extensions_string */ STW_EXTENSION_ENTRY( wglGetExtensionsStringARB ), + /* WGL_ARB_pbuffer */ + STW_EXTENSION_ENTRY( wglCreatePbufferARB ), + STW_EXTENSION_ENTRY( wglGetPbufferDCARB ), + STW_EXTENSION_ENTRY( wglReleasePbufferDCARB ), + STW_EXTENSION_ENTRY( wglDestroyPbufferARB ), + STW_EXTENSION_ENTRY( wglQueryPbufferARB ), + /* WGL_ARB_pixel_format */ STW_EXTENSION_ENTRY( wglChoosePixelFormatARB ), STW_EXTENSION_ENTRY( wglGetPixelFormatAttribfvARB ), @@ -56,14 +67,21 @@ static const struct stw_extension_entry stw_extension_entries[] = { /* 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_EXT_gallium ? */ - STW_EXTENSION_ENTRY( wglGetGalliumScreenMESA ), - STW_EXTENSION_ENTRY( wglCreateGalliumContextMESA ), + /* 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 } }; @@ -72,14 +90,33 @@ DrvGetProcAddress( LPCSTR lpszProc ) { const struct stw_extension_entry *entry; + PROC p; + + if (!stw_dev) + return NULL; if (lpszProc[0] == 'w' && lpszProc[1] == 'g' && lpszProc[2] == 'l') for (entry = stw_extension_entries; entry->name; entry++) 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; }