Module: wine Branch: master Commit: 35f64cd7c8b75934fd9300508c4c084b58c40500 URL: https://gitlab.winehq.org/wine/wine/-/commit/35f64cd7c8b75934fd9300508c4c084...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Nov 7 15:16:48 2022 +0100
opengl32: Move glGetString extension filtering to unix_wgl.c.
---
dlls/opengl32/make_opengl | 10 ++++++++-- dlls/opengl32/opengl_ext.h | 1 - dlls/opengl32/thunks.c | 9 +++++++++ dlls/opengl32/unix_thunks.c | 9 +-------- dlls/opengl32/unix_wgl.c | 25 ++++++++++++++++++++++++- dlls/opengl32/wgl.c | 23 ----------------------- 6 files changed, 42 insertions(+), 35 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 733b5795306..5e269d89109 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -162,7 +162,6 @@ my %manual_win_functions = my %manual_win_thunks = ( "glGetIntegerv" => 1, - "glGetString" => 1, "wglGetCurrentReadDCARB" => 1, "wglGetPixelFormat" => 1, "wglGetProcAddress" => 1, @@ -510,7 +509,7 @@ sub needs_wrapper($$) { my ($name, $func) = @_;
- return 1 if $name =~ /^glDebugMessageCallback|^glGetStringi/; + return 1 if $name =~ /^glDebugMessageCallback|^glGetString/;
# check if return value needs special handling (my $type = $func->[0]->textContent()) =~ s/ $//; @@ -941,6 +940,12 @@ foreach (sort keys %wgl_functions) next unless needs_wrapper( $_, $wgl_functions{$_} ); print OUT "extern NTSTATUS wgl_$_( void *args ) DECLSPEC_HIDDEN;\n"; } +foreach (sort keys %norm_functions) +{ + next if defined $manual_win_functions{$_}; + next unless needs_wrapper( $_, $norm_functions{$_} ); + print OUT "extern NTSTATUS gl_$_( void *args ) DECLSPEC_HIDDEN;\n"; +} foreach (sort keys %ext_functions) { next if defined $manual_win_functions{$_}; @@ -958,6 +963,7 @@ foreach (sort keys %wgl_functions) foreach (sort keys %norm_functions) { next if defined $manual_win_functions{$_}; + next if needs_wrapper( $_, $norm_functions{$_} ); print OUT generate_unix_thunk($_, $norm_functions{$_}, "gl"); } foreach (sort keys %ext_functions) diff --git a/dlls/opengl32/opengl_ext.h b/dlls/opengl32/opengl_ext.h index 132a414399d..6e069cf5bd5 100644 --- a/dlls/opengl32/opengl_ext.h +++ b/dlls/opengl32/opengl_ext.h @@ -101,7 +101,6 @@ static inline enum wgl_handle_type get_current_context_type(void)
extern int WINAPI wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFORMATDESCRIPTOR *ppfd );
-extern BOOL filter_extensions( const char *extensions, GLubyte **exts_list, GLuint **disabled_exts ) DECLSPEC_HIDDEN; extern const GLuint *disabled_extensions_index(void) DECLSPEC_HIDDEN; extern BOOL check_extension_support( const char *extension, const char *available_extensions ) DECLSPEC_HIDDEN; extern char *build_extension_list(void) DECLSPEC_HIDDEN; diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index ca133a25830..0a9fb8bb677 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -1011,6 +1011,15 @@ void WINAPI glGetPolygonStipple( GLubyte *mask ) if ((status = UNIX_CALL( glGetPolygonStipple, &args ))) WARN( "glGetPolygonStipple returned %#x\n", status ); }
+const GLubyte * WINAPI glGetString( GLenum name ) +{ + struct glGetString_params args = { .name = name, }; + NTSTATUS status; + TRACE( "name %d\n", name ); + if ((status = UNIX_CALL( glGetString, &args ))) WARN( "glGetString returned %#x\n", status ); + return args.ret; +} + void WINAPI glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ) { struct glGetTexEnvfv_params args = { .target = target, .pname = pname, .params = params, }; diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 3f00f6ce394..375d1630cf9 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -18,6 +18,7 @@ extern NTSTATUS wgl_wglCreateContext( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS wgl_wglDeleteContext( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS wgl_wglMakeCurrent( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS wgl_wglShareLists( void *args ) DECLSPEC_HIDDEN; +extern NTSTATUS gl_glGetString( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallback( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallbackARB( void *args ) DECLSPEC_HIDDEN; @@ -1009,14 +1010,6 @@ static NTSTATUS gl_glGetPolygonStipple( void *args ) return STATUS_SUCCESS; }
-static NTSTATUS gl_glGetString( void *args ) -{ - struct glGetString_params *params = args; - const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; - params->ret = funcs->gl.p_glGetString( params->name ); - return STATUS_SUCCESS; -} - static NTSTATUS gl_glGetTexEnvfv( void *args ) { struct glGetTexEnvfv_params *params = args; diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 4fe594d42f9..a0207ad533a 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -195,7 +195,7 @@ static GLuint *filter_extensions_index( const char *disabled ) }
/* build the extension string by filtering out the disabled extensions */ -BOOL filter_extensions( const char *extensions, GLubyte **exts_list, GLuint **disabled_exts ) +static BOOL filter_extensions( const char *extensions, GLubyte **exts_list, GLuint **disabled_exts ) { static const char *disabled;
@@ -286,6 +286,22 @@ BOOL check_extension_support( const char *extension, const char *available_exten return FALSE; }
+static const GLubyte * WINAPI wrap_glGetString( GLenum name ) +{ + const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; + const GLubyte *ret; + + if ((ret = funcs->gl.p_glGetString( name )) && name == GL_EXTENSIONS) + { + struct wgl_handle *ptr = get_current_context_ptr(); + GLubyte **extensions = &ptr->u.context->extensions; + GLuint **disabled = &ptr->u.context->disabled_exts; + if (*extensions || filter_extensions( (const char *)ret, extensions, disabled )) return *extensions; + } + + return ret; +} + static const GLubyte * WINAPI wrap_glGetStringi( GLenum name, GLuint index ) { const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; @@ -711,6 +727,13 @@ NTSTATUS wgl_wglShareLists( void *args ) return STATUS_SUCCESS; }
+NTSTATUS gl_glGetString( void *args ) +{ + struct glGetString_params *params = args; + params->ret = wrap_glGetString( params->name ); + return STATUS_SUCCESS; +} + NTSTATUS ext_glDebugMessageCallback( void *args ) { struct glDebugMessageCallback_params *params = args; diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index ec1e875c56c..3aa37bd5cb4 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -955,29 +955,6 @@ GLint WINAPI glDebugEntry( GLint unknown1, GLint unknown2 ) return 0; }
-/*********************************************************************** - * glGetString (OPENGL32.@) - */ -const GLubyte * WINAPI glGetString( GLenum name ) -{ - struct glGetString_params args = { .name = name, }; - NTSTATUS status; - - TRACE( "name %d\n", name ); - - if ((status = UNIX_CALL( glGetString, &args ))) WARN( "glGetString returned %#x\n", status ); - - if (name == GL_EXTENSIONS && args.ret) - { - struct wgl_handle *ptr = get_current_context_ptr(); - GLubyte **extensions = &ptr->u.context->extensions; - GLuint **disabled = &ptr->u.context->disabled_exts; - if (*extensions || filter_extensions( (const char *)args.ret, extensions, disabled )) return *extensions; - } - - return args.ret; -} - static BOOL WINAPI call_opengl_debug_message_callback( struct wine_gl_debug_message_params *params, ULONG size ) { params->user_callback( params->source, params->type, params->id, params->severity,