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