From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 79 +++++++++++++++++++++++++++++++------ dlls/opengl32/thunks.c | 18 --------- dlls/opengl32/unix_thunks.c | 65 +----------------------------- dlls/opengl32/unixlib.h | 19 --------- 4 files changed, 68 insertions(+), 113 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index dbf0ddc2d3a..61771b0b4fb 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -881,9 +881,12 @@ chdir(dirname($0)); # - reference to an array of XML nodes giving the list of arguments (an empty array # for a 'void' function). # +my %gl_extensions; my %norm_functions; my %ext_functions; +my %wgl_extensions; my %wgl_functions; +my %egl_extensions; my %egl_functions; my %all_enums; @@ -953,6 +956,15 @@ my %unsupported_extensions = "WGL_NV_video_capture" => 1, "WGL_NV_video_output" => 1, ); +my %unexposed_extgroups = + ( + "EGL_" => 1, + ); +my %unexposed_extensions = + ( + "GL_EXT_memory_object_fd" => 1, + "GL_EXT_semaphore_fd" => 1, + ); my %extension_aliases = ( "GL_EXT_blend_equation_separate" => "GL_ATI_blend_equation_separate", @@ -984,6 +996,26 @@ sub is_supported_extension($) return not defined $unsupported_extensions{$ext}; } +sub is_exposed_extension($) +{ + my $ext = shift; + foreach my $group (keys %unexposed_extgroups) + { + return 0 if rindex($ext, $group, 0) == 0; + } + return not defined $unexposed_extensions{$ext}; +} + +sub is_exposed_function($) +{ + my $func = shift; + foreach my $ext (@{$func->[2]}) + { + return 1 if is_exposed_extension($ext); + } + return 0; +} + # some functions need a hand-written wrapper sub needs_wrapper($$) { @@ -993,6 +1025,22 @@ sub needs_wrapper($$) return 0; } +sub add_extension($) +{ + my $name = shift; + + $gl_extensions{$name} = 1 if $name =~ /^GL/; + $wgl_extensions{$name} = 1 if $name =~ /^WGL/; + $egl_extensions{$name} = 1 if $name =~ /^EGL/; + + if (my $alias = $extension_aliases{$name}) + { + $gl_extensions{$alias} = 1 if $alias =~ /^GL/; + $wgl_extensions{$alias} = 1 if $alias =~ /^WGL/; + $egl_extensions{$alias} = 1 if $alias =~ /^EGL/; + } +} + sub parse_file($) { my $file = shift; @@ -1077,6 +1125,7 @@ sub parse_file($) if ($feature_name =~ /GL_VERSION_ES_.*_1_/) { $feature_name = "GL_NV_ES1_1_compatibility"; + add_extension( $feature_name ); } else { @@ -1110,6 +1159,7 @@ sub parse_file($) { $all_enums{$enum->{name}} = $enums{$enum->{name}}; } + add_extension( $ext->{name} ); next; } if ($ext->{supported} eq "egl") @@ -1123,6 +1173,7 @@ sub parse_file($) { $all_enums{$enum->{name}} = $enums{$enum->{name}}; } + add_extension( $ext->{name} ); next; } next unless is_supported_api( $ext->{supported} ); @@ -1147,6 +1198,7 @@ sub parse_file($) { $all_enums{$enum->{name}} = $enums{$enum->{name}}; } + add_extension( $ext->{name} ); } } @@ -1339,7 +1391,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; print OUT generate_func_params($_, $ext_functions{$_}); } @@ -1372,7 +1424,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; printf OUT " unix_%s,\n", $_; } @@ -1431,7 +1483,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; next if defined $manual_win_thunks{$_}; print OUT "\nstatic " . generate_win_thunk($_, $ext_functions{$_}); @@ -1440,7 +1492,7 @@ print OUT "\n"; foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next unless defined $manual_win_functions{$_} || $manual_win_thunks{$_}; my $decl_args = get_func_args( $ext_functions{$_}, 0 ); my $func_ret = get_func_ret( $ext_functions{$_}, 0 ); @@ -1451,7 +1503,7 @@ print OUT "const void *extension_procs[] =\n"; print OUT "{\n"; foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); printf OUT " %s,\n", $_; } print OUT "};\n"; @@ -1478,7 +1530,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if !needs_wrapper( $_, $ext_functions{$_} ); print OUT generate_wrapper_declaration($_, $ext_functions{$_}, 0); } @@ -1497,7 +1549,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next unless defined $manual_wow64_wrappers{$_}; print OUT generate_wrapper_declaration($_, $ext_functions{$_}, 1); } @@ -1545,7 +1597,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; print OUT generate_unix_thunk($_, $ext_functions{$_}, 0, "ext"); } @@ -1568,7 +1620,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; printf OUT " ext_%s,\n", $_; } @@ -1592,7 +1644,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; print OUT generate_unix_thunk($_, $ext_functions{$_}, 1, "ext"); } @@ -1615,7 +1667,7 @@ foreach (sort keys %norm_functions) } foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); next if defined $manual_win_functions{$_}; printf OUT " wow64_ext_%s,\n", $_; } @@ -1674,14 +1726,15 @@ print OUT "};\n"; my $count = 0; foreach (keys %ext_functions) { - $count += 1 unless $_ =~ /^egl/; # unix-side only API + 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 "{\n"; foreach (sort keys %ext_functions) { - next if $_ =~ /^egl/; # unix-side only API + next unless is_exposed_function( $ext_functions{$_} ); my $func = $ext_functions{$_}; my @exts; foreach my $ext (@{$func->[2]}) diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index 6eb2a2745db..0fc0f37019a 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -11366,14 +11366,6 @@ static void WINAPI glImageTransformParameterivHP( GLenum target, GLenum pname, c if ((status = UNIX_CALL( glImageTransformParameterivHP, &args ))) WARN( "glImageTransformParameterivHP returned %#lx\n", status ); } -static void WINAPI glImportMemoryFdEXT( GLuint memory, GLuint64 size, GLenum handleType, GLint fd ) -{ - struct glImportMemoryFdEXT_params args = { .teb = NtCurrentTeb(), .memory = memory, .size = size, .handleType = handleType, .fd = fd }; - NTSTATUS status; - TRACE( "memory %d, size %s, handleType %d, fd %d\n", memory, wine_dbgstr_longlong(size), handleType, fd ); - if ((status = UNIX_CALL( glImportMemoryFdEXT, &args ))) WARN( "glImportMemoryFdEXT returned %#lx\n", status ); -} - static void WINAPI glImportMemoryWin32HandleEXT( GLuint memory, GLuint64 size, GLenum handleType, void *handle ) { struct glImportMemoryWin32HandleEXT_params args = { .teb = NtCurrentTeb(), .memory = memory, .size = size, .handleType = handleType, .handle = handle }; @@ -11390,14 +11382,6 @@ static void WINAPI glImportMemoryWin32NameEXT( GLuint memory, GLuint64 size, GLe if ((status = UNIX_CALL( glImportMemoryWin32NameEXT, &args ))) WARN( "glImportMemoryWin32NameEXT returned %#lx\n", status ); } -static void WINAPI glImportSemaphoreFdEXT( GLuint semaphore, GLenum handleType, GLint fd ) -{ - struct glImportSemaphoreFdEXT_params args = { .teb = NtCurrentTeb(), .semaphore = semaphore, .handleType = handleType, .fd = fd }; - NTSTATUS status; - TRACE( "semaphore %d, handleType %d, fd %d\n", semaphore, handleType, fd ); - if ((status = UNIX_CALL( glImportSemaphoreFdEXT, &args ))) WARN( "glImportSemaphoreFdEXT returned %#lx\n", status ); -} - static void WINAPI glImportSemaphoreWin32HandleEXT( GLuint semaphore, GLenum handleType, void *handle ) { struct glImportSemaphoreWin32HandleEXT_params args = { .teb = NtCurrentTeb(), .semaphore = semaphore, .handleType = handleType, .handle = handle }; @@ -25918,10 +25902,8 @@ const void *extension_procs[] = glImageTransformParameterfvHP, glImageTransformParameteriHP, glImageTransformParameterivHP, - glImportMemoryFdEXT, glImportMemoryWin32HandleEXT, glImportMemoryWin32NameEXT, - glImportSemaphoreFdEXT, glImportSemaphoreWin32HandleEXT, glImportSemaphoreWin32NameEXT, glImportSyncEXT, diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 18e6b1b3024..6f199d5a0fb 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -13778,16 +13778,6 @@ static NTSTATUS ext_glImageTransformParameterivHP( void *args ) return STATUS_SUCCESS; } -static NTSTATUS ext_glImportMemoryFdEXT( void *args ) -{ - struct glImportMemoryFdEXT_params *params = args; - const struct opengl_funcs *funcs = params->teb->glTable; - if (!funcs->p_glImportMemoryFdEXT) return STATUS_NOT_IMPLEMENTED; - funcs->p_glImportMemoryFdEXT( params->memory, params->size, params->handleType, params->fd ); - set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); - return STATUS_SUCCESS; -} - static NTSTATUS ext_glImportMemoryWin32HandleEXT( void *args ) { struct glImportMemoryWin32HandleEXT_params *params = args; @@ -13808,16 +13798,6 @@ static NTSTATUS ext_glImportMemoryWin32NameEXT( void *args ) return STATUS_SUCCESS; } -static NTSTATUS ext_glImportSemaphoreFdEXT( void *args ) -{ - struct glImportSemaphoreFdEXT_params *params = args; - const struct opengl_funcs *funcs = params->teb->glTable; - if (!funcs->p_glImportSemaphoreFdEXT) return STATUS_NOT_IMPLEMENTED; - funcs->p_glImportSemaphoreFdEXT( params->semaphore, params->handleType, params->fd ); - set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); - return STATUS_SUCCESS; -} - static NTSTATUS ext_glImportSemaphoreWin32HandleEXT( void *args ) { struct glImportSemaphoreWin32HandleEXT_params *params = args; @@ -31962,10 +31942,8 @@ const unixlib_entry_t __wine_unix_call_funcs[] = ext_glImageTransformParameterfvHP, ext_glImageTransformParameteriHP, ext_glImageTransformParameterivHP, - ext_glImportMemoryFdEXT, ext_glImportMemoryWin32HandleEXT, ext_glImportMemoryWin32NameEXT, - ext_glImportSemaphoreFdEXT, ext_glImportSemaphoreWin32HandleEXT, ext_glImportSemaphoreWin32NameEXT, ext_glImportSyncEXT, @@ -57738,24 +57716,6 @@ static NTSTATUS wow64_ext_glImageTransformParameterivHP( void *args ) return STATUS_SUCCESS; } -static NTSTATUS wow64_ext_glImportMemoryFdEXT( void *args ) -{ - struct - { - PTR32 teb; - GLuint memory; - GLuint64 size; - GLenum handleType; - GLint fd; - } *params = args; - TEB *teb = get_teb64( params->teb ); - const struct opengl_funcs *funcs = teb->glTable; - if (!funcs->p_glImportMemoryFdEXT) return STATUS_NOT_IMPLEMENTED; - funcs->p_glImportMemoryFdEXT( params->memory, params->size, params->handleType, params->fd ); - set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); - return STATUS_SUCCESS; -} - static NTSTATUS wow64_ext_glImportMemoryWin32HandleEXT( void *args ) { struct @@ -57792,23 +57752,6 @@ static NTSTATUS wow64_ext_glImportMemoryWin32NameEXT( void *args ) return STATUS_SUCCESS; } -static NTSTATUS wow64_ext_glImportSemaphoreFdEXT( void *args ) -{ - struct - { - PTR32 teb; - GLuint semaphore; - GLenum handleType; - GLint fd; - } *params = args; - TEB *teb = get_teb64( params->teb ); - const struct opengl_funcs *funcs = teb->glTable; - if (!funcs->p_glImportSemaphoreFdEXT) return STATUS_NOT_IMPLEMENTED; - funcs->p_glImportSemaphoreFdEXT( params->semaphore, params->handleType, params->fd ); - set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); - return STATUS_SUCCESS; -} - static NTSTATUS wow64_ext_glImportSemaphoreWin32HandleEXT( void *args ) { struct @@ -88370,10 +88313,8 @@ const unixlib_entry_t __wine_unix_call_wow64_funcs[] = wow64_ext_glImageTransformParameterfvHP, wow64_ext_glImageTransformParameteriHP, wow64_ext_glImageTransformParameterivHP, - wow64_ext_glImportMemoryFdEXT, wow64_ext_glImportMemoryWin32HandleEXT, wow64_ext_glImportMemoryWin32NameEXT, - wow64_ext_glImportSemaphoreFdEXT, wow64_ext_glImportSemaphoreWin32HandleEXT, wow64_ext_glImportSemaphoreWin32NameEXT, wow64_ext_glImportSyncEXT, @@ -91825,8 +91766,8 @@ struct opengl_funcs null_opengl_funcs = .p_glViewport = null_glViewport, }; -const int extension_registry_size = 2758; -const struct registry_entry extension_registry[2758] = +const int extension_registry_size = 2756; +const struct registry_entry extension_registry[2756] = { { "glAccumxOES", "GL_OES_fixed_point\0", offsetof(struct opengl_funcs, p_glAccumxOES) }, { "glAcquireKeyedMutexWin32EXT", "GL_EXT_win32_keyed_mutex\0", offsetof(struct opengl_funcs, p_glAcquireKeyedMutexWin32EXT) }, @@ -92903,10 +92844,8 @@ const struct registry_entry extension_registry[2758] = { "glImageTransformParameterfvHP", "GL_HP_image_transform\0", offsetof(struct opengl_funcs, p_glImageTransformParameterfvHP) }, { "glImageTransformParameteriHP", "GL_HP_image_transform\0", offsetof(struct opengl_funcs, p_glImageTransformParameteriHP) }, { "glImageTransformParameterivHP", "GL_HP_image_transform\0", offsetof(struct opengl_funcs, p_glImageTransformParameterivHP) }, - { "glImportMemoryFdEXT", "GL_EXT_memory_object_fd\0", offsetof(struct opengl_funcs, p_glImportMemoryFdEXT) }, { "glImportMemoryWin32HandleEXT", "GL_EXT_memory_object_win32\0", offsetof(struct opengl_funcs, p_glImportMemoryWin32HandleEXT) }, { "glImportMemoryWin32NameEXT", "GL_EXT_memory_object_win32\0", offsetof(struct opengl_funcs, p_glImportMemoryWin32NameEXT) }, - { "glImportSemaphoreFdEXT", "GL_EXT_semaphore_fd\0", offsetof(struct opengl_funcs, p_glImportSemaphoreFdEXT) }, { "glImportSemaphoreWin32HandleEXT", "GL_EXT_semaphore_win32\0", offsetof(struct opengl_funcs, p_glImportSemaphoreWin32HandleEXT) }, { "glImportSemaphoreWin32NameEXT", "GL_EXT_semaphore_win32\0", offsetof(struct opengl_funcs, p_glImportSemaphoreWin32NameEXT) }, { "glImportSyncEXT", "GL_EXT_x11_sync_object\0", offsetof(struct opengl_funcs, p_glImportSyncEXT) }, diff --git a/dlls/opengl32/unixlib.h b/dlls/opengl32/unixlib.h index 999a191e772..8159b1f8c24 100644 --- a/dlls/opengl32/unixlib.h +++ b/dlls/opengl32/unixlib.h @@ -11752,15 +11752,6 @@ struct glImageTransformParameterivHP_params const GLint *params; }; -struct glImportMemoryFdEXT_params -{ - TEB *teb; - GLuint memory; - GLuint64 size; - GLenum handleType; - GLint fd; -}; - struct glImportMemoryWin32HandleEXT_params { TEB *teb; @@ -11779,14 +11770,6 @@ struct glImportMemoryWin32NameEXT_params const void *name; }; -struct glImportSemaphoreFdEXT_params -{ - TEB *teb; - GLuint semaphore; - GLenum handleType; - GLint fd; -}; - struct glImportSemaphoreWin32HandleEXT_params { TEB *teb; @@ -27310,10 +27293,8 @@ enum unix_funcs unix_glImageTransformParameterfvHP, unix_glImageTransformParameteriHP, unix_glImageTransformParameterivHP, - unix_glImportMemoryFdEXT, unix_glImportMemoryWin32HandleEXT, unix_glImportMemoryWin32NameEXT, - unix_glImportSemaphoreFdEXT, unix_glImportSemaphoreWin32HandleEXT, unix_glImportSemaphoreWin32NameEXT, unix_glImportSyncEXT, -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9987