[PATCH 0/6] MR10686: opengl32: Fix missing hooks and merge similar wrappers together.
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 719e05f64b5..aae80d5727c 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -221,28 +221,16 @@ my %manual_unix_thunks = "wglShareLists" => 1, "wglSwapBuffers" => 1, ); -my %hide_default_fbo_thunks = - ( - "glFramebufferRenderbuffer" => 1, - "glFramebufferRenderbufferEXT" => 1, - "glFramebufferTexture" => 1, - "glFramebufferTexture1D" => 1, - "glFramebufferTexture1DEXT" => 1, - "glFramebufferTexture2D" => 1, - "glFramebufferTexture2DEXT" => 1, - "glFramebufferTexture3D" => 1, - "glFramebufferTexture3DEXT" => 1, - "glFramebufferTextureARB" => 1, - "glFramebufferTextureEXT" => 1, - "glFramebufferTextureFaceARB" => 1, - "glFramebufferTextureFaceEXT" => 1, - "glFramebufferTextureLayer" => 1, - "glFramebufferTextureLayerARB" => 1, - "glFramebufferTextureLayerEXT" => 1, - "glFramebufferTextureMultiviewOVR" => 1, - "glGetFramebufferAttachmentParameteriv" => 1, - "glGetFramebufferAttachmentParameterivEXT" => 1, - ); + +sub hide_default_fbo($) +{ + my $name = shift; + return 1 if $name =~ /^glFramebufferRenderbuffer/; + return 1 if $name =~ /^glFramebufferTexture/; + return 1 if $name =~ /^glGetFramebufferAttachmentParameteriv/; + return 0; +} + my %resolve_default_fbo_thunks = ( "glCopyColorTable" => 1, @@ -608,7 +596,7 @@ sub generate_unix_thunk($$$$) $ret .= " if (!$arg) $arg = get_default_fbo( $teb, $target );\n"; } $ret .= " resolve_default_fbo( $teb, TRUE );\n" if defined $resolve_default_fbo_thunks{$name}; - $ret .= " push_default_fbo( $teb );\n" if defined $hide_default_fbo_thunks{$name}; + $ret .= " push_default_fbo( $teb );\n" if hide_default_fbo( $name ); $ret .= " pthread_mutex_lock( &wgl_lock );\n$invalidation" if $need_lock; $ret .= " $ret_expr"; $call_args =~ s/,$/ /; @@ -626,7 +614,7 @@ sub generate_unix_thunk($$$$) } $ret .= " pthread_mutex_unlock( &wgl_lock );\n" if $need_lock; $ret .= " set_current_fbo( $teb, params->target, params->framebuffer );\n" if $name =~ /glBindFramebuffer/; - $ret .= " pop_default_fbo( $teb );\n" if defined $hide_default_fbo_thunks{$name}; + $ret .= " pop_default_fbo( $teb );\n" if hide_default_fbo( $name ); if (defined $state_attrib_funcs{$name}) { my $state_args = $state_attrib_funcs{$name}; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 28 +++++++++++++--------------- dlls/opengl32/unix_thunks.c | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index aae80d5727c..b8224436c44 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -231,20 +231,18 @@ sub hide_default_fbo($) return 0; } -my %resolve_default_fbo_thunks = - ( - "glCopyColorTable" => 1, - "glCopyPixels" => 1, - "glCopyTexImage1D" => 1, - "glCopyTexImage2D" => 1, - "glCopyTexSubImage1D" => 1, - "glCopyTexSubImage2D" => 1, - "glCopyTexSubImage3D" => 1, - "glCopyTextureSubImage1D" => 1, - "glCopyTextureSubImage2D" => 1, - "glCopyTextureSubImage3D" => 1, - "glReadPixels" => 1, - ); +sub resolve_default_fbo($) +{ + my $name = shift; + return 1 if $name =~ /^glCopyColorTable/; + return 1 if $name =~ /^glCopyPixels/; + return 1 if $name =~ /^glCopyTexImage/; + return 1 if $name =~ /^glCopyTexSubImage/; + return 1 if $name =~ /^glCopyTextureSubImage/; + return 1 if $name =~ /^glReadPixels/; + return 0; +} + my %map_default_fbo_thunks = ( "glBindFramebuffer" => [ "framebuffer" ], @@ -595,7 +593,7 @@ sub generate_unix_thunk($$$$) $target = "params->target" if $call_args =~ "params->target"; $ret .= " if (!$arg) $arg = get_default_fbo( $teb, $target );\n"; } - $ret .= " resolve_default_fbo( $teb, TRUE );\n" if defined $resolve_default_fbo_thunks{$name}; + $ret .= " resolve_default_fbo( $teb, TRUE );\n" if resolve_default_fbo( $name ); $ret .= " push_default_fbo( $teb );\n" if hide_default_fbo( $name ); $ret .= " pthread_mutex_lock( &wgl_lock );\n$invalidation" if $need_lock; $ret .= " $ret_expr"; diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 2bb541f5e5c..bb389036064 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -6293,6 +6293,7 @@ static NTSTATUS ext_glCopyColorTableSGI( void *args ) struct glCopyColorTableSGI_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyColorTableSGI) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyColorTableSGI( params->target, params->internalformat, params->x, params->y, params->width ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6433,6 +6434,7 @@ static NTSTATUS ext_glCopyTexImage1DEXT( void *args ) struct glCopyTexImage1DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTexImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTexImage1DEXT( params->target, params->level, params->internalformat, params->x, params->y, params->width, params->border ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6443,6 +6445,7 @@ static NTSTATUS ext_glCopyTexImage2DEXT( void *args ) struct glCopyTexImage2DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTexImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTexImage2DEXT( params->target, params->level, params->internalformat, params->x, params->y, params->width, params->height, params->border ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6453,6 +6456,7 @@ static NTSTATUS ext_glCopyTexSubImage1DEXT( void *args ) struct glCopyTexSubImage1DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTexSubImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTexSubImage1DEXT( params->target, params->level, params->xoffset, params->x, params->y, params->width ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6463,6 +6467,7 @@ static NTSTATUS ext_glCopyTexSubImage2DEXT( void *args ) struct glCopyTexSubImage2DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTexSubImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTexSubImage2DEXT( params->target, params->level, params->xoffset, params->yoffset, params->x, params->y, params->width, params->height ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6484,6 +6489,7 @@ static NTSTATUS ext_glCopyTexSubImage3DEXT( void *args ) struct glCopyTexSubImage3DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTexSubImage3DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTexSubImage3DEXT( params->target, params->level, params->xoffset, params->yoffset, params->zoffset, params->x, params->y, params->width, params->height ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6525,6 +6531,7 @@ static NTSTATUS ext_glCopyTextureSubImage1DEXT( void *args ) struct glCopyTextureSubImage1DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTextureSubImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTextureSubImage1DEXT( params->texture, params->target, params->level, params->xoffset, params->x, params->y, params->width ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6546,6 +6553,7 @@ static NTSTATUS ext_glCopyTextureSubImage2DEXT( void *args ) struct glCopyTextureSubImage2DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTextureSubImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTextureSubImage2DEXT( params->texture, params->target, params->level, params->xoffset, params->yoffset, params->x, params->y, params->width, params->height ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -6567,6 +6575,7 @@ static NTSTATUS ext_glCopyTextureSubImage3DEXT( void *args ) struct glCopyTextureSubImage3DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCopyTextureSubImage3DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( params->teb, TRUE ); funcs->p_glCopyTextureSubImage3DEXT( params->texture, params->target, params->level, params->xoffset, params->yoffset, params->zoffset, params->x, params->y, params->width, params->height ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44448,6 +44457,7 @@ static NTSTATUS wow64_ext_glCopyColorTableSGI( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyColorTableSGI) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyColorTableSGI( params->target, params->internalformat, params->x, params->y, params->width ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44753,6 +44763,7 @@ static NTSTATUS wow64_ext_glCopyTexImage1DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTexImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTexImage1DEXT( params->target, params->level, params->internalformat, params->x, params->y, params->width, params->border ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44775,6 +44786,7 @@ static NTSTATUS wow64_ext_glCopyTexImage2DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTexImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTexImage2DEXT( params->target, params->level, params->internalformat, params->x, params->y, params->width, params->height, params->border ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44795,6 +44807,7 @@ static NTSTATUS wow64_ext_glCopyTexSubImage1DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTexSubImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTexSubImage1DEXT( params->target, params->level, params->xoffset, params->x, params->y, params->width ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44817,6 +44830,7 @@ static NTSTATUS wow64_ext_glCopyTexSubImage2DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTexSubImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTexSubImage2DEXT( params->target, params->level, params->xoffset, params->yoffset, params->x, params->y, params->width, params->height ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44864,6 +44878,7 @@ static NTSTATUS wow64_ext_glCopyTexSubImage3DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTexSubImage3DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTexSubImage3DEXT( params->target, params->level, params->xoffset, params->yoffset, params->zoffset, params->x, params->y, params->width, params->height ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44951,6 +44966,7 @@ static NTSTATUS wow64_ext_glCopyTextureSubImage1DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTextureSubImage1DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTextureSubImage1DEXT( params->texture, params->target, params->level, params->xoffset, params->x, params->y, params->width ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44997,6 +45013,7 @@ static NTSTATUS wow64_ext_glCopyTextureSubImage2DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTextureSubImage2DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTextureSubImage2DEXT( params->texture, params->target, params->level, params->xoffset, params->yoffset, params->x, params->y, params->width, params->height ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -45045,6 +45062,7 @@ static NTSTATUS wow64_ext_glCopyTextureSubImage3DEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCopyTextureSubImage3DEXT) return STATUS_NOT_IMPLEMENTED; + resolve_default_fbo( teb, TRUE ); funcs->p_glCopyTextureSubImage3DEXT( params->texture, params->target, params->level, params->xoffset, params->yoffset, params->zoffset, params->x, params->y, params->width, params->height ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 53 ++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index b8224436c44..7246fe59b6a 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -243,31 +243,24 @@ sub resolve_default_fbo($) return 0; } -my %map_default_fbo_thunks = - ( - "glBindFramebuffer" => [ "framebuffer" ], - "glBindFramebufferEXT" => [ "framebuffer" ], - "glBlitNamedFramebuffer" => [ "readFramebuffer", "drawFramebuffer" ], - "glCheckNamedFramebufferStatus" => [ "framebuffer" ], - "glCheckNamedFramebufferStatusEXT" => [ "framebuffer" ], - "glClearNamedFramebufferfi" => [ "framebuffer" ], - "glClearNamedFramebufferfv" => [ "framebuffer" ], - "glClearNamedFramebufferiv" => [ "framebuffer" ], - "glClearNamedFramebufferuiv" => [ "framebuffer" ], - "glGetNamedFramebufferAttachmentParameteriv" => [ "framebuffer" ], - "glGetNamedFramebufferAttachmentParameterivEXT" => [ "framebuffer" ], - "glGetNamedFramebufferParameterfvAMD" => [ "framebuffer" ], - "glGetNamedFramebufferParameteriv" => [ "framebuffer" ], - "glGetNamedFramebufferParameterivEXT" => [ "framebuffer" ], - "glInvalidateNamedFramebufferData" => [ "framebuffer" ], - "glInvalidateNamedFramebufferSubData" => [ "framebuffer" ], - "glNamedFramebufferParameteri" => [ "framebuffer" ], - "glNamedFramebufferParameteriEXT" => [ "framebuffer" ], - "glNamedFramebufferSampleLocationsfvARB" => [ "framebuffer" ], - "glNamedFramebufferSampleLocationsfvNV" => [ "framebuffer" ], - "glNamedFramebufferSamplePositionsfvAMD" => [ "framebuffer" ], - "glNamedFramebufferTextureMultiviewOVR" => [ "framebuffer" ], - ); +sub map_default_fbo($$) +{ + my ($name, $pname) = @_; + return 1 if $name =~ /^glBindFramebuffer/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glBlitNamedFramebuffer/ and $pname =~ /(read|draw)Framebuffer/; + return 1 if $name =~ /^glCheckNamedFramebufferStatus/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glClearNamedFramebuffer/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glGetNamedFramebufferAttachmentParameter/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glGetNamedFramebufferParameter/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glInvalidateNamedFramebuffer/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glNamedFramebufferParameter/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glNamedFramebufferSampleLocations/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glNamedFramebufferSampleLocations/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glNamedFramebufferSamplePositions/ and $pname eq "framebuffer"; + return 1 if $name =~ /^glNamedFramebufferTextureMultiview/ and $pname eq "framebuffer"; + return 0; +} + my %manual_wow64_wrappers = ( "glBufferStorage" => 0, @@ -420,6 +413,7 @@ sub generate_unix_thunk($$$$) my $use_pbuffer = 0; my $use_context = 0; my $call_args = ""; + my @map_args = (); my $ret_expr = ""; my $use_dc = 0; my $vars = ""; @@ -451,7 +445,7 @@ sub generate_unix_thunk($$$$) if ($ptype ne "PTR32") { - if (grep(/^$pname/, @{$map_default_fbo_thunks{$name}})) + if (map_default_fbo( $name, $pname )) { $call_args .= " $pname,"; } @@ -547,7 +541,7 @@ sub generate_unix_thunk($$$$) } else { - if (grep(/^$pname/, @{$map_default_fbo_thunks{$name}})) + if (map_default_fbo( $name, $pname )) { $call_args .= " $pname,"; } @@ -563,9 +557,10 @@ sub generate_unix_thunk($$$$) foreach my $arg (@{$func->[1]}) { my $pname = get_arg_name( $arg ); - if (grep(/^$pname/, @{$map_default_fbo_thunks{$name}})) + if (map_default_fbo( $name, $pname )) { $ret .= " GLuint $pname = params->$pname;\n"; + push @map_args, $pname; } } @@ -586,7 +581,7 @@ sub generate_unix_thunk($$$$) $ret .= " if (!funcs->p_$name) return STATUS_NOT_IMPLEMENTED;\n"; } $ret .= $input_conv; - foreach my $arg (@{$map_default_fbo_thunks{$name}}) + foreach my $arg (@map_args) { my $target = "GL_DRAW_FRAMEBUFFER"; $target = "GL_READ_FRAMEBUFFER" if $arg =~ "readFramebuffer"; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 65 +++++++++--------- dlls/opengl32/unix_thunks.c | 48 ++++++------- dlls/opengl32/unix_thunks.h | 35 ++++------ dlls/opengl32/unix_wgl.c | 133 ++++++++++-------------------------- 4 files changed, 105 insertions(+), 176 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 7246fe59b6a..34c32b361e9 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -261,31 +261,28 @@ sub map_default_fbo($$) return 0; } -my %manual_wow64_wrappers = - ( - "glBufferStorage" => 0, - "glDeleteBuffers" => 0, - "glFlushMappedBufferRange" => 0, - "glFlushMappedNamedBufferRange" => 0, - "glFlushMappedNamedBufferRangeEXT" => 0, - "glGetBufferPointerv" => 0, - "glGetBufferPointervARB" => 0, - "glGetNamedBufferPointerv" => 0, - "glGetNamedBufferPointervEXT" => 0, - "glMapBuffer" => 0, - "glMapBufferARB" => 0, - "glMapBufferRange" => 0, - "glMapNamedBuffer" => 0, - "glMapNamedBufferEXT" => 0, - "glMapNamedBufferRange" => 0, - "glMapNamedBufferRangeEXT" => 0, - "glNamedBufferStorage" => 0, - "glNamedBufferStorageEXT" => 0, - "glUnmapBuffer" => 0, - "glUnmapBufferARB" => 0, - "glUnmapNamedBuffer" => 0, - "glUnmapNamedBufferEXT" => 0, - ); +sub manual_wow64_wrapper($) +{ + my $name = shift; + return 0 if $name =~ /^glBufferStorageExternal/; + return 0 if $name =~ /^glBufferStorageMem/; + return "glBufferStorage" if $name =~ /^glBufferStorage/; + return "glDeleteBuffers" if $name =~ /^glDeleteBuffers/; + return "glFlushMappedBufferRange" if $name =~ /^glFlushMappedBufferRange/; + return "glFlushMappedNamedBufferRange" if $name =~ /^glFlushMappedNamedBufferRange/; + return "glGetBufferPointerv" if $name =~ /^glGetBufferPointerv/; + return "glGetNamedBufferPointerv" if $name =~ /^glGetNamedBufferPointerv/; + return "glMapBufferRange" if $name =~ /^glMapBufferRange/; + return "glMapBuffer" if $name =~ /^glMapBuffer/; + return "glMapNamedBufferRange" if $name =~ /^glMapNamedBufferRange/; + return "glMapNamedBuffer" if $name =~ /^glMapNamedBuffer/; + return 0 if $name =~ /^glNamedBufferStorageExternal/; + return 0 if $name =~ /^glNamedBufferStorageMem/; + return "glNamedBufferStorage" if $name =~ /^glNamedBufferStorage/; + return "glUnmapBuffer" if $name =~ /^glUnmapBuffer/; + return "glUnmapNamedBuffer" if $name =~ /^glUnmapNamedBuffer/; +} + my %wow64_invalidate_buffer = ( "glBufferAttachMemoryNV" => 1, @@ -401,8 +398,8 @@ sub generate_unix_thunk($$$$) { my ($name, $func, $is_wow64, $prefix) = @_; my $func_ret = get_func_ret( $func ); - my $manual_wow64_wrapper = $is_wow64 && defined $manual_wow64_wrappers{$name}; - my $need_wrap = $manual_wow64_wrapper || needs_wrapper( $name, $func ); + my $wow64_wrap = $is_wow64 ? manual_wow64_wrapper( $name ) : 0; + my $need_wrap = $wow64_wrap || needs_wrapper( $name, $func ); my $need_lock = 0; my $need_funcs = !$need_wrap || ($prefix eq "ext" && $name !~ /^wgl/); my $teb = $is_wow64 ? "teb" : "params->teb"; @@ -592,17 +589,18 @@ sub generate_unix_thunk($$$$) $ret .= " push_default_fbo( $teb );\n" if hide_default_fbo( $name ); $ret .= " pthread_mutex_lock( &wgl_lock );\n$invalidation" if $need_lock; $ret .= " $ret_expr"; - $call_args =~ s/,$/ /; - if ($manual_wow64_wrapper) + if ($wow64_wrap) { - $ret .= "wow64_$name($call_args);\n"; + $ret .= "wow64_$wow64_wrap($call_args funcs->p_$name );\n"; } elsif ($need_wrap) { + $call_args =~ s/,$/ /; $ret .= "wrap_$name($call_args);\n"; } else { + $call_args =~ s/,$/ /; $ret .= "funcs->p_$name($call_args);\n"; } $ret .= " pthread_mutex_unlock( &wgl_lock );\n" if $need_lock; @@ -653,6 +651,7 @@ sub generate_wrapper_declaration($$$) } $ret .= " " . $arg->textContent() . ","; } + $ret .= " PFN_$name func," if $is_wow64; $ret .= " HPBUFFERARB handle," if $ret_type =~ /HPBUFFERARB/; $ret .= " HGLRC handle," if $ret_type =~ /HGLRC/; $ret .= " GLsync handle," if $ret_type =~ /GLsync/; @@ -1684,18 +1683,18 @@ print OUT "\n#ifdef _WIN64\n"; foreach (sort keys %wgl_functions) { - next unless defined $manual_wow64_wrappers{$_}; + next unless manual_wow64_wrapper( $_ ) eq $_; print OUT generate_wrapper_declaration($_, $wgl_functions{$_}, 1); } foreach (sort keys %norm_functions) { - next unless defined $manual_wow64_wrappers{$_}; + next unless manual_wow64_wrapper( $_ ) eq $_; print OUT generate_wrapper_declaration($_, $norm_functions{$_}, 1); } foreach (sort keys %ext_functions) { next unless is_exposed_function( $ext_functions{$_} ); - next unless defined $manual_wow64_wrappers{$_}; + next unless manual_wow64_wrapper( $_ ) eq $_; print OUT generate_wrapper_declaration($_, $ext_functions{$_}, 1); } diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index bb389036064..7008395930e 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -41689,7 +41689,7 @@ static NTSTATUS wow64_ext_glBufferStorage( void *args ) if (!funcs->p_glBufferStorage) return STATUS_NOT_IMPLEMENTED; pthread_mutex_lock( &wgl_lock ); buffer = invalidate_buffer_target( teb, params->target ); - wow64_glBufferStorage( teb, params->target, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags ); + wow64_glBufferStorage( teb, params->target, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags, funcs->p_glBufferStorage ); pthread_mutex_unlock( &wgl_lock ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); if (buffer) free_buffer( funcs, buffer ); @@ -45858,7 +45858,7 @@ static NTSTATUS wow64_ext_glDeleteBuffers( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDeleteBuffers) return STATUS_NOT_IMPLEMENTED; - wow64_glDeleteBuffers( teb, params->n, ULongToPtr(params->buffers) ); + wow64_glDeleteBuffers( teb, params->n, ULongToPtr(params->buffers), funcs->p_glDeleteBuffers ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45874,7 +45874,7 @@ static NTSTATUS wow64_ext_glDeleteBuffersARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDeleteBuffersARB) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDeleteBuffersARB( params->n, ULongToPtr(params->buffers) ); + wow64_glDeleteBuffers( teb, params->n, ULongToPtr(params->buffers), funcs->p_glDeleteBuffersARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48409,7 +48409,7 @@ static NTSTATUS wow64_ext_glFlushMappedBufferRange( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFlushMappedBufferRange) return STATUS_NOT_IMPLEMENTED; - wow64_glFlushMappedBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length) ); + wow64_glFlushMappedBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), funcs->p_glFlushMappedBufferRange ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48426,7 +48426,7 @@ static NTSTATUS wow64_ext_glFlushMappedBufferRangeAPPLE( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFlushMappedBufferRangeAPPLE) return STATUS_NOT_IMPLEMENTED; - funcs->p_glFlushMappedBufferRangeAPPLE( params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->size) ); + wow64_glFlushMappedBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->size), funcs->p_glFlushMappedBufferRangeAPPLE ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48443,7 +48443,7 @@ static NTSTATUS wow64_ext_glFlushMappedNamedBufferRange( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFlushMappedNamedBufferRange) return STATUS_NOT_IMPLEMENTED; - wow64_glFlushMappedNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length) ); + wow64_glFlushMappedNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), funcs->p_glFlushMappedNamedBufferRange ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48460,7 +48460,7 @@ static NTSTATUS wow64_ext_glFlushMappedNamedBufferRangeEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFlushMappedNamedBufferRangeEXT) return STATUS_NOT_IMPLEMENTED; - wow64_glFlushMappedNamedBufferRangeEXT( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length) ); + wow64_glFlushMappedNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), funcs->p_glFlushMappedNamedBufferRangeEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -50710,7 +50710,7 @@ static NTSTATUS wow64_ext_glGetBufferPointerv( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetBufferPointerv) return STATUS_NOT_IMPLEMENTED; - wow64_glGetBufferPointerv( teb, params->target, params->pname, ULongToPtr(params->params) ); + wow64_glGetBufferPointerv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetBufferPointerv ); return STATUS_SUCCESS; } @@ -50726,7 +50726,7 @@ static NTSTATUS wow64_ext_glGetBufferPointervARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetBufferPointervARB) return STATUS_NOT_IMPLEMENTED; - wow64_glGetBufferPointervARB( teb, params->target, params->pname, ULongToPtr(params->params) ); + wow64_glGetBufferPointerv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetBufferPointervARB ); return STATUS_SUCCESS; } @@ -52977,7 +52977,7 @@ static NTSTATUS wow64_ext_glGetNamedBufferPointerv( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetNamedBufferPointerv) return STATUS_NOT_IMPLEMENTED; - wow64_glGetNamedBufferPointerv( teb, params->buffer, params->pname, ULongToPtr(params->params) ); + wow64_glGetNamedBufferPointerv( teb, params->buffer, params->pname, ULongToPtr(params->params), funcs->p_glGetNamedBufferPointerv ); return STATUS_SUCCESS; } @@ -52993,7 +52993,7 @@ static NTSTATUS wow64_ext_glGetNamedBufferPointervEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetNamedBufferPointervEXT) return STATUS_NOT_IMPLEMENTED; - wow64_glGetNamedBufferPointervEXT( teb, params->buffer, params->pname, ULongToPtr(params->params) ); + wow64_glGetNamedBufferPointerv( teb, params->buffer, params->pname, ULongToPtr(params->params), funcs->p_glGetNamedBufferPointervEXT ); return STATUS_SUCCESS; } @@ -59661,7 +59661,7 @@ static NTSTATUS wow64_ext_glMapBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapBuffer) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapBuffer( teb, params->target, params->access ); + params->ret = (UINT_PTR)wow64_glMapBuffer( teb, params->target, params->access, funcs->p_glMapBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59678,7 +59678,7 @@ static NTSTATUS wow64_ext_glMapBufferARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapBufferARB) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapBufferARB( teb, params->target, params->access ); + params->ret = (UINT_PTR)wow64_glMapBuffer( teb, params->target, params->access, funcs->p_glMapBufferARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59697,7 +59697,7 @@ static NTSTATUS wow64_ext_glMapBufferRange( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapBufferRange) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); + params->ret = (UINT_PTR)wow64_glMapBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, funcs->p_glMapBufferRange ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59773,7 +59773,7 @@ static NTSTATUS wow64_ext_glMapNamedBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapNamedBuffer) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapNamedBuffer( teb, params->buffer, params->access ); + params->ret = (UINT_PTR)wow64_glMapNamedBuffer( teb, params->buffer, params->access, funcs->p_glMapNamedBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59790,7 +59790,7 @@ static NTSTATUS wow64_ext_glMapNamedBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapNamedBufferEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapNamedBufferEXT( teb, params->buffer, params->access ); + params->ret = (UINT_PTR)wow64_glMapNamedBuffer( teb, params->buffer, params->access, funcs->p_glMapNamedBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59809,7 +59809,7 @@ static NTSTATUS wow64_ext_glMapNamedBufferRange( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapNamedBufferRange) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); + params->ret = (UINT_PTR)wow64_glMapNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, funcs->p_glMapNamedBufferRange ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -59828,7 +59828,7 @@ static NTSTATUS wow64_ext_glMapNamedBufferRangeEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glMapNamedBufferRangeEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wow64_glMapNamedBufferRangeEXT( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); + params->ret = (UINT_PTR)wow64_glMapNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, funcs->p_glMapNamedBufferRangeEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64370,7 +64370,7 @@ static NTSTATUS wow64_ext_glNamedBufferStorage( void *args ) if (!funcs->p_glNamedBufferStorage) return STATUS_NOT_IMPLEMENTED; pthread_mutex_lock( &wgl_lock ); buffer = invalidate_buffer_name( teb, params->buffer ); - wow64_glNamedBufferStorage( teb, params->buffer, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags ); + wow64_glNamedBufferStorage( teb, params->buffer, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags, funcs->p_glNamedBufferStorage ); pthread_mutex_unlock( &wgl_lock ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); if (buffer) free_buffer( funcs, buffer ); @@ -64393,7 +64393,7 @@ static NTSTATUS wow64_ext_glNamedBufferStorageEXT( void *args ) if (!funcs->p_glNamedBufferStorageEXT) return STATUS_NOT_IMPLEMENTED; pthread_mutex_lock( &wgl_lock ); buffer = invalidate_buffer_name( teb, params->buffer ); - wow64_glNamedBufferStorageEXT( teb, params->buffer, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags ); + wow64_glNamedBufferStorage( teb, params->buffer, (GLsizeiptr)ULongToPtr(params->size), ULongToPtr(params->data), params->flags, funcs->p_glNamedBufferStorageEXT ); pthread_mutex_unlock( &wgl_lock ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); if (buffer) free_buffer( funcs, buffer ); @@ -79241,7 +79241,7 @@ static NTSTATUS wow64_ext_glUnmapBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glUnmapBuffer) return STATUS_NOT_IMPLEMENTED; - params->ret = wow64_glUnmapBuffer( teb, params->target ); + params->ret = wow64_glUnmapBuffer( teb, params->target, funcs->p_glUnmapBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -79257,7 +79257,7 @@ static NTSTATUS wow64_ext_glUnmapBufferARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glUnmapBufferARB) return STATUS_NOT_IMPLEMENTED; - params->ret = wow64_glUnmapBufferARB( teb, params->target ); + params->ret = wow64_glUnmapBuffer( teb, params->target, funcs->p_glUnmapBufferARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -79273,7 +79273,7 @@ static NTSTATUS wow64_ext_glUnmapNamedBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glUnmapNamedBuffer) return STATUS_NOT_IMPLEMENTED; - params->ret = wow64_glUnmapNamedBuffer( teb, params->buffer ); + params->ret = wow64_glUnmapNamedBuffer( teb, params->buffer, funcs->p_glUnmapNamedBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -79289,7 +79289,7 @@ static NTSTATUS wow64_ext_glUnmapNamedBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glUnmapNamedBufferEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = wow64_glUnmapNamedBufferEXT( teb, params->buffer ); + params->ret = wow64_glUnmapNamedBuffer( teb, params->buffer, funcs->p_glUnmapNamedBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } diff --git a/dlls/opengl32/unix_thunks.h b/dlls/opengl32/unix_thunks.h index b9b5f0a0096..852c0823bdd 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -43,26 +43,17 @@ extern HPBUFFERARB wrap_wglCreatePbufferARB( TEB *teb, HDC hDC, int iPixelFormat extern BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC hDrawDC, HDC hReadDC, HGLRC hglrc ); #ifdef _WIN64 -extern void wow64_glBufferStorage( TEB *teb, GLenum target, GLsizeiptr size, const void *data, GLbitfield flags ); -extern void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers ); -extern void wow64_glFlushMappedBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length ); -extern void wow64_glFlushMappedNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length ); -extern void wow64_glFlushMappedNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length ); -extern void wow64_glGetBufferPointerv( TEB *teb, GLenum target, GLenum pname, PTR32 *params ); -extern void wow64_glGetBufferPointervARB( TEB *teb, GLenum target, GLenum pname, PTR32 *params ); -extern void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params ); -extern void wow64_glGetNamedBufferPointervEXT( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params ); -extern void *wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access ); -extern void *wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access ); -extern void *wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern void *wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access ); -extern void *wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access ); -extern void *wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern void *wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern void wow64_glNamedBufferStorage( TEB *teb, GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags ); -extern void wow64_glNamedBufferStorageEXT( TEB *teb, GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags ); -extern GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target ); -extern GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target ); -extern GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer ); -extern GLboolean wow64_glUnmapNamedBufferEXT( TEB *teb, GLuint buffer ); +extern void wow64_glBufferStorage( TEB *teb, GLenum target, GLsizeiptr size, const void *data, GLbitfield flags, PFN_glBufferStorage func ); +extern void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers, PFN_glDeleteBuffers func ); +extern void wow64_glFlushMappedBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, PFN_glFlushMappedBufferRange func ); +extern void wow64_glFlushMappedNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, PFN_glFlushMappedNamedBufferRange func ); +extern void wow64_glGetBufferPointerv( TEB *teb, GLenum target, GLenum pname, PTR32 *params, PFN_glGetBufferPointerv func ); +extern void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params, PFN_glGetNamedBufferPointerv func ); +extern void *wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access, PFN_glMapBuffer func ); +extern void *wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, PFN_glMapBufferRange func ); +extern void *wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access, PFN_glMapNamedBuffer func ); +extern void *wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access, PFN_glMapNamedBufferRange func ); +extern void wow64_glNamedBufferStorage( TEB *teb, GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags, PFN_glNamedBufferStorage func ); +extern GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PFN_glUnmapBuffer func ); +extern GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer, PFN_glUnmapNamedBuffer func ); #endif diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index fd17d4aafda..a1dc8a88a26 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -2369,7 +2369,7 @@ static GLbitfield map_range_flags_from_map_flags( GLenum flags ) } } -void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers ) +void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers, PFN_glDeleteBuffers p_glDeleteBuffers ) { const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer; @@ -2377,7 +2377,7 @@ void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers ) pthread_mutex_lock( &wgl_lock ); - funcs->p_glDeleteBuffers( n, buffers ); + p_glDeleteBuffers( n, buffers ); for (i = 0; i < n; i++) { if ((buffer = invalidate_buffer_name( teb, buffers[i] ))) free_buffer( funcs, buffer ); @@ -2386,37 +2386,37 @@ void wow64_glDeleteBuffers( TEB *teb, GLsizei n, const GLuint *buffers ) pthread_mutex_unlock( &wgl_lock ); } -void wow64_glBufferStorage( TEB *teb, GLenum target, GLsizeiptr size, const void *data, GLbitfield flags ) +void wow64_glBufferStorage( TEB *teb, GLenum target, GLsizeiptr size, const void *data, + GLbitfield flags, PFN_glBufferStorage p_glBufferStorage ) { - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer = NULL; if (flags & GL_MAP_PERSISTENT_BIT) buffer = create_buffer_storage( teb, target, 0, size, data, flags ); - if (!buffer) funcs->p_glBufferStorage( target, size, data, flags ); + if (!buffer) p_glBufferStorage( target, size, data, flags ); } -void wow64_glNamedBufferStorage( TEB *teb, GLuint name, GLsizeiptr size, const void *data, GLbitfield flags ) +void wow64_glNamedBufferStorage( TEB *teb, GLuint name, GLsizeiptr size, const void *data, + GLbitfield flags, PFN_glNamedBufferStorage p_glNamedBufferStorage ) { - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer = NULL; if (flags & GL_MAP_PERSISTENT_BIT) buffer = create_buffer_storage( teb, 0, name, size, data, flags ); - if (!buffer) funcs->p_glNamedBufferStorage( name, size, data, flags ); + if (!buffer) p_glNamedBufferStorage( name, size, data, flags ); } -void wow64_glNamedBufferStorageEXT( TEB *teb, GLuint name, GLsizeiptr size, const void *data, GLbitfield flags ) +void wow64_glNamedBufferStorageEXT( TEB *teb, GLuint name, GLsizeiptr size, const void *data, + GLbitfield flags, PFN_glNamedBufferStorageEXT p_glNamedBufferStorageEXT ) { - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer = NULL; if (flags & GL_MAP_PERSISTENT_BIT) buffer = create_buffer_storage( teb, 0, name, size, data, flags ); - if (!buffer) funcs->p_glNamedBufferStorageEXT( name, size, data, flags ); + if (!buffer) p_glNamedBufferStorageEXT( name, size, data, flags ); } static BOOL wow64_gl_get_buffer_pointer_v( TEB *teb, GLenum target, GLuint name, GLenum pname, PTR32 *wow_ptr ) @@ -2437,12 +2437,11 @@ static BOOL wow64_gl_get_buffer_pointer_v( TEB *teb, GLenum target, GLuint name, return ret; } -void wow64_glGetBufferPointerv( TEB *teb, GLenum target, GLenum pname, PTR32 *params ) +void wow64_glGetBufferPointerv( TEB *teb, GLenum target, GLenum pname, PTR32 *params, PFN_glGetBufferPointerv p_glGetBufferPointerv ) { - const struct opengl_funcs *funcs = teb->glTable; void *ptr; if (wow64_gl_get_buffer_pointer_v( teb, target, 0, pname, params )) return; - funcs->p_glGetBufferPointerv( target, pname, &ptr ); + p_glGetBufferPointerv( target, pname, &ptr ); *params = PtrToUlong(ptr); } @@ -2455,12 +2454,12 @@ void wow64_glGetBufferPointervARB( TEB *teb, GLenum target, GLenum pname, PTR32 *params = PtrToUlong(ptr); } -void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params ) +void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params, + PFN_glGetNamedBufferPointerv p_glGetNamedBufferPointerv ) { - const struct opengl_funcs *funcs = teb->glTable; void *ptr; if (buffer && wow64_gl_get_buffer_pointer_v( teb, 0, buffer, pname, params )) return; - funcs->p_glGetNamedBufferPointerv( buffer, pname, &ptr ); + p_glGetNamedBufferPointerv( buffer, pname, &ptr ); *params = PtrToUlong(ptr); } @@ -2473,7 +2472,7 @@ void wow64_glGetNamedBufferPointervEXT( TEB *teb, GLuint buffer, GLenum pname, P *params = PtrToUlong(ptr); } -static void *wow64_gl_map_buffer( TEB *teb, GLenum target, GLenum access, PFN_glMapBuffer gl_map_buffer64 ) +void *wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access, PFN_glMapBuffer p_glMapBuffer ) { GLbitfield range_access = map_range_flags_from_map_flags( access ); struct buffer *buffer; @@ -2481,39 +2480,27 @@ static void *wow64_gl_map_buffer( TEB *teb, GLenum target, GLenum access, PFN_gl pthread_mutex_lock( &wgl_lock ); buffer = get_target_buffer( teb, target ); - if (use_driver_buffer_map( buffer )) ptr = gl_map_buffer64( target, access ); + if (use_driver_buffer_map( buffer )) ptr = p_glMapBuffer( target, access ); ptr = wow64_map_buffer( teb, buffer, target, 0, 0, 0, range_access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ptr; } -void *wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access ) +void *wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, + GLbitfield access, PFN_glMapBufferRange p_glMapBufferRange ) { - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_buffer( teb, target, access, funcs->p_glMapBuffer ); -} - -void *wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_buffer( teb, target, access, funcs->p_glMapBufferARB ); -} - -void *wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer; void *ptr = NULL; pthread_mutex_lock( &wgl_lock ); buffer = get_target_buffer( teb, target ); - if (use_driver_buffer_map( buffer )) ptr = funcs->p_glMapBufferRange( target, offset, length, access ); + if (use_driver_buffer_map( buffer )) ptr = p_glMapBufferRange( target, offset, length, access ); ptr = wow64_map_buffer( teb, buffer, target, 0, offset, length, access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ptr; } -static void *wow64_gl_map_named_buffer( TEB *teb, GLuint name, GLenum access, PFN_glMapNamedBuffer gl_map_named_buffer64 ) +void *wow64_glMapNamedBuffer( TEB *teb, GLuint name, GLenum access, PFN_glMapNamedBuffer p_glMapNamedBuffer ) { GLbitfield range_access = map_range_flags_from_map_flags( access ); struct buffer *buffer; @@ -2521,50 +2508,26 @@ static void *wow64_gl_map_named_buffer( TEB *teb, GLuint name, GLenum access, PF pthread_mutex_lock( &wgl_lock ); buffer = get_named_buffer( teb, name ); - if (use_driver_buffer_map( buffer )) ptr = gl_map_named_buffer64( name, access ); + if (use_driver_buffer_map( buffer )) ptr = p_glMapNamedBuffer( name, access ); ptr = wow64_map_buffer( teb, buffer, 0, name, 0, 0, range_access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ptr; } -void *wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer( teb, buffer, access, funcs->p_glMapNamedBuffer ); -} - -void *wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer( teb, buffer, access, funcs->p_glMapNamedBufferEXT ); -} - -static void *wow64_gl_map_named_buffer_range( TEB *teb, GLuint name, GLintptr offset, GLsizeiptr length, GLbitfield access, - PFN_glMapNamedBufferRange gl_map_named_buffer_range64 ) +void *wow64_glMapNamedBufferRange( TEB *teb, GLuint name, GLintptr offset, GLsizeiptr length, + GLbitfield access, PFN_glMapNamedBufferRange p_glMapNamedBufferRange ) { struct buffer *buffer; void *ptr = NULL; pthread_mutex_lock( &wgl_lock ); buffer = get_named_buffer( teb, name ); - if (use_driver_buffer_map( buffer )) ptr = gl_map_named_buffer_range64( name, offset, length, access ); + if (use_driver_buffer_map( buffer )) ptr = p_glMapNamedBufferRange( name, offset, length, access ); ptr = wow64_map_buffer( teb, buffer, 0, name, offset, length, access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ptr; } -void *wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer_range( teb, buffer, offset, length, access, funcs->p_glMapNamedBufferRange ); -} - -void *wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer_range( teb, buffer, offset, length, access, funcs->p_glMapNamedBufferRangeEXT ); -} - static BOOL wow64_unmap_buffer( TEB *teb, struct buffer *buffer ) { if (buffer->vk_memory) @@ -2589,73 +2552,49 @@ static BOOL wow64_unmap_buffer( TEB *teb, struct buffer *buffer ) return TRUE; } -static GLboolean wow64_unmap_target_buffer( TEB *teb, GLenum target, PFN_glUnmapBuffer gl_unmap ) +GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PFN_glUnmapBuffer p_glUnmapBuffer ) { struct buffer *buffer; GLboolean ret; pthread_mutex_lock( &wgl_lock ); if ((buffer = get_target_buffer( teb, target ))) ret = wow64_unmap_buffer( teb, buffer ); - if (use_driver_buffer_map( buffer )) ret = gl_unmap( target ); + if (use_driver_buffer_map( buffer )) ret = p_glUnmapBuffer( target ); pthread_mutex_unlock( &wgl_lock ); return ret; } -GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_unmap_target_buffer( teb, target, funcs->p_glUnmapBuffer ); -} - -GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_unmap_target_buffer( teb, target, funcs->p_glUnmapBufferARB ); -} - -static GLboolean wow64_gl_unmap_named_buffer( TEB *teb, GLuint name, PFN_glUnmapBuffer gl_unmap ) +GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint name, PFN_glUnmapBuffer p_glUnmapNamedBuffer ) { struct buffer *buffer; GLboolean ret; pthread_mutex_lock( &wgl_lock ); if ((buffer = get_named_buffer( teb, name ))) ret = wow64_unmap_buffer( teb, buffer ); - if (use_driver_buffer_map( buffer )) ret = gl_unmap( name ); + if (use_driver_buffer_map( buffer )) ret = p_glUnmapNamedBuffer( name ); pthread_mutex_unlock( &wgl_lock ); return ret; } -GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer ) -{ - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_unmap_named_buffer( teb, buffer, funcs->p_glUnmapNamedBuffer ); -} - -GLboolean wow64_glUnmapNamedBufferEXT( TEB *teb, GLuint buffer ) +void wow64_glFlushMappedBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, + PFN_glFlushMappedBufferRange p_glFlushMappedBufferRange ) { - const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_unmap_named_buffer( teb, buffer, funcs->p_glUnmapNamedBufferEXT ); -} - -void wow64_glFlushMappedBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length ) -{ - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer; pthread_mutex_lock( &wgl_lock ); if ((buffer = get_target_buffer( teb, target ))) flush_buffer( teb, buffer, offset, length ); - if (use_driver_buffer_map( buffer )) funcs->p_glFlushMappedBufferRange( target, offset, length ); + if (use_driver_buffer_map( buffer )) p_glFlushMappedBufferRange( target, offset, length ); pthread_mutex_unlock( &wgl_lock ); } -void wow64_glFlushMappedNamedBufferRange( TEB *teb, GLuint name, GLintptr offset, GLsizeiptr length ) +void wow64_glFlushMappedNamedBufferRange( TEB *teb, GLuint name, GLintptr offset, GLsizeiptr length, + PFN_glFlushMappedNamedBufferRange p_glFlushMappedNamedBufferRange ) { - const struct opengl_funcs *funcs = teb->glTable; struct buffer *buffer; pthread_mutex_lock( &wgl_lock ); if ((buffer = get_named_buffer( teb, name ))) flush_buffer( teb, buffer, offset, length ); - if (use_driver_buffer_map( buffer )) funcs->p_glFlushMappedNamedBufferRange( name, offset, length ); + if (use_driver_buffer_map( buffer )) p_glFlushMappedNamedBufferRange( name, offset, length ); pthread_mutex_unlock( &wgl_lock ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/unix_wgl.c | 42 +++++++++------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index a1dc8a88a26..47dfb547881 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1990,34 +1990,6 @@ NTSTATUS return_wow64_string( const void *str, PTR32 *wow64_str ) return STATUS_BUFFER_TOO_SMALL; } -static GLint get_buffer_param( TEB *teb, GLenum target, GLenum param ) -{ - const struct opengl_funcs *funcs = teb->glTable; - GLint size = 0; - if (funcs->p_glGetBufferParameteriv) funcs->p_glGetBufferParameteriv( target, param, &size ); - return size; -} - -static GLint get_named_buffer_param( TEB *teb, GLint buffer, GLenum param ) -{ - const struct opengl_funcs *funcs = teb->glTable; - GLint size = 0; - if (funcs->p_glGetNamedBufferParameteriv) funcs->p_glGetNamedBufferParameteriv( buffer, param, &size ); - return size; -} - -static void unmap_buffer( TEB *teb, GLenum target ) -{ - const struct opengl_funcs *funcs = teb->glTable; - if (funcs->p_glUnmapBuffer) funcs->p_glUnmapBuffer( target ); -} - -static void unmap_named_buffer( TEB *teb, GLint buffer ) -{ - const struct opengl_funcs *funcs = teb->glTable; - if (funcs->p_glUnmapNamedBuffer) funcs->p_glUnmapNamedBuffer( buffer ); -} - static GLuint get_target_name( TEB *teb, GLenum target ) { const struct opengl_funcs *funcs = teb->glTable; @@ -2259,6 +2231,8 @@ static struct buffer *create_buffer_storage( TEB *teb, GLenum target, GLuint nam static void *wow64_map_buffer( TEB *teb, struct buffer *buffer, GLenum target, GLuint name, GLintptr offset, size_t length, GLbitfield access, void *ptr ) { + const struct opengl_funcs *funcs = teb->glTable; + if (buffer && buffer->map_ptr) { set_gl_error( teb, GL_INVALID_OPERATION ); @@ -2309,10 +2283,14 @@ static void *wow64_map_buffer( TEB *teb, struct buffer *buffer, GLenum target, G if (!buffer) { struct context *ctx = get_current_context( teb, NULL, NULL ); + GLint size; + + if (name) funcs->p_glGetNamedBufferParameteriv( name, GL_BUFFER_SIZE, &size ); + else funcs->p_glGetBufferParameteriv( target, GL_BUFFER_SIZE, &size ); if (!(buffer = calloc( 1, sizeof(*buffer) ))) return NULL; buffer->name = name ? name : get_target_name( teb, target ); - buffer->size = name ? get_named_buffer_param( teb, name, GL_BUFFER_SIZE ) : get_buffer_param( teb, target, GL_BUFFER_SIZE ); + buffer->size = size; rb_put( &ctx->buffers->map, &buffer->name, &buffer->entry ); TRACE( "allocated buffer %p for %u\n", buffer, buffer->name ); } @@ -2349,10 +2327,8 @@ static void *wow64_map_buffer( TEB *teb, struct buffer *buffer, GLenum target, G return buffer->map_ptr; unmap: - if (name) - unmap_named_buffer( teb, name ); - else - unmap_buffer( teb, target ); + if (name) funcs->p_glUnmapNamedBuffer( name ); + else funcs->p_glUnmapBuffer( target ); return 0; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 122 ++++++++++++----------- dlls/opengl32/unix_thunks.c | 192 +++++++++++++++++++++++------------- dlls/opengl32/unix_thunks.h | 59 ++++++----- dlls/opengl32/unix_wgl.c | 163 +++++++++++------------------- 4 files changed, 278 insertions(+), 258 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 34c32b361e9..c6bee6f1ab4 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -179,48 +179,60 @@ my %manual_win_thunks = "wglQueryRendererStringWINE" => 1, "wglSwapBuffers" => 1, ); -my %manual_unix_thunks = - ( - "glClear" => 1, - "glCreateSyncFromCLeventARB" => 1, - "glDebugMessageCallback" => 1, - "glDebugMessageCallbackAMD" => 1, - "glDebugMessageCallbackARB" => 1, - "glDrawBuffer" => 1, - "glDrawBuffers" => 1, - "glDrawPixels" => 1, - "glFenceSync" => 1, - "glFinish" => 1, - "glFlush" => 1, - "glFramebufferDrawBufferEXT" => 1, - "glFramebufferDrawBuffersEXT" => 1, - "glFramebufferReadBufferEXT" => 1, - "glGetBooleanv" => 1, - "glGetDoublev" => 1, - "glGetError" => 1, - "glGetFloatv" => 1, - "glGetFramebufferParameterivEXT" => 1, - "glGetInteger64v" => 1, - "glGetIntegerv" => 1, - "glGetString" => 1, - "glGetUnsignedBytevEXT" => 1, - "glImportSyncEXT" => 1, - "glNamedFramebufferDrawBuffer" => 1, - "glNamedFramebufferDrawBuffers" => 1, - "glNamedFramebufferReadBuffer" => 1, - "glReadBuffer" => 1, - "glReadPixels" => 1, - "glViewport" => 1, - "wglCopyContext" => 1, - "wglCreateContext" => 1, - "wglCreateContextAttribsARB" => 1, - "wglCreatePbufferARB" => 1, - "wglDeleteContext" => 1, - "wglMakeContextCurrentARB" => 1, - "wglMakeCurrent" => 1, - "wglShareLists" => 1, - "wglSwapBuffers" => 1, - ); + +sub manual_unix_thunks($) +{ + my $name = shift; + return "glClear" if $name =~ /^glClear$/; + return "glFinish" if $name =~ /^glFinish$/; + return "glFlush" if $name =~ /^glFlush$/; + return "glViewport" if $name =~ /^glViewport$/; + return "glGetError" if $name =~ /^glGetError$/; + + return "glGetBooleanv" if $name =~ /^glGetBooleanv/; + return "glGetDoublev" if $name =~ /^glGetDoublev/; + return "glGetFloatv" if $name =~ /^glGetFloatv/; + return "glGetInteger64v" if $name =~ /^glGetInteger64v/; + return "glGetIntegerv" if $name =~ /^glGetIntegerv/; + return 0 if $name =~ /^glGetStringi/; + return "glGetString" if $name =~ /^glGetString/; + return "glGetUnsignedBytevEXT" if $name =~ /^glGetUnsignedBytev/; + + return "glCreateSyncFromCLeventARB" if $name =~ /^glCreateSyncFromCLeventARB/; + return "glFenceSync" if $name =~ /^glFenceSync/; + return "glImportSyncEXT" if $name =~ /^glImportSync/; + + return 0 if $name =~ /^glDrawBufferRegion/; + return "glDrawBuffers" if $name =~ /^glDrawBuffers/; + return "glDrawBuffer" if $name =~ /^glDrawBuffer/; + return "glFramebufferDrawBuffersEXT" if $name =~ /^glFramebufferDrawBuffers/; + return "glFramebufferDrawBufferEXT" if $name =~ /^glFramebufferDrawBuffer/; + return "glNamedFramebufferDrawBuffers" if $name =~ /^glNamedFramebufferDrawBuffers/; + return "glNamedFramebufferDrawBuffer" if $name =~ /^glNamedFramebufferDrawBuffer/; + + return 0 if $name =~ /^glReadBufferRegion/; + return "glReadBuffer" if $name =~ /^glReadBuffer/; + return "glFramebufferReadBufferEXT" if $name =~ /^glFramebufferReadBuffer/; + return "glNamedFramebufferReadBuffer" if $name =~ /^glNamedFramebufferReadBuffer/; + + return "glDebugMessageCallbackAMD" if $name =~ /^glDebugMessageCallbackAMD/; + return "glDebugMessageCallback" if $name =~ /^glDebugMessageCallback/; + + return "glDrawPixels" if $name =~ /^glDrawPixels/; + return "glReadPixels" if $name =~ /^glReadPixels/; + return "glGetFramebufferParameteriv" if $name =~ /^glGetFramebufferParameteriv/; + + return "wglCopyContext" if $name =~ /^wglCopyContext/; + return "wglCreateContextAttribsARB" if $name =~ /^wglCreateContextAttribs/; + return "wglCreateContext" if $name =~ /^wglCreateContext/; + return "wglCreatePbufferARB" if $name =~ /^wglCreatePbuffer/; + return "wglDeleteContext" if $name =~ /^wglDeleteContext/; + return "wglGetProcAddress" if $name =~ /^wglGetProcAddress/; + return "wglMakeContextCurrentARB" if $name =~ /^wglMakeContextCurrent/; + return "wglMakeCurrent" if $name =~ /^wglMakeCurrent/; + return "wglShareLists" if $name =~ /^wglShareLists/; + return "wglSwapBuffers" if $name =~ /^wglSwapBuffers/; +} sub hide_default_fbo($) { @@ -399,9 +411,9 @@ sub generate_unix_thunk($$$$) my ($name, $func, $is_wow64, $prefix) = @_; my $func_ret = get_func_ret( $func ); my $wow64_wrap = $is_wow64 ? manual_wow64_wrapper( $name ) : 0; - my $need_wrap = $wow64_wrap || needs_wrapper( $name, $func ); + my $wrapper = $wow64_wrap || needs_wrapper( $name, $func ); my $need_lock = 0; - my $need_funcs = !$need_wrap || ($prefix eq "ext" && $name !~ /^wgl/); + my $need_funcs = !$wrapper || $name !~ /^wgl/; my $teb = $is_wow64 ? "teb" : "params->teb"; my $ret_stat = "return STATUS_SUCCESS;"; my $invalidation = ""; @@ -427,7 +439,7 @@ sub generate_unix_thunk($$$$) $use_context = @{$func->[1]} && get_arg_type( ${$func->[1]}[0] ) eq "HGLRC"; $ret_expr = "params->ret = " if !is_void_func( $func ); - $call_args .= " $teb," if $need_wrap; + $call_args .= " $teb," if $wrapper; if ($is_wow64) { my $need_manual_thunk = 0; @@ -507,7 +519,7 @@ sub generate_unix_thunk($$$$) } } $ret .= " } *params = args;\n"; - if (!$need_wrap && $need_manual_thunk) + if (!$wrapper && $need_manual_thunk) { $ret .= " FIXME( \"params %p stub!\\n\", params );\n"; $ret .= " return STATUS_NOT_IMPLEMENTED;\n"; @@ -524,7 +536,7 @@ sub generate_unix_thunk($$$$) : " buffer = invalidate_buffer_target( $teb, params->target );\n"; $output_conv .= " if (buffer) free_buffer( funcs, buffer );\n"; } - $ret .= " TEB *teb = get_teb64( params->teb );\n" if $need_wrap || (!$use_dc && !$use_pbuffer && !$use_context); + $ret .= " TEB *teb = get_teb64( params->teb );\n" if $wrapper || (!$use_dc && !$use_pbuffer && !$use_context); } else { @@ -593,10 +605,11 @@ sub generate_unix_thunk($$$$) { $ret .= "wow64_$wow64_wrap($call_args funcs->p_$name );\n"; } - elsif ($need_wrap) + elsif ($wrapper) { + $call_args .= " funcs->p_$name," if $name !~ /^wgl/; $call_args =~ s/,$/ /; - $ret .= "wrap_$name($call_args);\n"; + $ret .= "wrap_$wrapper($call_args);\n"; } else { @@ -651,10 +664,10 @@ sub generate_wrapper_declaration($$$) } $ret .= " " . $arg->textContent() . ","; } - $ret .= " PFN_$name func," if $is_wow64; $ret .= " HPBUFFERARB handle," if $ret_type =~ /HPBUFFERARB/; $ret .= " HGLRC handle," if $ret_type =~ /HGLRC/; $ret .= " GLsync handle," if $ret_type =~ /GLsync/; + $ret .= " PFN_$name func," if $name !~ /^wgl/; $ret =~ s/,$/ /; $ret .= ");\n"; return $ret; @@ -1063,8 +1076,7 @@ sub needs_wrapper($$) { my ($name, $func) = @_; return 0 if defined $manual_win_functions{$name}; - return 1 if defined $manual_unix_thunks{$name}; - return 0; + return manual_unix_thunks( $name ); } sub add_extension($) @@ -1664,18 +1676,18 @@ print OUT "typedef ULONG PTR32;\n\n"; foreach (sort keys %wgl_functions) { - next if !needs_wrapper( $_, $wgl_functions{$_} ); + next unless needs_wrapper( $_, $wgl_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $wgl_functions{$_}, 0); } foreach (sort keys %norm_functions) { - next if !needs_wrapper( $_, $norm_functions{$_} ); + next unless needs_wrapper( $_, $norm_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $norm_functions{$_}, 0); } foreach (sort keys %ext_functions) { next unless is_exposed_function( $ext_functions{$_} ); - next if !needs_wrapper( $_, $ext_functions{$_} ); + next unless needs_wrapper( $_, $ext_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $ext_functions{$_}, 0); } diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 7008395930e..d9874a9803c 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -194,7 +194,9 @@ static NTSTATUS gl_glCallLists( void *args ) static NTSTATUS gl_glClear( void *args ) { struct glClear_params *params = args; - wrap_glClear( params->teb, params->mask ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glClear) return STATUS_NOT_IMPLEMENTED; + wrap_glClear( params->teb, params->mask, funcs->p_glClear ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -757,7 +759,9 @@ static NTSTATUS gl_glDrawArrays( void *args ) static NTSTATUS gl_glDrawBuffer( void *args ) { struct glDrawBuffer_params *params = args; - wrap_glDrawBuffer( params->teb, params->buf ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glDrawBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawBuffer( params->teb, params->buf, funcs->p_glDrawBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -775,7 +779,9 @@ static NTSTATUS gl_glDrawElements( void *args ) static NTSTATUS gl_glDrawPixels( void *args ) { struct glDrawPixels_params *params = args; - wrap_glDrawPixels( params->teb, params->width, params->height, params->format, params->type, params->pixels ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glDrawPixels) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawPixels( params->teb, params->width, params->height, params->format, params->type, params->pixels, funcs->p_glDrawPixels ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -983,7 +989,9 @@ static NTSTATUS gl_glFeedbackBuffer( void *args ) static NTSTATUS gl_glFinish( void *args ) { struct glFinish_params *params = args; - wrap_glFinish( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glFinish) return STATUS_NOT_IMPLEMENTED; + wrap_glFinish( params->teb, funcs->p_glFinish ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -991,7 +999,9 @@ static NTSTATUS gl_glFinish( void *args ) static NTSTATUS gl_glFlush( void *args ) { struct glFlush_params *params = args; - wrap_glFlush( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glFlush) return STATUS_NOT_IMPLEMENTED; + wrap_glFlush( params->teb, funcs->p_glFlush ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -1079,7 +1089,9 @@ static NTSTATUS gl_glGenTextures( void *args ) static NTSTATUS gl_glGetBooleanv( void *args ) { struct glGetBooleanv_params *params = args; - wrap_glGetBooleanv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetBooleanv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetBooleanv( params->teb, params->pname, params->data, funcs->p_glGetBooleanv ); return STATUS_SUCCESS; } @@ -1095,28 +1107,36 @@ static NTSTATUS gl_glGetClipPlane( void *args ) static NTSTATUS gl_glGetDoublev( void *args ) { struct glGetDoublev_params *params = args; - wrap_glGetDoublev( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetDoublev) return STATUS_NOT_IMPLEMENTED; + wrap_glGetDoublev( params->teb, params->pname, params->data, funcs->p_glGetDoublev ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetError( void *args ) { struct glGetError_params *params = args; - params->ret = wrap_glGetError( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetError) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetError( params->teb, funcs->p_glGetError ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetFloatv( void *args ) { struct glGetFloatv_params *params = args; - wrap_glGetFloatv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetFloatv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetFloatv( params->teb, params->pname, params->data, funcs->p_glGetFloatv ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetIntegerv( void *args ) { struct glGetIntegerv_params *params = args; - wrap_glGetIntegerv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetIntegerv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetIntegerv( params->teb, params->pname, params->data, funcs->p_glGetIntegerv ); return STATUS_SUCCESS; } @@ -1231,7 +1251,9 @@ static NTSTATUS gl_glGetPolygonStipple( void *args ) static NTSTATUS gl_glGetString( void *args ) { struct glGetString_params *params = args; - params->ret = wrap_glGetString( params->teb, params->name ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetString) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetString( params->teb, params->name, funcs->p_glGetString ); return STATUS_SUCCESS; } @@ -2405,7 +2427,9 @@ static NTSTATUS gl_glRasterPos4sv( void *args ) static NTSTATUS gl_glReadBuffer( void *args ) { struct glReadBuffer_params *params = args; - wrap_glReadBuffer( params->teb, params->src ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glReadBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glReadBuffer( params->teb, params->src, funcs->p_glReadBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -2413,8 +2437,10 @@ static NTSTATUS gl_glReadBuffer( void *args ) static NTSTATUS gl_glReadPixels( void *args ) { struct glReadPixels_params *params = args; + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glReadPixels) return STATUS_NOT_IMPLEMENTED; resolve_default_fbo( params->teb, TRUE ); - wrap_glReadPixels( params->teb, params->x, params->y, params->width, params->height, params->format, params->type, params->pixels ); + wrap_glReadPixels( params->teb, params->x, params->y, params->width, params->height, params->format, params->type, params->pixels, funcs->p_glReadPixels ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -3392,7 +3418,9 @@ static NTSTATUS gl_glVertexPointer( void *args ) static NTSTATUS gl_glViewport( void *args ) { struct glViewport_params *params = args; - wrap_glViewport( params->teb, params->x, params->y, params->width, params->height ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glViewport) return STATUS_NOT_IMPLEMENTED; + wrap_glViewport( params->teb, params->x, params->y, params->width, params->height, funcs->p_glViewport ); set_context_attribute( params->teb, GL_VIEWPORT, ¶ms->x, 2 * sizeof(GLint) + 2 * sizeof(GLsizei) ); return STATUS_SUCCESS; } @@ -6826,7 +6854,7 @@ static NTSTATUS ext_glCreateSyncFromCLeventARB( void *args ) struct glCreateSyncFromCLeventARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCreateSyncFromCLeventARB) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glCreateSyncFromCLeventARB( params->teb, params->context, params->event, params->flags, params->ret ); + params->ret = wrap_glCreateSyncFromCLeventARB( params->teb, params->context, params->event, params->flags, params->ret, funcs->p_glCreateSyncFromCLeventARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6896,7 +6924,7 @@ static NTSTATUS ext_glDebugMessageCallback( void *args ) struct glDebugMessageCallback_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallback) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallback ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6906,7 +6934,7 @@ static NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) struct glDebugMessageCallbackAMD_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallbackAMD) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallbackAMD ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6916,7 +6944,7 @@ static NTSTATUS ext_glDebugMessageCallbackARB( void *args ) struct glDebugMessageCallbackARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallbackARB) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackARB( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallbackARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7756,7 +7784,7 @@ static NTSTATUS ext_glDrawBuffers( void *args ) struct glDrawBuffers_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glDrawBuffers( params->teb, params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffers ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7766,7 +7794,7 @@ static NTSTATUS ext_glDrawBuffersARB( void *args ) struct glDrawBuffersARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffersARB) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersARB( params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffersARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7776,7 +7804,7 @@ static NTSTATUS ext_glDrawBuffersATI( void *args ) struct glDrawBuffersATI_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffersATI) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersATI( params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffersATI ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8516,7 +8544,7 @@ static NTSTATUS ext_glFenceSync( void *args ) struct glFenceSync_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFenceSync) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glFenceSync( params->teb, params->condition, params->flags, params->ret ); + params->ret = wrap_glFenceSync( params->teb, params->condition, params->flags, params->ret, funcs->p_glFenceSync ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9026,7 +9054,7 @@ static NTSTATUS ext_glFramebufferDrawBufferEXT( void *args ) struct glFramebufferDrawBufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferDrawBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBufferEXT( params->teb, params->framebuffer, params->mode ); + wrap_glFramebufferDrawBufferEXT( params->teb, params->framebuffer, params->mode, funcs->p_glFramebufferDrawBufferEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9036,7 +9064,7 @@ static NTSTATUS ext_glFramebufferDrawBuffersEXT( void *args ) struct glFramebufferDrawBuffersEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferDrawBuffersEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBuffersEXT( params->teb, params->framebuffer, params->n, params->bufs ); + wrap_glFramebufferDrawBuffersEXT( params->teb, params->framebuffer, params->n, params->bufs, funcs->p_glFramebufferDrawBuffersEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9076,7 +9104,7 @@ static NTSTATUS ext_glFramebufferReadBufferEXT( void *args ) struct glFramebufferReadBufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferReadBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferReadBufferEXT( params->teb, params->framebuffer, params->mode ); + wrap_glFramebufferReadBufferEXT( params->teb, params->framebuffer, params->mode, funcs->p_glFramebufferReadBufferEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -10534,7 +10562,7 @@ static NTSTATUS ext_glGetFramebufferParameteriv( void *args ) struct glGetFramebufferParameteriv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameteriv) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameteriv( params->target, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->target, params->pname, params->params, funcs->p_glGetFramebufferParameteriv ); return STATUS_SUCCESS; } @@ -10543,7 +10571,7 @@ static NTSTATUS ext_glGetFramebufferParameterivEXT( void *args ) struct glGetFramebufferParameterivEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameterivEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetFramebufferParameterivEXT( params->teb, params->framebuffer, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->framebuffer, params->pname, params->params, funcs->p_glGetFramebufferParameterivEXT ); return STATUS_SUCCESS; } @@ -10552,7 +10580,7 @@ static NTSTATUS ext_glGetFramebufferParameterivMESA( void *args ) struct glGetFramebufferParameterivMESA_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameterivMESA) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameterivMESA( params->target, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->target, params->pname, params->params, funcs->p_glGetFramebufferParameterivMESA ); return STATUS_SUCCESS; } @@ -10714,7 +10742,7 @@ static NTSTATUS ext_glGetInteger64v( void *args ) struct glGetInteger64v_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetInteger64v) return STATUS_NOT_IMPLEMENTED; - wrap_glGetInteger64v( params->teb, params->pname, params->data ); + wrap_glGetInteger64v( params->teb, params->pname, params->data, funcs->p_glGetInteger64v ); return STATUS_SUCCESS; } @@ -12884,7 +12912,7 @@ static NTSTATUS ext_glGetUnsignedBytevEXT( void *args ) struct glGetUnsignedBytevEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetUnsignedBytevEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetUnsignedBytevEXT( params->teb, params->pname, params->data ); + wrap_glGetUnsignedBytevEXT( params->teb, params->pname, params->data, funcs->p_glGetUnsignedBytevEXT ); return STATUS_SUCCESS; } @@ -13849,7 +13877,7 @@ static NTSTATUS ext_glImportSyncEXT( void *args ) struct glImportSyncEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glImportSyncEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glImportSyncEXT( params->teb, params->external_sync_type, params->external_sync, params->flags, params->ret ); + params->ret = wrap_glImportSyncEXT( params->teb, params->external_sync_type, params->external_sync, params->flags, params->ret, funcs->p_glImportSyncEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17679,7 +17707,7 @@ static NTSTATUS ext_glNamedFramebufferDrawBuffer( void *args ) struct glNamedFramebufferDrawBuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffer( params->teb, params->framebuffer, params->buf ); + wrap_glNamedFramebufferDrawBuffer( params->teb, params->framebuffer, params->buf, funcs->p_glNamedFramebufferDrawBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17689,7 +17717,7 @@ static NTSTATUS ext_glNamedFramebufferDrawBuffers( void *args ) struct glNamedFramebufferDrawBuffers_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffers( params->teb, params->framebuffer, params->n, params->bufs ); + wrap_glNamedFramebufferDrawBuffers( params->teb, params->framebuffer, params->n, params->bufs, funcs->p_glNamedFramebufferDrawBuffers ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17723,7 +17751,7 @@ static NTSTATUS ext_glNamedFramebufferReadBuffer( void *args ) struct glNamedFramebufferReadBuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferReadBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferReadBuffer( params->teb, params->framebuffer, params->src ); + wrap_glNamedFramebufferReadBuffer( params->teb, params->framebuffer, params->src, funcs->p_glNamedFramebufferReadBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -33951,7 +33979,9 @@ static NTSTATUS wow64_gl_glClear( void *args ) GLbitfield mask; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glClear( teb, params->mask ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glClear) return STATUS_NOT_IMPLEMENTED; + wrap_glClear( teb, params->mask, funcs->p_glClear ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -34882,7 +34912,9 @@ static NTSTATUS wow64_gl_glDrawBuffer( void *args ) GLenum buf; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glDrawBuffer( teb, params->buf ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glDrawBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawBuffer( teb, params->buf, funcs->p_glDrawBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -34917,7 +34949,9 @@ static NTSTATUS wow64_gl_glDrawPixels( void *args ) PTR32 pixels; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glDrawPixels( teb, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glDrawPixels) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawPixels( teb, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels), funcs->p_glDrawPixels ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35239,7 +35273,9 @@ static NTSTATUS wow64_gl_glFinish( void *args ) PTR32 teb; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glFinish( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glFinish) return STATUS_NOT_IMPLEMENTED; + wrap_glFinish( teb, funcs->p_glFinish ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35251,7 +35287,9 @@ static NTSTATUS wow64_gl_glFlush( void *args ) PTR32 teb; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glFlush( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glFlush) return STATUS_NOT_IMPLEMENTED; + wrap_glFlush( teb, funcs->p_glFlush ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35396,7 +35434,9 @@ static NTSTATUS wow64_gl_glGetBooleanv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetBooleanv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetBooleanv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetBooleanv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetBooleanv ); return STATUS_SUCCESS; } @@ -35424,7 +35464,9 @@ static NTSTATUS wow64_gl_glGetDoublev( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetDoublev( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetDoublev) return STATUS_NOT_IMPLEMENTED; + wrap_glGetDoublev( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetDoublev ); return STATUS_SUCCESS; } @@ -35436,7 +35478,9 @@ static NTSTATUS wow64_gl_glGetError( void *args ) GLenum ret; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wrap_glGetError( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetError) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetError( teb, funcs->p_glGetError ); return STATUS_SUCCESS; } @@ -35449,7 +35493,9 @@ static NTSTATUS wow64_gl_glGetFloatv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetFloatv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetFloatv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetFloatv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetFloatv ); return STATUS_SUCCESS; } @@ -35462,7 +35508,9 @@ static NTSTATUS wow64_gl_glGetIntegerv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetIntegerv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetIntegerv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetIntegerv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetIntegerv ); return STATUS_SUCCESS; } @@ -35664,7 +35712,9 @@ static NTSTATUS wow64_gl_glGetString( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const GLubyte *ret; - ret = wrap_glGetString( teb, params->name ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetString) return STATUS_NOT_IMPLEMENTED; + ret = wrap_glGetString( teb, params->name, funcs->p_glGetString ); return return_wow64_string( ret, ¶ms->ret ); } @@ -37578,7 +37628,9 @@ static NTSTATUS wow64_gl_glReadBuffer( void *args ) GLenum src; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glReadBuffer( teb, params->src ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glReadBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glReadBuffer( teb, params->src, funcs->p_glReadBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -37597,8 +37649,10 @@ static NTSTATUS wow64_gl_glReadPixels( void *args ) PTR32 pixels; } *params = args; TEB *teb = get_teb64( params->teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glReadPixels) return STATUS_NOT_IMPLEMENTED; resolve_default_fbo( teb, TRUE ); - wrap_glReadPixels( teb, params->x, params->y, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels) ); + wrap_glReadPixels( teb, params->x, params->y, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels), funcs->p_glReadPixels ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -39219,7 +39273,9 @@ static NTSTATUS wow64_gl_glViewport( void *args ) GLsizei height; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glViewport( teb, params->x, params->y, params->width, params->height ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glViewport) return STATUS_NOT_IMPLEMENTED; + wrap_glViewport( teb, params->x, params->y, params->width, params->height, funcs->p_glViewport ); set_context_attribute( teb, GL_VIEWPORT, ¶ms->x, 2 * sizeof(GLint) + 2 * sizeof(GLsizei) ); return STATUS_SUCCESS; } @@ -45478,7 +45534,7 @@ static NTSTATUS wow64_ext_glCreateSyncFromCLeventARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCreateSyncFromCLeventARB) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glCreateSyncFromCLeventARB( teb, ULongToPtr(params->context), ULongToPtr(params->event), params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glCreateSyncFromCLeventARB( teb, ULongToPtr(params->context), ULongToPtr(params->event), params->flags, UlongToHandle( params->ret ), funcs->p_glCreateSyncFromCLeventARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45590,7 +45646,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallback( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallback) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallback ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45606,7 +45662,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallbackAMD( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallbackAMD) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackAMD( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallbackAMD( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallbackAMD ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45622,7 +45678,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallbackARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallbackARB) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackARB( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallbackARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47024,7 +47080,7 @@ static NTSTATUS wow64_ext_glDrawBuffers( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffers ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47040,7 +47096,7 @@ static NTSTATUS wow64_ext_glDrawBuffersARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffersARB) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersARB( params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffersARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47056,7 +47112,7 @@ static NTSTATUS wow64_ext_glDrawBuffersATI( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffersATI) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersATI( params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffersATI ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48298,7 +48354,7 @@ static NTSTATUS wow64_ext_glFenceSync( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFenceSync) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glFenceSync( teb, params->condition, params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glFenceSync( teb, params->condition, params->flags, UlongToHandle( params->ret ), funcs->p_glFenceSync ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49104,7 +49160,7 @@ static NTSTATUS wow64_ext_glFramebufferDrawBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferDrawBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBufferEXT( teb, params->framebuffer, params->mode ); + wrap_glFramebufferDrawBufferEXT( teb, params->framebuffer, params->mode, funcs->p_glFramebufferDrawBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49121,7 +49177,7 @@ static NTSTATUS wow64_ext_glFramebufferDrawBuffersEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferDrawBuffersEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBuffersEXT( teb, params->framebuffer, params->n, ULongToPtr(params->bufs) ); + wrap_glFramebufferDrawBuffersEXT( teb, params->framebuffer, params->n, ULongToPtr(params->bufs), funcs->p_glFramebufferDrawBuffersEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49185,7 +49241,7 @@ static NTSTATUS wow64_ext_glFramebufferReadBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferReadBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferReadBufferEXT( teb, params->framebuffer, params->mode ); + wrap_glFramebufferReadBufferEXT( teb, params->framebuffer, params->mode, funcs->p_glFramebufferReadBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -51788,7 +51844,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameteriv( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameteriv) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameteriv( params->target, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameteriv ); return STATUS_SUCCESS; } @@ -51804,7 +51860,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameterivEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameterivEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetFramebufferParameterivEXT( teb, params->framebuffer, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->framebuffer, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameterivEXT ); return STATUS_SUCCESS; } @@ -51820,7 +51876,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameterivMESA( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameterivMESA) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameterivMESA( params->target, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameterivMESA ); return STATUS_SUCCESS; } @@ -52111,7 +52167,7 @@ static NTSTATUS wow64_ext_glGetInteger64v( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetInteger64v) return STATUS_NOT_IMPLEMENTED; - wrap_glGetInteger64v( teb, params->pname, ULongToPtr(params->data) ); + wrap_glGetInteger64v( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetInteger64v ); return STATUS_SUCCESS; } @@ -56115,7 +56171,7 @@ static NTSTATUS wow64_ext_glGetUnsignedBytevEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetUnsignedBytevEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetUnsignedBytevEXT( teb, params->pname, ULongToPtr(params->data) ); + wrap_glGetUnsignedBytevEXT( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetUnsignedBytevEXT ); return STATUS_SUCCESS; } @@ -57849,7 +57905,7 @@ static NTSTATUS wow64_ext_glImportSyncEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glImportSyncEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glImportSyncEXT( teb, params->external_sync_type, (GLintptr)ULongToPtr(params->external_sync), params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glImportSyncEXT( teb, params->external_sync_type, (GLintptr)ULongToPtr(params->external_sync), params->flags, UlongToHandle( params->ret ), funcs->p_glImportSyncEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64513,7 +64569,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferDrawBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffer( teb, params->framebuffer, params->buf ); + wrap_glNamedFramebufferDrawBuffer( teb, params->framebuffer, params->buf, funcs->p_glNamedFramebufferDrawBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64530,7 +64586,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferDrawBuffers( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffers( teb, params->framebuffer, params->n, ULongToPtr(params->bufs) ); + wrap_glNamedFramebufferDrawBuffers( teb, params->framebuffer, params->n, ULongToPtr(params->bufs), funcs->p_glNamedFramebufferDrawBuffers ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64584,7 +64640,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferReadBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferReadBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferReadBuffer( teb, params->framebuffer, params->src ); + wrap_glNamedFramebufferReadBuffer( teb, params->framebuffer, params->src, funcs->p_glNamedFramebufferReadBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } diff --git a/dlls/opengl32/unix_thunks.h b/dlls/opengl32/unix_thunks.h index 852c0823bdd..02cf89eedbf 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -8,36 +8,35 @@ extern BOOL wrap_wglDeleteContext( TEB *teb, HGLRC oldContext ); extern BOOL wrap_wglMakeCurrent( TEB *teb, HDC hDc, HGLRC newContext ); extern BOOL wrap_wglShareLists( TEB *teb, HGLRC hrcSrvShare, HGLRC hrcSrvSource ); extern BOOL wrap_wglSwapBuffers( TEB *teb, HDC hdc ); -extern void wrap_glClear( TEB *teb, GLbitfield mask ); -extern void wrap_glDrawBuffer( TEB *teb, GLenum buf ); -extern void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels ); -extern void wrap_glFinish( TEB *teb ); -extern void wrap_glFlush( TEB *teb ); -extern void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data ); -extern void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data ); -extern GLenum wrap_glGetError( TEB *teb ); -extern void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data ); -extern void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ); -extern const GLubyte *wrap_glGetString( TEB *teb, GLenum name ); -extern void wrap_glReadBuffer( TEB *teb, GLenum src ); -extern void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels ); -extern void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height ); -extern GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync handle ); -extern void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *userParam ); -extern void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *userParam ); -extern void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *userParam ); -extern void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ); -extern GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync handle ); -extern void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode ); -extern void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs ); -extern void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode ); -extern void wrap_glGetFramebufferParameterivEXT( TEB *teb, GLuint framebuffer, GLenum pname, GLint *params ); -extern void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data ); -extern void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ); -extern GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync handle ); -extern void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint framebuffer, GLenum buf ); -extern void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs ); -extern void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint framebuffer, GLenum src ); +extern void wrap_glClear( TEB *teb, GLbitfield mask, PFN_glClear func ); +extern void wrap_glDrawBuffer( TEB *teb, GLenum buf, PFN_glDrawBuffer func ); +extern void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels, PFN_glDrawPixels func ); +extern void wrap_glFinish( TEB *teb, PFN_glFinish func ); +extern void wrap_glFlush( TEB *teb, PFN_glFlush func ); +extern void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data, PFN_glGetBooleanv func ); +extern void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data, PFN_glGetDoublev func ); +extern GLenum wrap_glGetError( TEB *teb, PFN_glGetError func ); +extern void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data, PFN_glGetFloatv func ); +extern void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data, PFN_glGetIntegerv func ); +extern const GLubyte *wrap_glGetString( TEB *teb, GLenum name, PFN_glGetString func ); +extern void wrap_glReadBuffer( TEB *teb, GLenum src, PFN_glReadBuffer func ); +extern void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels, PFN_glReadPixels func ); +extern void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, PFN_glViewport func ); +extern GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync handle, PFN_glCreateSyncFromCLeventARB func ); +extern void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *userParam, PFN_glDebugMessageCallback func ); +extern void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *userParam, PFN_glDebugMessageCallbackAMD func ); +extern void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs, PFN_glDrawBuffers func ); +extern GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync handle, PFN_glFenceSync func ); +extern void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode, PFN_glFramebufferDrawBufferEXT func ); +extern void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs, PFN_glFramebufferDrawBuffersEXT func ); +extern void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode, PFN_glFramebufferReadBufferEXT func ); +extern void wrap_glGetFramebufferParameteriv( TEB *teb, GLenum target, GLenum pname, GLint *params, PFN_glGetFramebufferParameteriv func ); +extern void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data, PFN_glGetInteger64v func ); +extern void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data, PFN_glGetUnsignedBytevEXT func ); +extern GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync handle, PFN_glImportSyncEXT func ); +extern void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint framebuffer, GLenum buf, PFN_glNamedFramebufferDrawBuffer func ); +extern void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs, PFN_glNamedFramebufferDrawBuffers func ); +extern void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint framebuffer, GLenum src, PFN_glNamedFramebufferReadBuffer func ); extern HGLRC wrap_wglCreateContextAttribsARB( TEB *teb, HDC hDC, HGLRC hShareContext, const int *attribList, HGLRC handle ); extern HPBUFFERARB wrap_wglCreatePbufferARB( TEB *teb, HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList, HPBUFFERARB handle ); extern BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC hDrawDC, HDC hReadDC, HGLRC hglrc ); diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 47dfb547881..e5386290538 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -803,7 +803,7 @@ static BOOL get_integer( TEB *teb, GLenum pname, GLint *data ) return get_default_fbo_integer( ctx, draw, read, pname, data ); } -void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ) +void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data, PFN_glGetUnsignedBytevEXT p_glGetUnsignedBytevEXT ) { const struct opengl_funcs *funcs = teb->glTable; @@ -815,15 +815,15 @@ void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ) return; } - return funcs->p_glGetUnsignedBytevEXT( pname, data ); + return p_glGetUnsignedBytevEXT( pname, data ); } -const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) +const GLubyte *wrap_glGetString( TEB *teb, GLenum name, PFN_glGetString p_glGetString ) { const struct opengl_funcs *funcs = teb->glTable; const GLubyte *ret; - if ((ret = funcs->p_glGetString( name ))) + if ((ret = p_glGetString( name ))) { if (name == GL_VENDOR && funcs->p_wglQueryCurrentRendererStringWINE) { @@ -1279,48 +1279,42 @@ static void flush_context( TEB *teb, void (*flush)(void) ) } } -void wrap_glFinish( TEB *teb ) +void wrap_glFinish( TEB *teb, PFN_glFinish p_glFinish ) { - const struct opengl_funcs *funcs = teb->glTable; resolve_default_fbo( teb, FALSE ); - flush_context( teb, funcs->p_glFinish ); + flush_context( teb, p_glFinish ); } -void wrap_glFlush( TEB *teb ) +void wrap_glFlush( TEB *teb, PFN_glFlush p_glFlush ) { - const struct opengl_funcs *funcs = teb->glTable; resolve_default_fbo( teb, FALSE ); - flush_context( teb, funcs->p_glFlush ); + flush_context( teb, p_glFlush ); } -void wrap_glClear( TEB *teb, GLbitfield mask ) +void wrap_glClear( TEB *teb, GLbitfield mask, PFN_glClear p_glClear ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glClear( mask ); + p_glClear( mask ); resolve_default_fbo( teb, FALSE ); } -void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels ) +void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels, PFN_glDrawPixels p_glDrawPixels ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glDrawPixels( width, height, format, type, pixels ); + p_glDrawPixels( width, height, format, type, pixels ); resolve_default_fbo( teb, FALSE ); } -void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels ) +void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels, PFN_glReadPixels p_glReadPixels ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glReadPixels( x, y, width, height, format, type, pixels ); + p_glReadPixels( x, y, width, height, format, type, pixels ); } -void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height ) +void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, PFN_glViewport p_glViewport ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glViewport( x, y, width, height ); + p_glViewport( x, y, width, height ); resolve_default_fbo( teb, FALSE ); } @@ -1427,7 +1421,6 @@ BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC return FALSE; } - if (!funcs->p_wglMakeContextCurrentARB) return FALSE; if (!funcs->p_wglMakeContextCurrentARB( draw_hdc, read_hdc, client_context )) return FALSE; if (prev) prev->tid = 0; make_context_current( teb, funcs, draw_hdc, read_hdc, client_context, ctx ); @@ -1482,42 +1475,21 @@ static void gl_debug_message_callback( GLenum source, GLenum type, GLuint id, GL free( params ); } -void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user ) +void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user, PFN_glDebugMessageCallback p_glDebugMessageCallback ) { struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallback) return; - ctx->debug_callback = (UINT_PTR)callback; ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallback( gl_debug_message_callback, ctx ); + p_glDebugMessageCallback( gl_debug_message_callback, ctx ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); } -void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user ) +void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user, PFN_glDebugMessageCallbackAMD p_glDebugMessageCallbackAMD ) { struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallbackAMD) return; - ctx->debug_callback = (UINT_PTR)callback; ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallbackAMD( gl_debug_message_callback, ctx ); - set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); -} - -void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *user ) -{ - struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallbackARB) return; - - ctx->debug_callback = (UINT_PTR)callback; - ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallbackARB( gl_debug_message_callback, ctx ); + p_glDebugMessageCallbackAMD( gl_debug_message_callback, ctx ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); } @@ -1649,9 +1621,8 @@ static GLenum *set_default_fbo_draw_buffers( struct context *ctx, struct opengl_ return dst; } -void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ) +void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs, PFN_glDrawBuffers p_glDrawBuffers ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1659,12 +1630,11 @@ void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ) if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glDrawBuffers( n, bufs ); + p_glDrawBuffers( n, bufs ); } -void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs ) +void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs, PFN_glFramebufferDrawBuffersEXT p_glFramebufferDrawBuffersEXT ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1672,12 +1642,11 @@ void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GL if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glFramebufferDrawBuffersEXT( fbo, n, bufs ); + p_glFramebufferDrawBuffersEXT( fbo, n, bufs ); } -void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs ) +void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs, PFN_glNamedFramebufferDrawBuffers p_glNamedFramebufferDrawBuffers ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1685,7 +1654,7 @@ void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glNamedFramebufferDrawBuffers( fbo, n, bufs ); + p_glNamedFramebufferDrawBuffers( fbo, n, bufs ); } static GLenum set_default_fbo_draw_buffer( struct context *ctx, struct opengl_drawable *draw, GLint src ) @@ -1701,40 +1670,37 @@ static GLenum set_default_fbo_draw_buffer( struct context *ctx, struct opengl_dr return dst; } -void wrap_glDrawBuffer( TEB *teb, GLenum buf ) +void wrap_glDrawBuffer( TEB *teb, GLenum buf, PFN_glDrawBuffer p_glDrawBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo) buf = set_default_fbo_draw_buffer( ctx, draw, buf ); - funcs->p_glDrawBuffer( buf ); + p_glDrawBuffer( buf ); } -void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint fbo, GLenum mode ) +void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint fbo, GLenum mode, PFN_glFramebufferDrawBufferEXT p_glFramebufferDrawBufferEXT ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) mode = set_default_fbo_draw_buffer( ctx, draw, mode ); - funcs->p_glFramebufferDrawBufferEXT( fbo, mode ); + p_glFramebufferDrawBufferEXT( fbo, mode ); } -void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint fbo, GLenum buf ) +void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint fbo, GLenum buf, PFN_glNamedFramebufferDrawBuffer p_glNamedFramebufferDrawBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) buf = set_default_fbo_draw_buffer( ctx, draw, buf ); - funcs->p_glNamedFramebufferDrawBuffer( fbo, buf ); + p_glNamedFramebufferDrawBuffer( fbo, buf ); } static GLenum set_default_fbo_read_buffer( struct context *ctx, struct opengl_drawable *read, GLint src ) @@ -1749,96 +1715,86 @@ static GLenum set_default_fbo_read_buffer( struct context *ctx, struct opengl_dr return dst; } -void wrap_glReadBuffer( TEB *teb, GLenum src ) +void wrap_glReadBuffer( TEB *teb, GLenum src, PFN_glReadBuffer p_glReadBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !ctx->read_fbo) src = set_default_fbo_read_buffer( ctx, read, src ); - funcs->p_glReadBuffer( src ); + p_glReadBuffer( src ); } -void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint fbo, GLenum mode ) +void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint fbo, GLenum mode, PFN_glFramebufferReadBufferEXT p_glFramebufferReadBufferEXT ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !fbo) mode = set_default_fbo_read_buffer( ctx, read, mode ); - funcs->p_glFramebufferReadBufferEXT( fbo, mode ); + p_glFramebufferReadBufferEXT( fbo, mode ); } -void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint fbo, GLenum src ) +void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint fbo, GLenum src, PFN_glNamedFramebufferReadBuffer p_glNamedFramebufferReadBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !fbo) src = set_default_fbo_read_buffer( ctx, read, src ); - funcs->p_glNamedFramebufferReadBuffer( fbo, src ); + p_glNamedFramebufferReadBuffer( fbo, src ); } -void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ) +void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data, PFN_glGetIntegerv p_glGetIntegerv ) { - const struct opengl_funcs *funcs = teb->glTable; if (get_integer( teb, pname, data )) return; - else funcs->p_glGetIntegerv( pname, data ); + else p_glGetIntegerv( pname, data ); } -void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data ) +void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data, PFN_glGetBooleanv p_glGetBooleanv ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = !!value; - else funcs->p_glGetBooleanv( pname, data ); + else p_glGetBooleanv( pname, data ); } -void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data ) +void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data, PFN_glGetDoublev p_glGetDoublev ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetDoublev( pname, data ); + else p_glGetDoublev( pname, data ); } -void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data ) +void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data, PFN_glGetFloatv p_glGetFloatv ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetFloatv( pname, data ); + else p_glGetFloatv( pname, data ); } -void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data ) +void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data, PFN_glGetInteger64v p_glGetInteger64v ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetInteger64v( pname, data ); + else p_glGetInteger64v( pname, data ); } -void wrap_glGetFramebufferParameterivEXT( TEB *teb, GLuint fbo, GLenum pname, GLint *params ) +void wrap_glGetFramebufferParameteriv( TEB *teb, GLuint fbo, GLenum pname, GLint *params, PFN_glGetFramebufferParameteriv p_glGetFramebufferParameteriv ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw, *read; struct context *ctx; if ((ctx = get_current_context( teb, &draw, &read )) && !fbo && (fbo = draw->draw_fbo)) if (get_default_fbo_integer( ctx, draw, read, pname, params )) return; - funcs->p_glGetFramebufferParameterivEXT( fbo, pname, params ); + p_glGetFramebufferParameteriv( fbo, pname, params ); } -GLenum wrap_glGetError( TEB *teb ) +GLenum wrap_glGetError( TEB *teb, PFN_glGetError p_glGetError ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_client_context *client; GLenum error, wrapped; struct context *ctx; @@ -1846,46 +1802,43 @@ GLenum wrap_glGetError( TEB *teb ) if (!(ctx = get_current_context( teb, NULL, NULL ))) return GL_INVALID_OPERATION; if (!(client = opengl_client_context_from_client( ctx->base.client_context ))) return GL_INVALID_OPERATION; - error = funcs->p_glGetError(); + error = p_glGetError(); wrapped = client->last_error; client->last_error = GL_NO_ERROR; return wrapped ? wrapped : error; } -GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync client_sync, PFN_glCreateSyncFromCLeventARB p_glCreateSyncFromCLeventARB ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; FIXME( "stub!\n" ); - if (!(sync = funcs->p_glCreateSyncFromCLeventARB( context, event, flags ))) return NULL; + if (!(sync = p_glCreateSyncFromCLeventARB( context, event, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; } -GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync client_sync, PFN_glFenceSync p_glFenceSync ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; TRACE( "condition %#x, flags %#x, client_sync %p\n", condition, flags, client_sync ); - if (!(sync = funcs->p_glFenceSync( condition, flags ))) return NULL; + if (!(sync = p_glFenceSync( condition, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; } -GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync client_sync, PFN_glImportSyncEXT p_glImportSyncEXT ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; FIXME( "stub!\n" ); - if (!(sync = funcs->p_glImportSyncEXT( external_sync_type, external_sync, flags ))) return NULL; + if (!(sync = p_glImportSyncEXT( external_sync_type, external_sync, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686
participants (2)
-
Rémi Bernon -
Rémi Bernon (@rbernon)