From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 102 ++++++++++++++++++++++++++++++++---- dlls/opengl32/unix_thunks.c | 8 +-- include/wine/wgl.h | 15 ++++++ 3 files changed, 112 insertions(+), 13 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 98bd5319de3..2aa583f9ee0 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -862,6 +862,7 @@ my $egl_commit="3ae2b7c48690d2ce13cc6db3db02dfc0572be65e"; my $cache = ($ENV{XDG_CACHE_HOME} || "$ENV{HOME}/.cache") . "/wine"; system "mkdir", "-p", $cache; +-f "$cache/registry-$ogl_commit.py" || system "wget", "-q", "-O", "$cache/registry-$ogl_commit.py", "$ogl_url/$ogl_commit/extensions/registry.py" || die "cannot download registry.py"; -f "$cache/gl-$ogl_commit.xml" || system "wget", "-q", "-O", "$cache/gl-$ogl_commit.xml", "$ogl_url/$ogl_commit/xml/gl.xml" || die "cannot download gl.xml"; -f "$cache/wgl-$ogl_commit.xml" || system "wget", "-q", "-O", "$cache/wgl-$ogl_commit.xml", "$ogl_url/$ogl_commit/xml/wgl.xml" || die "cannot download wgl.xml"; -f "$cache/egl-$egl_commit.xml" || system "wget", "-q", "-O", "$cache/egl-$egl_commit.xml", "$egl_url/$egl_commit/api/egl.xml" || die "cannot download egl.xml"; @@ -955,10 +956,9 @@ my %unexposed_extensions = ); my %extension_aliases = ( - "GL_ARB_texture_compression" => "GL_VERSION_1_3", - "GL_EXT_blend_equation_separate" => "GL_ATI_blend_equation_separate", - "GL_EXT_copy_texture" => "GL_VERSION_1_2", - "GL_EXT_multi_draw_arrays" => "GL_SUN_multi_draw_arrays", + "GL_ARB_texture_compression" => ["GL_VERSION_1_3"], + "GL_EXT_blend_equation_separate" => ["GL_ATI_blend_equation_separate"], + "GL_EXT_copy_texture" => ["GL_VERSION_1_2"], ); my %supported_apis = @@ -1023,11 +1023,89 @@ sub add_extension($) $wgl_extensions{$name} = 1 if $name =~ /^WGL/; $egl_extensions{$name} = 1 if $name =~ /^EGL/; - if (my $alias = $extension_aliases{$name}) + foreach my $alias (@{$extension_aliases{$name}}) { - $gl_extensions{$alias} = 1 if $alias =~ /^GL/ and $alias !~ /_VERSION_/; - $wgl_extensions{$alias} = 1 if $alias =~ /^WGL/ and $alias !~ /_VERSION_/; - $egl_extensions{$alias} = 1 if $alias =~ /^EGL/ and $alias !~ /_VERSION_/; + next if $alias =~ /_VERSION_/; + $gl_extensions{$alias} = 1 if $alias =~ /^GL/; + $wgl_extensions{$alias} = 1 if $alias =~ /^WGL/; + $egl_extensions{$alias} = 1 if $alias =~ /^EGL/; + } +} + +sub parse_registry($) +{ + my $file = shift; + my %aliases = (); + my $name = ""; + my $flags = ""; + my $alias = ""; + my $number = ""; + my $depth = 0; + my $api = ""; + + open IN, "$file" or die "cannot open $file"; + + foreach my $line (<IN>) + { + my ($key, $val); + next if chomp($line) =~ /^$/; + + if ($depth == 1 and ($key) = ($line =~ /'(\w+)' : \{/)) + { + $name = $key; + $api = "gl" if $name =~ /^WGL_/; + $api = "glx" if $name =~ /^GLX_/; + $api = "glu" if $name =~ /^GLU_/; + } + + $depth++ if $line =~ /\{/; + $depth-- if $line =~ /\}/; + + if (($key, $val) = ($line =~ /'(.*)' : \{ (.*) \},/)) + { + $alias = $val if $key eq "alias"; + $flags = $val if $key eq "flags"; + } + elsif (($key, $val) = ($line =~ /'(.*)' : (.*),/)) + { + $number = $val if $key =~ /(|arb|es|sc)number/; + $api = "gl" if $key =~ /^(arb)?number$/ and $api eq ""; + $api = "gles" if $key eq "esnumber" and $api eq ""; + $api = "glsc" if $key eq "scnumber" and $api eq ""; + } + + $api = "gl" if $depth == 1 and $api eq ""; + if ($depth == 1 and is_supported_api( $api ) and is_supported_extension( $name ) and $flags =~ /public/ and $number ne "") + { + add_extension( $name ); + + foreach my $alt (split(",", $alias)) + { + $alt =~ s/^\s*'(.*)'\s*$/$1/; + push @{$aliases{$name}}, $alt; + } + } + + $name = $flags = $alias = $api = $number = "" if $depth == 1; + } + + close IN; + + # the registry aliases are a bit unreliable, only add the alias if there's no known extension + foreach (keys %aliases) + { + foreach my $alias (@{$aliases{$_}}) + { + next unless $alias =~ /^(GL|WGL|EGL)_/; + next unless is_supported_extension( $alias ); + next if defined $gl_extensions{$alias}; + next if defined $wgl_extensions{$alias}; + next if defined $egl_extensions{$alias}; + + add_extension( $alias ); + + push @{$extension_aliases{$_}}, $alias; + } } } @@ -1197,6 +1275,9 @@ parse_file( "$cache/wgl-$ogl_commit.xml" ); parse_file( "$cache/egl-$egl_commit.xml" ); parse_file( "winegl.xml" ); +# parse registry after the specs, as its aliases are unreliable +parse_registry( "$cache/registry-$ogl_commit.py" ); + # # Generate the wgl.h file # @@ -1756,7 +1837,10 @@ foreach (sort keys %ext_functions) foreach my $ext (@{$func->[2]}) { push @exts, $ext; - push @exts, $extension_aliases{$ext} if defined $extension_aliases{$ext}; + foreach my $alias (@{$extension_aliases{$ext}}) + { + push @exts, $alias; + } } printf OUT " { \"%s\", \"%s\\0\", offsetof(struct opengl_funcs, p_$_) },\n", $_, join("\\0", sort @exts); } diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 882ecc15b48..f1ac02cbf1d 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -92338,7 +92338,7 @@ const struct registry_entry extension_registry[2756] = { "glFramebufferSampleLocationsfvARB", "GL_ARB_sample_locations\0", offsetof(struct opengl_funcs, p_glFramebufferSampleLocationsfvARB) }, { "glFramebufferSampleLocationsfvNV", "GL_NV_sample_locations\0", offsetof(struct opengl_funcs, p_glFramebufferSampleLocationsfvNV) }, { "glFramebufferSamplePositionsfvAMD", "GL_AMD_framebuffer_sample_positions\0", offsetof(struct opengl_funcs, p_glFramebufferSamplePositionsfvAMD) }, - { "glFramebufferShadingRateEXT", "GL_EXT_fragment_shading_rate\0", offsetof(struct opengl_funcs, p_glFramebufferShadingRateEXT) }, + { "glFramebufferShadingRateEXT", "GL_EXT_fragment_shading_rate\0GL_EXT_fragment_shading_rate_attachment\0GL_EXT_fragment_shading_rate_primitive\0", offsetof(struct opengl_funcs, p_glFramebufferShadingRateEXT) }, { "glFramebufferTexture", "GL_VERSION_3_2\0", offsetof(struct opengl_funcs, p_glFramebufferTexture) }, { "glFramebufferTexture1D", "GL_ARB_framebuffer_object\0GL_VERSION_3_0\0", offsetof(struct opengl_funcs, p_glFramebufferTexture1D) }, { "glFramebufferTexture1DEXT", "GL_EXT_framebuffer_object\0", offsetof(struct opengl_funcs, p_glFramebufferTexture1DEXT) }, @@ -92479,7 +92479,7 @@ const struct registry_entry extension_registry[2756] = { "glGetFragmentLightivSGIX", "GL_SGIX_fragment_lighting\0", offsetof(struct opengl_funcs, p_glGetFragmentLightivSGIX) }, { "glGetFragmentMaterialfvSGIX", "GL_SGIX_fragment_lighting\0", offsetof(struct opengl_funcs, p_glGetFragmentMaterialfvSGIX) }, { "glGetFragmentMaterialivSGIX", "GL_SGIX_fragment_lighting\0", offsetof(struct opengl_funcs, p_glGetFragmentMaterialivSGIX) }, - { "glGetFragmentShadingRatesEXT", "GL_EXT_fragment_shading_rate\0", offsetof(struct opengl_funcs, p_glGetFragmentShadingRatesEXT) }, + { "glGetFragmentShadingRatesEXT", "GL_EXT_fragment_shading_rate\0GL_EXT_fragment_shading_rate_attachment\0GL_EXT_fragment_shading_rate_primitive\0", offsetof(struct opengl_funcs, p_glGetFragmentShadingRatesEXT) }, { "glGetFramebufferAttachmentParameteriv", "GL_ARB_framebuffer_object\0GL_VERSION_3_0\0", offsetof(struct opengl_funcs, p_glGetFramebufferAttachmentParameteriv) }, { "glGetFramebufferAttachmentParameterivEXT", "GL_EXT_framebuffer_object\0", offsetof(struct opengl_funcs, p_glGetFramebufferAttachmentParameterivEXT) }, { "glGetFramebufferParameterfvAMD", "GL_AMD_framebuffer_sample_positions\0", offsetof(struct opengl_funcs, p_glGetFramebufferParameterfvAMD) }, @@ -93716,8 +93716,8 @@ const struct registry_entry extension_registry[2756] = { "glShaderSource", "GL_VERSION_2_0\0", offsetof(struct opengl_funcs, p_glShaderSource) }, { "glShaderSourceARB", "GL_ARB_shader_objects\0", offsetof(struct opengl_funcs, p_glShaderSourceARB) }, { "glShaderStorageBlockBinding", "GL_ARB_shader_storage_buffer_object\0GL_VERSION_4_3\0", offsetof(struct opengl_funcs, p_glShaderStorageBlockBinding) }, - { "glShadingRateCombinerOpsEXT", "GL_EXT_fragment_shading_rate\0", offsetof(struct opengl_funcs, p_glShadingRateCombinerOpsEXT) }, - { "glShadingRateEXT", "GL_EXT_fragment_shading_rate\0", offsetof(struct opengl_funcs, p_glShadingRateEXT) }, + { "glShadingRateCombinerOpsEXT", "GL_EXT_fragment_shading_rate\0GL_EXT_fragment_shading_rate_attachment\0GL_EXT_fragment_shading_rate_primitive\0", offsetof(struct opengl_funcs, p_glShadingRateCombinerOpsEXT) }, + { "glShadingRateEXT", "GL_EXT_fragment_shading_rate\0GL_EXT_fragment_shading_rate_attachment\0GL_EXT_fragment_shading_rate_primitive\0", offsetof(struct opengl_funcs, p_glShadingRateEXT) }, { "glShadingRateImageBarrierNV", "GL_NV_shading_rate_image\0", offsetof(struct opengl_funcs, p_glShadingRateImageBarrierNV) }, { "glShadingRateImagePaletteNV", "GL_NV_shading_rate_image\0", offsetof(struct opengl_funcs, p_glShadingRateImagePaletteNV) }, { "glShadingRateSampleOrderCustomNV", "GL_NV_shading_rate_image\0", offsetof(struct opengl_funcs, p_glShadingRateSampleOrderCustomNV) }, diff --git a/include/wine/wgl.h b/include/wine/wgl.h index 0df0e8efa51..20b46956065 100644 --- a/include/wine/wgl.h +++ b/include/wine/wgl.h @@ -9986,6 +9986,7 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_AMD_framebuffer_sample_positions) \ USE_GL_EXT(GL_AMD_gcn_shader) \ USE_GL_EXT(GL_AMD_gpu_shader_half_float) \ + USE_GL_EXT(GL_AMD_gpu_shader_half_float_fetch) \ USE_GL_EXT(GL_AMD_gpu_shader_int16) \ USE_GL_EXT(GL_AMD_gpu_shader_int64) \ USE_GL_EXT(GL_AMD_interleaved_elements) \ @@ -10003,6 +10004,7 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_AMD_shader_gpu_shader_half_float_fetch) \ USE_GL_EXT(GL_AMD_shader_image_load_store_lod) \ USE_GL_EXT(GL_AMD_shader_stencil_export) \ + USE_GL_EXT(GL_AMD_shader_stencil_value_export) \ USE_GL_EXT(GL_AMD_shader_trinary_minmax) \ USE_GL_EXT(GL_AMD_sparse_texture) \ USE_GL_EXT(GL_AMD_stencil_operation_extended) \ @@ -10112,6 +10114,7 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_ARB_robust_buffer_access_behavior) \ USE_GL_EXT(GL_ARB_robustness) \ USE_GL_EXT(GL_ARB_robustness_isolation) \ + USE_GL_EXT(GL_ARB_robustness_share_group_isolation) \ USE_GL_EXT(GL_ARB_sample_locations) \ USE_GL_EXT(GL_ARB_sample_shading) \ USE_GL_EXT(GL_ARB_sampler_objects) \ @@ -10246,7 +10249,10 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_EXT_draw_range_elements) \ USE_GL_EXT(GL_EXT_external_buffer) \ USE_GL_EXT(GL_EXT_fog_coord) \ + USE_GL_EXT(GL_EXT_fragment_lighting) \ USE_GL_EXT(GL_EXT_fragment_shading_rate) \ + USE_GL_EXT(GL_EXT_fragment_shading_rate_attachment) \ + USE_GL_EXT(GL_EXT_fragment_shading_rate_primitive) \ USE_GL_EXT(GL_EXT_framebuffer_blit) \ USE_GL_EXT(GL_EXT_framebuffer_blit_layers) \ USE_GL_EXT(GL_EXT_framebuffer_multisample) \ @@ -10285,6 +10291,7 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_EXT_provoking_vertex) \ USE_GL_EXT(GL_EXT_raster_multisample) \ USE_GL_EXT(GL_EXT_rescale_normal) \ + USE_GL_EXT(GL_EXT_scene_marker) \ USE_GL_EXT(GL_EXT_secondary_color) \ USE_GL_EXT(GL_EXT_semaphore) \ USE_GL_EXT(GL_EXT_semaphore_win32) \ @@ -10303,14 +10310,17 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_EXT_stencil_two_side) \ USE_GL_EXT(GL_EXT_stencil_wrap) \ USE_GL_EXT(GL_EXT_subtexture) \ + USE_GL_EXT(GL_EXT_swap_control) \ USE_GL_EXT(GL_EXT_texture) \ USE_GL_EXT(GL_EXT_texture3D) \ USE_GL_EXT(GL_EXT_texture_array) \ USE_GL_EXT(GL_EXT_texture_buffer_object) \ + USE_GL_EXT(GL_EXT_texture_compression_dxt1) \ USE_GL_EXT(GL_EXT_texture_compression_latc) \ USE_GL_EXT(GL_EXT_texture_compression_rgtc) \ USE_GL_EXT(GL_EXT_texture_compression_s3tc) \ USE_GL_EXT(GL_EXT_texture_cube_map) \ + USE_GL_EXT(GL_EXT_texture_env) \ USE_GL_EXT(GL_EXT_texture_env_add) \ USE_GL_EXT(GL_EXT_texture_env_combine) \ USE_GL_EXT(GL_EXT_texture_env_dot3) \ @@ -10362,6 +10372,8 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_INTEL_map_texture) \ USE_GL_EXT(GL_INTEL_parallel_arrays) \ USE_GL_EXT(GL_INTEL_performance_query) \ + USE_GL_EXT(GL_INTEL_shader_integer_functions2) \ + USE_GL_EXT(GL_INTEL_texture_scissor) \ USE_GL_EXT(GL_KHR_blend_equation_advanced) \ USE_GL_EXT(GL_KHR_blend_equation_advanced_coherent) \ USE_GL_EXT(GL_KHR_context_flush_control) \ @@ -10567,6 +10579,7 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_SGIX_ir_instrument1) \ USE_GL_EXT(GL_SGIX_list_priority) \ USE_GL_EXT(GL_SGIX_pixel_texture) \ + USE_GL_EXT(GL_SGIX_pixel_texture_bits) \ USE_GL_EXT(GL_SGIX_pixel_tiles) \ USE_GL_EXT(GL_SGIX_polynomial_ffd) \ USE_GL_EXT(GL_SGIX_reference_plane) \ @@ -10581,8 +10594,10 @@ typedef BOOL (GLAPIENTRY *PFN_wglSwapIntervalEXT)( int interval ); USE_GL_EXT(GL_SGIX_texture_coordinate_clamp) \ USE_GL_EXT(GL_SGIX_texture_lod_bias) \ USE_GL_EXT(GL_SGIX_texture_multi_buffer) \ + USE_GL_EXT(GL_SGIX_texture_range) \ USE_GL_EXT(GL_SGIX_texture_scale_bias) \ USE_GL_EXT(GL_SGIX_vertex_preclip) \ + USE_GL_EXT(GL_SGIX_vertex_preclip_hint) \ USE_GL_EXT(GL_SGIX_ycrcb) \ USE_GL_EXT(GL_SGIX_ycrcb_subsample) \ USE_GL_EXT(GL_SGIX_ycrcba) \ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9987