From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 82 ++++++++++++++++++++++++++++++++++++- dlls/opengl32/unix_thunks.c | 8 ++-- include/wine/wgl.h | 15 +++++++ 3 files changed, 100 insertions(+), 5 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 9f90a0aedb3..ccf09daaa29 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"; @@ -971,7 +972,6 @@ my %unexposed_extensions = my %extension_aliases = ( "GL_EXT_blend_equation_separate" => ["GL_ATI_blend_equation_separate"], - "GL_EXT_multi_draw_arrays" => ["GL_SUN_multi_draw_arrays"], ); my %supported_apis = @@ -1034,6 +1034,83 @@ sub add_extension($) } } +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; + } + } +} + sub parse_file($) { my $file = shift; @@ -1199,6 +1276,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 # diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 18e6b1b3024..ee30da84ac5 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -92397,7 +92397,7 @@ const struct registry_entry extension_registry[2758] = { "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) }, @@ -92538,7 +92538,7 @@ const struct registry_entry extension_registry[2758] = { "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) }, @@ -93777,8 +93777,8 @@ const struct registry_entry extension_registry[2758] = { "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 0836a51c420..9a5e399519a 100644 --- a/include/wine/wgl.h +++ b/include/wine/wgl.h @@ -9949,6 +9949,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) \ @@ -9966,6 +9967,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) \ @@ -10059,6 +10061,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) \ @@ -10193,7 +10196,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) \ @@ -10232,6 +10238,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) \ @@ -10250,14 +10257,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) \ @@ -10309,6 +10319,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) \ @@ -10514,6 +10526,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) \ @@ -10528,8 +10541,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