From: Rémi Bernon rbernon@codeweavers.com
--- dlls/opengl32/make_opengl | 56 ++++----- dlls/opengl32/unix_private.h | 68 +++++++++++ dlls/opengl32/unix_thunks.c | 216 ++++++++++++++++++++++++++++---- dlls/opengl32/unix_wgl.c | 231 ++++------------------------------- 4 files changed, 304 insertions(+), 267 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index fa4983384a5..68b9470f962 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -349,28 +349,46 @@ sub get_func_ret($$) sub generate_unix_thunk($$$) { my ($name, $func, $prefix) = @_; - my $call_args = get_func_args( $func, 0, 1, "params->" ); my $func_ret = get_func_ret( $func, 0 ); + my $need_wrap = needs_wrapper( $name, $func ); + my $need_lock = $func_ret =~ /HGLRC|HPBUFFERARB/; my $ret = "";
+ foreach my $arg (@{$func->[1]}) + { + $need_lock = 1 if $arg->textContent() =~ /HGLRC|HPBUFFERARB/; + } + $ret .= "NTSTATUS $prefix_$name( void *args )\n"; $ret .= "{\n"; $ret .= " struct $name_params *params = args;\n"; # special case for functions that take an HDC as first parameter - if (@{$func->[1]} && get_arg_type( ${$func->[1]}[0] ) eq "HDC") + if (@{$func->[1]} && get_arg_type( ${$func->[1]}[0] ) eq "HDC" && $name !~ /wglMake(Context)?Current/) { my $pname = get_arg_name( ${$func->[1]}[0] ); $ret .= " const struct opengl_funcs *funcs = get_dc_funcs( params->$pname );\n"; $ret .= " if (!funcs || !funcs->p_$name) return STATUS_NOT_IMPLEMENTED;\n"; } - else + elsif (!$need_wrap) { $ret .= " const struct opengl_funcs *funcs = params->teb->glTable;\n"; } + $ret .= " pthread_mutex_lock( &wgl_lock );\n" if $need_lock; $ret .= " "; $ret .= "params->ret = " unless is_void_func( $func ); $ret .= "($func_ret)" if defined $remap_types{$func_ret}; - $ret .= "funcs->p_$name($call_args);\n"; + if ($need_wrap) + { + my $call_args = " params->teb," . get_func_args( $func, 0, 0, "params->" ); + $call_args =~ s/,$/ /; + $ret .= "wrap_$name($call_args);\n"; + } + else + { + my $call_args = get_func_args( $func, 0, 1, "params->" ); + $ret .= "funcs->p_$name($call_args);\n"; + } + $ret .= " pthread_mutex_unlock( &wgl_lock );\n" if $need_lock; $ret .= " return STATUS_SUCCESS;\n"; $ret .= "}\n\n";
@@ -1237,44 +1255,17 @@ print OUT "#include "unixlib.h"\n"; print OUT "#include "unix_private.h"\n\n"; print OUT "#include "wine/debug.h"\n\n";
-print OUT "WINE_DEFAULT_DEBUG_CHANNEL(opengl);\n"; - -print OUT "extern NTSTATUS process_attach( void *args );\n"; -print OUT "extern NTSTATUS thread_attach( void *args );\n"; -print OUT "extern NTSTATUS process_detach( void *args );\n"; -print OUT "extern NTSTATUS get_pixel_formats( void *args );\n"; -foreach (sort keys %wgl_functions) -{ - next if defined $manual_win_functions{$_}; - next unless needs_wrapper( $_, $wgl_functions{$_} ); - print OUT "extern NTSTATUS wgl_$_( void *args );\n"; -} -foreach (sort keys %norm_functions) -{ - next if defined $manual_win_functions{$_}; - next unless needs_wrapper( $_, $norm_functions{$_} ); - print OUT "extern NTSTATUS gl_$_( void *args );\n"; -} -foreach (sort keys %ext_functions) -{ - next if $_ =~ /^egl/; # unix-side only API - next if defined $manual_win_functions{$_}; - next unless needs_wrapper( $_, $ext_functions{$_} ); - print OUT "extern NTSTATUS ext_$_( void *args );\n"; -} -print OUT "\n"; +print OUT "WINE_DEFAULT_DEBUG_CHANNEL(opengl);\n\n";
foreach (sort keys %wgl_functions) { next if defined $manual_win_functions{$_}; - next if needs_wrapper( $_, $wgl_functions{$_} ); print OUT "static " unless defined $manual_wow64_thunks{$_}; print OUT generate_unix_thunk($_, $wgl_functions{$_}, "wgl"); } foreach (sort keys %norm_functions) { next if defined $manual_win_functions{$_}; - next if needs_wrapper( $_, $norm_functions{$_} ); print OUT "static " unless defined $manual_wow64_thunks{$_}; print OUT generate_unix_thunk($_, $norm_functions{$_}, "gl"); } @@ -1282,7 +1273,6 @@ foreach (sort keys %ext_functions) { next if $_ =~ /^egl/; # unix-side only API next if defined $manual_win_functions{$_}; - next if needs_wrapper( $_, $ext_functions{$_} ); print OUT "static " unless defined $manual_wow64_thunks{$_}; print OUT generate_unix_thunk($_, $ext_functions{$_}, "ext"); } diff --git a/dlls/opengl32/unix_private.h b/dlls/opengl32/unix_private.h index 4f595a116c4..5e7e327a8b1 100644 --- a/dlls/opengl32/unix_private.h +++ b/dlls/opengl32/unix_private.h @@ -21,6 +21,7 @@ #include <stdarg.h> #include <stddef.h> #include <stdlib.h> +#include <pthread.h>
#include "ntstatus.h" #define WIN32_NO_STATUS @@ -67,4 +68,71 @@ static inline TEB *get_teb64( ULONG teb32 ) return (TEB *)((char *)teb32_ptr + teb32_ptr->WowTebOffset); }
+extern pthread_mutex_t wgl_lock; + +extern NTSTATUS process_attach( void *args ); +extern NTSTATUS thread_attach( void *args ); +extern NTSTATUS process_detach( void *args ); +extern NTSTATUS get_pixel_formats( void *args ); + +extern BOOL wrap_wglCopyContext( TEB *teb, HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ); +extern HGLRC wrap_wglCreateContext( TEB *teb, HDC hDc ); +extern BOOL wrap_wglDeleteContext( TEB *teb, HGLRC oldContext ); +extern PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR lpszProc ); +extern BOOL wrap_wglMakeCurrent( TEB *teb, HDC hDc, HGLRC newContext ); +extern BOOL wrap_wglShareLists( TEB *teb, HGLRC hrcSrvShare, HGLRC hrcSrvSource ); +extern void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ); +extern const GLubyte * wrap_glGetString( TEB *teb, GLenum name ); +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 const GLubyte * wrap_glGetStringi( TEB *teb, GLenum name, GLuint index ); +extern BOOL wrap_wglBindTexImageARB( TEB *teb, HPBUFFERARB hPbuffer, int iBuffer ); +extern HGLRC wrap_wglCreateContextAttribsARB( TEB *teb, HDC hDC, HGLRC hShareContext, const int *attribList ); +extern HPBUFFERARB wrap_wglCreatePbufferARB( TEB *teb, HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList ); +extern BOOL wrap_wglDestroyPbufferARB( TEB *teb, HPBUFFERARB hPbuffer ); +extern HDC wrap_wglGetPbufferDCARB( TEB *teb, HPBUFFERARB hPbuffer ); +extern BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC hDrawDC, HDC hReadDC, HGLRC hglrc ); +extern BOOL wrap_wglQueryPbufferARB( TEB *teb, HPBUFFERARB hPbuffer, int iAttribute, int *piValue ); +extern int wrap_wglReleasePbufferDCARB( TEB *teb, HPBUFFERARB hPbuffer, HDC hDC ); +extern BOOL wrap_wglReleaseTexImageARB( TEB *teb, HPBUFFERARB hPbuffer, int iBuffer ); +extern BOOL wrap_wglSetPbufferAttribARB( TEB *teb, HPBUFFERARB hPbuffer, const int *piAttribList ); + +extern NTSTATUS wgl_wglCreateContext( void *args ); +extern NTSTATUS wgl_wglDeleteContext( void *args ); +extern NTSTATUS wgl_wglGetProcAddress( void *args ); +extern NTSTATUS wgl_wglMakeCurrent( void *args ); +extern NTSTATUS gl_glGetString( void *args ); +extern NTSTATUS ext_glClientWaitSync( void *args ); +extern NTSTATUS ext_glDeleteSync( void *args ); +extern NTSTATUS ext_glFenceSync( void *args ); +extern NTSTATUS ext_glGetBufferPointerv( void *args ); +extern NTSTATUS ext_glGetBufferPointervARB( void *args ); +extern NTSTATUS ext_glGetNamedBufferPointerv( void *args ); +extern NTSTATUS ext_glGetNamedBufferPointervEXT( void *args ); +extern NTSTATUS ext_glGetStringi( void *args ); +extern NTSTATUS ext_glGetSynciv( void *args ); +extern NTSTATUS ext_glIsSync( void *args ); +extern NTSTATUS ext_glMapBuffer( void *args ); +extern NTSTATUS ext_glMapBufferARB( void *args ); +extern NTSTATUS ext_glMapBufferRange( void *args ); +extern NTSTATUS ext_glMapNamedBuffer( void *args ); +extern NTSTATUS ext_glMapNamedBufferEXT( void *args ); +extern NTSTATUS ext_glMapNamedBufferRange( void *args ); +extern NTSTATUS ext_glMapNamedBufferRangeEXT( void *args ); +extern NTSTATUS ext_glPathGlyphIndexRangeNV( void *args ); +extern NTSTATUS ext_glUnmapBuffer( void *args ); +extern NTSTATUS ext_glUnmapBufferARB( void *args ); +extern NTSTATUS ext_glUnmapNamedBuffer( void *args ); +extern NTSTATUS ext_glUnmapNamedBufferEXT( void *args ); +extern NTSTATUS ext_glWaitSync( void *args ); +extern NTSTATUS ext_wglCreateContextAttribsARB( void *args ); +extern NTSTATUS ext_wglCreatePbufferARB( void *args ); +extern NTSTATUS ext_wglGetExtensionsStringARB( void *args ); +extern NTSTATUS ext_wglGetExtensionsStringEXT( void *args ); +extern NTSTATUS ext_wglGetPbufferDCARB( void *args ); +extern NTSTATUS ext_wglMakeContextCurrentARB( void *args ); +extern NTSTATUS ext_wglQueryCurrentRendererStringWINE( void *args ); +extern NTSTATUS ext_wglQueryRendererStringWINE( void *args ); + #endif /* __WINE_OPENGL32_UNIX_PRIVATE_H */ diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 26f89bfc1eb..26e9b66d5e1 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -19,32 +19,35 @@ #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(opengl); -extern NTSTATUS process_attach( void *args ); -extern NTSTATUS thread_attach( void *args ); -extern NTSTATUS process_detach( void *args ); -extern NTSTATUS get_pixel_formats( void *args ); -extern NTSTATUS wgl_wglCopyContext( void *args ); -extern NTSTATUS wgl_wglCreateContext( void *args ); -extern NTSTATUS wgl_wglDeleteContext( void *args ); -extern NTSTATUS wgl_wglGetProcAddress( void *args ); -extern NTSTATUS wgl_wglMakeCurrent( void *args ); -extern NTSTATUS wgl_wglShareLists( void *args ); -extern NTSTATUS gl_glGetIntegerv( void *args ); -extern NTSTATUS gl_glGetString( void *args ); -extern NTSTATUS ext_glDebugMessageCallback( void *args ); -extern NTSTATUS ext_glDebugMessageCallbackAMD( void *args ); -extern NTSTATUS ext_glDebugMessageCallbackARB( void *args ); -extern NTSTATUS ext_glGetStringi( void *args ); -extern NTSTATUS ext_wglBindTexImageARB( void *args ); -extern NTSTATUS ext_wglCreateContextAttribsARB( void *args ); -extern NTSTATUS ext_wglCreatePbufferARB( void *args ); -extern NTSTATUS ext_wglDestroyPbufferARB( void *args ); -extern NTSTATUS ext_wglGetPbufferDCARB( void *args ); -extern NTSTATUS ext_wglMakeContextCurrentARB( void *args ); -extern NTSTATUS ext_wglQueryPbufferARB( void *args ); -extern NTSTATUS ext_wglReleasePbufferDCARB( void *args ); -extern NTSTATUS ext_wglReleaseTexImageARB( void *args ); -extern NTSTATUS ext_wglSetPbufferAttribARB( void *args ); + +static NTSTATUS wgl_wglCopyContext( void *args ) +{ + struct wglCopyContext_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglCopyContext( params->teb, params->hglrcSrc, params->hglrcDst, params->mask ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +NTSTATUS wgl_wglCreateContext( void *args ) +{ + struct wglCreateContext_params *params = args; + const struct opengl_funcs *funcs = get_dc_funcs( params->hDc ); + if (!funcs || !funcs->p_wglCreateContext) return STATUS_NOT_IMPLEMENTED; + pthread_mutex_lock( &wgl_lock ); + params->ret = (HGLRC)wrap_wglCreateContext( params->teb, params->hDc ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +NTSTATUS wgl_wglDeleteContext( void *args ) +{ + struct wglDeleteContext_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglDeleteContext( params->teb, params->oldContext ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +}
static NTSTATUS wgl_wglGetPixelFormat( void *args ) { @@ -55,6 +58,22 @@ static NTSTATUS wgl_wglGetPixelFormat( void *args ) return STATUS_SUCCESS; }
+NTSTATUS wgl_wglGetProcAddress( void *args ) +{ + struct wglGetProcAddress_params *params = args; + params->ret = wrap_wglGetProcAddress( params->teb, params->lpszProc ); + return STATUS_SUCCESS; +} + +NTSTATUS wgl_wglMakeCurrent( void *args ) +{ + struct wglMakeCurrent_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglMakeCurrent( params->teb, params->hDc, params->newContext ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS wgl_wglSetPixelFormat( void *args ) { struct wglSetPixelFormat_params *params = args; @@ -64,6 +83,15 @@ static NTSTATUS wgl_wglSetPixelFormat( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS wgl_wglShareLists( void *args ) +{ + struct wglShareLists_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglShareLists( params->teb, params->hrcSrvShare, params->hrcSrvSource ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS wgl_wglSwapBuffers( void *args ) { struct wglSwapBuffers_params *params = args; @@ -905,6 +933,13 @@ static NTSTATUS gl_glGetFloatv( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS gl_glGetIntegerv( void *args ) +{ + struct glGetIntegerv_params *params = args; + wrap_glGetIntegerv( params->teb, params->pname, params->data ); + return STATUS_SUCCESS; +} + static NTSTATUS gl_glGetLightfv( void *args ) { struct glGetLightfv_params *params = args; @@ -1001,6 +1036,13 @@ static NTSTATUS gl_glGetPolygonStipple( void *args ) return STATUS_SUCCESS; }
+NTSTATUS gl_glGetString( void *args ) +{ + struct glGetString_params *params = args; + params->ret = wrap_glGetString( params->teb, params->name ); + return STATUS_SUCCESS; +} + static NTSTATUS gl_glGetTexEnvfv( void *args ) { struct glGetTexEnvfv_params *params = args; @@ -5425,6 +5467,27 @@ static NTSTATUS ext_glCurrentPaletteMatrixARB( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS ext_glDebugMessageCallback( void *args ) +{ + struct glDebugMessageCallback_params *params = args; + wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam ); + return STATUS_SUCCESS; +} + +static NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) +{ + struct glDebugMessageCallbackAMD_params *params = args; + wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam ); + return STATUS_SUCCESS; +} + +static NTSTATUS ext_glDebugMessageCallbackARB( void *args ) +{ + struct glDebugMessageCallbackARB_params *params = args; + wrap_glDebugMessageCallbackARB( params->teb, params->callback, params->userParam ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_glDebugMessageControl( void *args ) { struct glDebugMessageControl_params *params = args; @@ -9809,6 +9872,13 @@ static NTSTATUS ext_glGetStageIndexNV( void *args ) return STATUS_SUCCESS; }
+NTSTATUS ext_glGetStringi( void *args ) +{ + struct glGetStringi_params *params = args; + params->ret = wrap_glGetStringi( params->teb, params->name, params->index ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_glGetSubroutineIndex( void *args ) { struct glGetSubroutineIndex_params *params = args; @@ -24073,6 +24143,15 @@ static NTSTATUS ext_wglAllocateMemoryNV( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS ext_wglBindTexImageARB( void *args ) +{ + struct wglBindTexImageARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglBindTexImageARB( params->teb, params->hPbuffer, params->iBuffer ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglChoosePixelFormatARB( void *args ) { struct wglChoosePixelFormatARB_params *params = args; @@ -24082,6 +24161,37 @@ static NTSTATUS ext_wglChoosePixelFormatARB( void *args ) return STATUS_SUCCESS; }
+NTSTATUS ext_wglCreateContextAttribsARB( void *args ) +{ + struct wglCreateContextAttribsARB_params *params = args; + const struct opengl_funcs *funcs = get_dc_funcs( params->hDC ); + if (!funcs || !funcs->p_wglCreateContextAttribsARB) return STATUS_NOT_IMPLEMENTED; + pthread_mutex_lock( &wgl_lock ); + params->ret = (HGLRC)wrap_wglCreateContextAttribsARB( params->teb, params->hDC, params->hShareContext, params->attribList ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +NTSTATUS ext_wglCreatePbufferARB( void *args ) +{ + struct wglCreatePbufferARB_params *params = args; + const struct opengl_funcs *funcs = get_dc_funcs( params->hDC ); + if (!funcs || !funcs->p_wglCreatePbufferARB) return STATUS_NOT_IMPLEMENTED; + pthread_mutex_lock( &wgl_lock ); + params->ret = (HPBUFFERARB)wrap_wglCreatePbufferARB( params->teb, params->hDC, params->iPixelFormat, params->iWidth, params->iHeight, params->piAttribList ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +static NTSTATUS ext_wglDestroyPbufferARB( void *args ) +{ + struct wglDestroyPbufferARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglDestroyPbufferARB( params->teb, params->hPbuffer ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglFreeMemoryNV( void *args ) { struct wglFreeMemoryNV_params *params = args; @@ -24115,6 +24225,15 @@ NTSTATUS ext_wglGetExtensionsStringEXT( void *args ) return STATUS_SUCCESS; }
+NTSTATUS ext_wglGetPbufferDCARB( void *args ) +{ + struct wglGetPbufferDCARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglGetPbufferDCARB( params->teb, params->hPbuffer ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglGetPixelFormatAttribfvARB( void *args ) { struct wglGetPixelFormatAttribfvARB_params *params = args; @@ -24141,6 +24260,15 @@ static NTSTATUS ext_wglGetSwapIntervalEXT( void *args ) return STATUS_SUCCESS; }
+NTSTATUS ext_wglMakeContextCurrentARB( void *args ) +{ + struct wglMakeContextCurrentARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglMakeContextCurrentARB( params->teb, params->hDrawDC, params->hReadDC, params->hglrc ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglQueryCurrentRendererIntegerWINE( void *args ) { struct wglQueryCurrentRendererIntegerWINE_params *params = args; @@ -24157,6 +24285,15 @@ NTSTATUS ext_wglQueryCurrentRendererStringWINE( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS ext_wglQueryPbufferARB( void *args ) +{ + struct wglQueryPbufferARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglQueryPbufferARB( params->teb, params->hPbuffer, params->iAttribute, params->piValue ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglQueryRendererIntegerWINE( void *args ) { struct wglQueryRendererIntegerWINE_params *params = args; @@ -24175,6 +24312,33 @@ NTSTATUS ext_wglQueryRendererStringWINE( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS ext_wglReleasePbufferDCARB( void *args ) +{ + struct wglReleasePbufferDCARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglReleasePbufferDCARB( params->teb, params->hPbuffer, params->hDC ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +static NTSTATUS ext_wglReleaseTexImageARB( void *args ) +{ + struct wglReleaseTexImageARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglReleaseTexImageARB( params->teb, params->hPbuffer, params->iBuffer ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + +static NTSTATUS ext_wglSetPbufferAttribARB( void *args ) +{ + struct wglSetPbufferAttribARB_params *params = args; + pthread_mutex_lock( &wgl_lock ); + params->ret = wrap_wglSetPbufferAttribARB( params->teb, params->hPbuffer, params->piAttribList ); + pthread_mutex_unlock( &wgl_lock ); + return STATUS_SUCCESS; +} + static NTSTATUS ext_wglSetPixelFormatWINE( void *args ) { struct wglSetPixelFormatWINE_params *params = args; diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 7f81cdeb9a0..4156045db48 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -51,8 +51,7 @@ static BOOL is_wow64(void) }
static UINT64 call_gl_debug_message_callback; - -static pthread_mutex_t wgl_lock = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t wgl_lock = PTHREAD_MUTEX_INITIALIZER;
/* handle management */
@@ -482,7 +481,7 @@ static BOOL check_extension_support( TEB *teb, const char *extension, const char return FALSE; }
-static void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ) +void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ) { const struct opengl_funcs *funcs = teb->glTable; const GLuint *disabled; @@ -512,7 +511,7 @@ static void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ) } }
-static const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) +const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) { const struct opengl_funcs *funcs = teb->glTable; const GLubyte *ret; @@ -547,7 +546,7 @@ static const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) return ret; }
-static const GLubyte *wrap_glGetStringi( TEB *teb, GLenum name, GLuint index ) +const GLubyte *wrap_glGetStringi( TEB *teb, GLenum name, GLuint index ) { const struct opengl_funcs *funcs = teb->glTable; const GLuint *disabled; @@ -628,7 +627,7 @@ static int registry_entry_cmp( const void *a, const void *b ) return strcmp( entry_a->name, entry_b->name ); }
-static PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR name ) +PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR name ) { const struct registry_entry entry = {.name = name}, *found; struct opengl_funcs *funcs = teb->glTable; @@ -690,7 +689,7 @@ static PROC wrap_wglGetProcAddress( TEB *teb, LPCSTR name ) return (void *)(UINT_PTR)(found - extension_registry); }
-static BOOL wrap_wglCopyContext( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) +BOOL wrap_wglCopyContext( TEB *teb, HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) { const struct opengl_funcs *src_funcs, *dst_funcs; struct opengl_context *src, *dst; @@ -703,7 +702,7 @@ static BOOL wrap_wglCopyContext( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) return ret; }
-static HGLRC wrap_wglCreateContext( HDC hdc ) +HGLRC wrap_wglCreateContext( TEB *teb, HDC hdc ) { HGLRC ret = 0; struct wgl_context *drv_ctx; @@ -722,7 +721,7 @@ static HGLRC wrap_wglCreateContext( HDC hdc ) return ret; }
-static BOOL wrap_wglMakeCurrent( TEB *teb, HDC hdc, HGLRC hglrc ) +BOOL wrap_wglMakeCurrent( TEB *teb, HDC hdc, HGLRC hglrc ) { DWORD tid = HandleToULong(teb->ClientId.UniqueThread); struct opengl_context *ctx, *prev = get_current_context( teb ); @@ -762,7 +761,7 @@ static BOOL wrap_wglMakeCurrent( TEB *teb, HDC hdc, HGLRC hglrc ) return TRUE; }
-static BOOL wrap_wglDeleteContext( TEB *teb, HGLRC hglrc ) +BOOL wrap_wglDeleteContext( TEB *teb, HGLRC hglrc ) { struct wgl_handle *ptr; struct opengl_context *ctx; @@ -786,7 +785,7 @@ static BOOL wrap_wglDeleteContext( TEB *teb, HGLRC hglrc ) return TRUE; }
-static BOOL wrap_wglShareLists( HGLRC hglrcSrc, HGLRC hglrcDst ) +BOOL wrap_wglShareLists( TEB *teb, HGLRC hglrcSrc, HGLRC hglrcDst ) { const struct opengl_funcs *src_funcs, *dst_funcs; struct opengl_context *src, *dst; @@ -799,7 +798,7 @@ static BOOL wrap_wglShareLists( HGLRC hglrcSrc, HGLRC hglrcDst ) return ret; }
-static BOOL wrap_wglBindTexImageARB( HPBUFFERARB handle, int buffer ) +BOOL wrap_wglBindTexImageARB( TEB *teb, HPBUFFERARB handle, int buffer ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -807,7 +806,7 @@ static BOOL wrap_wglBindTexImageARB( HPBUFFERARB handle, int buffer ) return funcs->p_wglBindTexImageARB( pbuffer, buffer ); }
-static HGLRC wrap_wglCreateContextAttribsARB( HDC hdc, HGLRC share, const int *attribs ) +HGLRC wrap_wglCreateContextAttribsARB( TEB *teb, HDC hdc, HGLRC share, const int *attribs ) { HGLRC ret = 0; struct wgl_context *drv_ctx; @@ -841,7 +840,7 @@ static HGLRC wrap_wglCreateContextAttribsARB( HDC hdc, HGLRC share, const int *a return ret; }
-static HPBUFFERARB wrap_wglCreatePbufferARB( HDC hdc, int format, int width, int height, const int *attribs ) +HPBUFFERARB wrap_wglCreatePbufferARB( TEB *teb, HDC hdc, int format, int width, int height, const int *attribs ) { HPBUFFERARB ret; struct wgl_pbuffer *pbuffer; @@ -854,7 +853,7 @@ static HPBUFFERARB wrap_wglCreatePbufferARB( HDC hdc, int format, int width, int return ret; }
-static BOOL wrap_wglDestroyPbufferARB( HPBUFFERARB handle ) +BOOL wrap_wglDestroyPbufferARB( TEB *teb, HPBUFFERARB handle ) { struct wgl_pbuffer *pbuffer; struct wgl_handle *ptr; @@ -866,7 +865,7 @@ static BOOL wrap_wglDestroyPbufferARB( HPBUFFERARB handle ) return TRUE; }
-static HDC wrap_wglGetPbufferDCARB( HPBUFFERARB handle ) +HDC wrap_wglGetPbufferDCARB( TEB *teb, HPBUFFERARB handle ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -874,7 +873,7 @@ static HDC wrap_wglGetPbufferDCARB( HPBUFFERARB handle ) return funcs->p_wglGetPbufferDCARB( pbuffer ); }
-static BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC hglrc ) +BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC hglrc ) { DWORD tid = HandleToULong(teb->ClientId.UniqueThread); struct opengl_context *ctx, *prev = get_current_context( teb ); @@ -909,7 +908,7 @@ static BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, return TRUE; }
-static BOOL wrap_wglQueryPbufferARB( HPBUFFERARB handle, int attrib, int *value ) +BOOL wrap_wglQueryPbufferARB( TEB *teb, HPBUFFERARB handle, int attrib, int *value ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -917,7 +916,7 @@ static BOOL wrap_wglQueryPbufferARB( HPBUFFERARB handle, int attrib, int *value return funcs->p_wglQueryPbufferARB( pbuffer, attrib, value ); }
-static int wrap_wglReleasePbufferDCARB( HPBUFFERARB handle, HDC hdc ) +int wrap_wglReleasePbufferDCARB( TEB *teb, HPBUFFERARB handle, HDC hdc ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -925,7 +924,7 @@ static int wrap_wglReleasePbufferDCARB( HPBUFFERARB handle, HDC hdc ) return funcs->p_wglReleasePbufferDCARB( pbuffer, hdc ); }
-static BOOL wrap_wglReleaseTexImageARB( HPBUFFERARB handle, int buffer ) +BOOL wrap_wglReleaseTexImageARB( TEB *teb, HPBUFFERARB handle, int buffer ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -933,7 +932,7 @@ static BOOL wrap_wglReleaseTexImageARB( HPBUFFERARB handle, int buffer ) return funcs->p_wglReleaseTexImageARB( pbuffer, buffer ); }
-static BOOL wrap_wglSetPbufferAttribARB( HPBUFFERARB handle, const int *attribs ) +BOOL wrap_wglSetPbufferAttribARB( TEB *teb, HPBUFFERARB handle, const int *attribs ) { const struct opengl_funcs *funcs; struct wgl_pbuffer *pbuffer; @@ -974,7 +973,7 @@ static void gl_debug_message_callback( GLenum source, GLenum type, GLuint id, GL free( params ); }
-static void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user ) +void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user ) { struct opengl_context *ctx = get_current_context( teb ); const struct opengl_funcs *funcs = teb->glTable; @@ -986,7 +985,7 @@ static void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const v funcs->p_glDebugMessageCallback( gl_debug_message_callback, ctx ); }
-static void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user ) +void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user ) { struct opengl_context *ctx = get_current_context( teb ); const struct opengl_funcs *funcs = teb->glTable; @@ -998,7 +997,7 @@ static void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, v funcs->p_glDebugMessageCallbackAMD( gl_debug_message_callback, ctx ); }
-static void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *user ) +void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *user ) { struct opengl_context *ctx = get_current_context( teb ); const struct opengl_funcs *funcs = teb->glTable; @@ -1010,190 +1009,6 @@ static void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, c funcs->p_glDebugMessageCallbackARB( gl_debug_message_callback, ctx ); }
-NTSTATUS wgl_wglCopyContext( void *args ) -{ - struct wglCopyContext_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglCopyContext( params->hglrcSrc, params->hglrcDst, params->mask ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS wgl_wglCreateContext( void *args ) -{ - struct wglCreateContext_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglCreateContext( params->hDc ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS wgl_wglDeleteContext( void *args ) -{ - struct wglDeleteContext_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglDeleteContext( params->teb, params->oldContext ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS wgl_wglGetProcAddress( void *args ) -{ - struct wglGetProcAddress_params *params = args; - params->ret = wrap_wglGetProcAddress( params->teb, params->lpszProc ); - return STATUS_SUCCESS; -} - -NTSTATUS wgl_wglMakeCurrent( void *args ) -{ - struct wglMakeCurrent_params *params = args; - if (params->newContext) pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglMakeCurrent( params->teb, params->hDc, params->newContext ); - if (params->newContext) pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS wgl_wglShareLists( void *args ) -{ - struct wglShareLists_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglShareLists( params->hrcSrvShare, params->hrcSrvSource ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS gl_glGetIntegerv( void *args ) -{ - struct glGetIntegerv_params *params = args; - wrap_glGetIntegerv( params->teb, params->pname, params->data ); - return STATUS_SUCCESS; -} - -NTSTATUS gl_glGetString( void *args ) -{ - struct glGetString_params *params = args; - params->ret = wrap_glGetString( params->teb, params->name ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_glDebugMessageCallback( void *args ) -{ - struct glDebugMessageCallback_params *params = args; - wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) -{ - struct glDebugMessageCallbackAMD_params *params = args; - wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_glDebugMessageCallbackARB( void *args ) -{ - struct glDebugMessageCallbackARB_params *params = args; - wrap_glDebugMessageCallbackARB( params->teb, params->callback, params->userParam ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_glGetStringi( void *args ) -{ - struct glGetStringi_params *params = args; - params->ret = wrap_glGetStringi( params->teb, params->name, params->index ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglBindTexImageARB( void *args ) -{ - struct wglBindTexImageARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglBindTexImageARB( params->hPbuffer, params->iBuffer ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglCreateContextAttribsARB( void *args ) -{ - struct wglCreateContextAttribsARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglCreateContextAttribsARB( params->hDC, params->hShareContext, params->attribList ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglCreatePbufferARB( void *args ) -{ - struct wglCreatePbufferARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglCreatePbufferARB( params->hDC, params->iPixelFormat, params->iWidth, params->iHeight, params->piAttribList ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglDestroyPbufferARB( void *args ) -{ - struct wglDestroyPbufferARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglDestroyPbufferARB( params->hPbuffer ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglGetPbufferDCARB( void *args ) -{ - struct wglGetPbufferDCARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglGetPbufferDCARB( params->hPbuffer ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglMakeContextCurrentARB( void *args ) -{ - struct wglMakeContextCurrentARB_params *params = args; - if (params->hglrc) pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglMakeContextCurrentARB( params->teb, params->hDrawDC, params->hReadDC, params->hglrc ); - if (params->hglrc) pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglQueryPbufferARB( void *args ) -{ - struct wglQueryPbufferARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglQueryPbufferARB( params->hPbuffer, params->iAttribute, params->piValue ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglReleasePbufferDCARB( void *args ) -{ - struct wglReleasePbufferDCARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglReleasePbufferDCARB( params->hPbuffer, params->hDC ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglReleaseTexImageARB( void *args ) -{ - struct wglReleaseTexImageARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglReleaseTexImageARB( params->hPbuffer, params->iBuffer ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - -NTSTATUS ext_wglSetPbufferAttribARB( void *args ) -{ - struct wglSetPbufferAttribARB_params *params = args; - pthread_mutex_lock( &wgl_lock ); - params->ret = wrap_wglSetPbufferAttribARB( params->hPbuffer, params->piAttribList ); - pthread_mutex_unlock( &wgl_lock ); - return STATUS_SUCCESS; -} - NTSTATUS process_attach( void *args ) { struct process_attach_params *params = args;