From: Jacek Caban <jacek@codeweavers.com> --- dlls/opengl32/make_opengl | 20 ++++++++++++-------- dlls/opengl32/unix_private.h | 2 +- dlls/opengl32/unix_thunks.c | 15 ++++++++++++--- dlls/opengl32/unix_wgl.c | 10 ++-------- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index d21c19cfa58..a0f54d66eac 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -1927,14 +1927,7 @@ foreach (sort keys %norm_functions) print OUT "};\n"; # Then the table giving the string <-> function correspondence */ -my $count = 0; -foreach (keys %ext_functions) -{ - next unless is_exposed_function( $ext_functions{$_} ); - $count += 1; -} -print OUT "\nconst int extension_registry_size = $count;\n"; -print OUT "const struct registry_entry extension_registry[$count] =\n"; +print OUT "const struct registry_entry extension_registry[] =\n"; print OUT "{\n"; foreach (sort keys %ext_functions) { @@ -1965,5 +1958,16 @@ foreach (sort keys %ext_functions) printf OUT " { \"%s\", offsetof(struct opengl_funcs, p_$_), $major, $minor, { %s }},\n", $_, join(", ", @exts); } print OUT "};\n"; +print OUT "\n"; +print OUT "static int registry_entry_cmp( const void *a, const void *b )\n"; +print OUT "{\n"; +print OUT " const struct registry_entry *entry = b;\n"; +print OUT " return strcmp( a, entry->name );\n"; +print OUT "}\n"; +print OUT "\n"; +print OUT "struct registry_entry *get_function_entry( const char *name )\n"; +print OUT "{\n"; +print OUT " return bsearch( name, extension_registry, ARRAYSIZE(extension_registry), sizeof(extension_registry[0]), registry_entry_cmp );\n"; +print OUT "}\n"; close OUT; diff --git a/dlls/opengl32/unix_private.h b/dlls/opengl32/unix_private.h index 48cd1a0d963..36018c3a94f 100644 --- a/dlls/opengl32/unix_private.h +++ b/dlls/opengl32/unix_private.h @@ -43,7 +43,6 @@ struct registry_entry }; extern const struct registry_entry extension_registry[]; -extern const int extension_registry_size; extern struct opengl_funcs null_opengl_funcs; @@ -112,5 +111,6 @@ extern GLuint get_default_fbo( TEB *teb, GLenum target ); extern void push_default_fbo( TEB *teb ); extern void pop_default_fbo( TEB *teb ); extern void resolve_default_fbo( TEB *teb, BOOL read ); +extern struct registry_entry *get_function_entry( const char *name ); #endif /* __WINE_OPENGL32_UNIX_PRIVATE_H */ diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 64c238afce6..7f73cbb442d 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -91947,9 +91947,7 @@ struct opengl_funcs null_opengl_funcs = .p_glVertexPointer = null_glVertexPointer, .p_glViewport = null_glViewport, }; - -const int extension_registry_size = 2763; -const struct registry_entry extension_registry[2763] = +const struct registry_entry extension_registry[] = { { "glAccumxOES", offsetof(struct opengl_funcs, p_glAccumxOES), 0, 0, { GL_OES_fixed_point, GL_EXTENSION_COUNT }}, { "glAcquireKeyedMutexWin32EXT", offsetof(struct opengl_funcs, p_glAcquireKeyedMutexWin32EXT), 0, 0, { GL_EXT_win32_keyed_mutex, GL_EXTENSION_COUNT }}, @@ -94715,3 +94713,14 @@ const struct registry_entry extension_registry[2763] = { "wglSetPixelFormatWINE", offsetof(struct opengl_funcs, p_wglSetPixelFormatWINE), 0, 0, { WGL_WINE_pixel_format_passthrough, GL_EXTENSION_COUNT }}, { "wglSwapIntervalEXT", offsetof(struct opengl_funcs, p_wglSwapIntervalEXT), 0, 0, { WGL_EXT_swap_control, GL_EXTENSION_COUNT }}, }; + +static int registry_entry_cmp( const void *a, const void *b ) +{ + const struct registry_entry *entry = b; + return strcmp( a, entry->name ); +} + +struct registry_entry *get_function_entry( const char *name ) +{ + return bsearch( name, extension_registry, ARRAYSIZE(extension_registry), sizeof(extension_registry[0]), registry_entry_cmp ); +} diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index b5862d61c00..54a8d82cfca 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -876,15 +876,9 @@ const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) return ret; } -static int registry_entry_cmp( const void *a, const void *b ) -{ - const struct registry_entry *entry_a = a, *entry_b = b; - return strcmp( entry_a->name, entry_b->name ); -} - PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR name ) { - const struct registry_entry entry = {.name = name}, *found; + const struct registry_entry *found; struct opengl_funcs *funcs = teb->glTable; const void **func_ptr; struct context *ctx; @@ -898,7 +892,7 @@ PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR name ) return (void *)-1; } - if (!(found = bsearch( &entry, extension_registry, extension_registry_size, sizeof(entry), registry_entry_cmp ))) + if (!(found = get_function_entry( name ))) { WARN( "Function %s unknown\n", name ); return (void *)-1; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10349