From: Zebediah Figura zfigura@codeweavers.com
--- dlls/opengl32/unix_wgl.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 6c3379b90a2..b6f7a37ec21 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -43,6 +43,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(opengl);
+static const BOOL is_win64 = (sizeof(void *) > sizeof(int)); + +static BOOL is_wow64(void) +{ + return !!NtCurrentTeb()->WowTebOffset; +} + static pthread_mutex_t wgl_lock = PTHREAD_MUTEX_INITIALIZER;
/* handle management */ @@ -168,7 +175,13 @@ static GLubyte *filter_extensions_list( const char *extensions, const char *disa memcpy( p, extensions, end - extensions ); p[end - extensions] = 0;
- if (!has_extension( disabled, p, strlen( p ) )) + /* We do not support GL_MAP_PERSISTENT_BIT, and hence + * ARB_buffer_storage, on wow64. */ + if (is_win64 && is_wow64() && (!strcmp( p, "ARB_buffer_storage" ) || !strcmp( p, "EXT_buffer_storage" ))) + { + TRACE( "-- %s (disabled due to wow64)\n", p ); + } + else if (!has_extension( disabled, p, strlen( p ) )) { TRACE( "++ %s\n", p ); p += end - extensions; @@ -208,7 +221,14 @@ static GLuint *filter_extensions_index( TEB *teb, const char *disabled ) for (j = 0; j < extensions_count; ++j) { ext = (const char *)funcs->ext.p_glGetStringi( GL_EXTENSIONS, j ); - if (!has_extension( disabled, ext, strlen( ext ) )) + + /* We do not support GL_MAP_PERSISTENT_BIT, and hence + * ARB_buffer_storage, on wow64. */ + if (is_win64 && is_wow64() && (!strcmp( ext, "ARB_buffer_storage" ) || !strcmp( ext, "EXT_buffer_storage" ))) + { + TRACE( "-- %s (disabled due to wow64)\n", ext ); + } + else if (!has_extension( disabled, ext, strlen( ext ) )) { TRACE( "++ %s\n", ext ); }