From: Jacek Caban jacek@codeweavers.com
--- dlls/opengl32/make_opengl | 4 ++-- dlls/opengl32/unix_thunks.c | 32 +++++++++++++++++++++++++++-- dlls/opengl32/unix_thunks.h | 6 ++---- dlls/opengl32/unix_wgl.c | 41 +++++++++---------------------------- 4 files changed, 44 insertions(+), 39 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index bda6934a6c5..906324ad947 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -214,8 +214,6 @@ my %manual_unix_thunks = ); my %manual_wow64_thunks = ( - "glGetNamedBufferPointerv" => 1, - "glGetNamedBufferPointervEXT" => 1, "glPathGlyphIndexRangeNV" => 1, "wglCreatePbufferARB" => 1, "wglGetPbufferDCARB" => 1, @@ -229,6 +227,8 @@ my %manual_wow64_wrappers = "glFenceSync" => 0, "glGetBufferPointerv" => 0, "glGetBufferPointervARB" => 0, + "glGetNamedBufferPointerv" => 0, + "glGetNamedBufferPointervEXT" => 0, "glGetSynciv" => 0, "glIsSync" => 0, "glMapBuffer" => 1, diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index e21c0743ae9..8c99d8745c4 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -9784,7 +9784,7 @@ static NTSTATUS ext_glGetNamedBufferParameterui64vNV( void *args ) return STATUS_SUCCESS; }
-NTSTATUS ext_glGetNamedBufferPointerv( void *args ) +static NTSTATUS ext_glGetNamedBufferPointerv( void *args ) { struct glGetNamedBufferPointerv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; @@ -9792,7 +9792,7 @@ NTSTATUS ext_glGetNamedBufferPointerv( void *args ) return STATUS_SUCCESS; }
-NTSTATUS ext_glGetNamedBufferPointervEXT( void *args ) +static NTSTATUS ext_glGetNamedBufferPointervEXT( void *args ) { struct glGetNamedBufferPointervEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; @@ -47579,6 +47579,34 @@ static NTSTATUS wow64_ext_glGetNamedBufferParameterui64vNV( void *args ) return STATUS_SUCCESS; }
+static NTSTATUS wow64_ext_glGetNamedBufferPointerv( void *args ) +{ + struct + { + PTR32 teb; + GLuint buffer; + GLenum pname; + PTR32 params; + } *params = args; + TEB *teb = get_teb64( params->teb ); + wow64_glGetNamedBufferPointerv( teb, params->buffer, params->pname, ULongToPtr(params->params) ); + return STATUS_SUCCESS; +} + +static NTSTATUS wow64_ext_glGetNamedBufferPointervEXT( void *args ) +{ + struct + { + PTR32 teb; + GLuint buffer; + GLenum pname; + PTR32 params; + } *params = args; + TEB *teb = get_teb64( params->teb ); + wow64_glGetNamedBufferPointervEXT( teb, params->buffer, params->pname, ULongToPtr(params->params) ); + return STATUS_SUCCESS; +} + static NTSTATUS wow64_ext_glGetNamedBufferSubData( void *args ) { struct diff --git a/dlls/opengl32/unix_thunks.h b/dlls/opengl32/unix_thunks.h index b3997574f95..4b9a610ca99 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -37,6 +37,8 @@ extern void wow64_glDeleteSync( TEB *teb, GLsync sync ); extern GLsync wow64_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags ); 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_glGetSynciv( TEB *teb, GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values ); extern GLboolean wow64_glIsSync( TEB *teb, GLsync sync ); extern PTR32 wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr ); @@ -55,10 +57,6 @@ extern void wow64_glWaitSync( TEB *teb, GLsync sync, GLbitfield flags, GLuint64
extern NTSTATUS wgl_wglGetProcAddress( void *args ); extern NTSTATUS wow64_wgl_wglGetProcAddress( void *args ); -extern NTSTATUS ext_glGetNamedBufferPointerv( void *args ); -extern NTSTATUS wow64_ext_glGetNamedBufferPointerv( void *args ); -extern NTSTATUS ext_glGetNamedBufferPointervEXT( void *args ); -extern NTSTATUS wow64_ext_glGetNamedBufferPointervEXT( void *args ); extern NTSTATUS ext_glPathGlyphIndexRangeNV( void *args ); extern NTSTATUS wow64_ext_glPathGlyphIndexRangeNV( void *args ); extern NTSTATUS ext_wglCreatePbufferARB( void *args ); diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index f1e644a9cd4..0d4b244c9d7 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1747,41 +1747,20 @@ void wow64_glGetBufferPointervARB( TEB *teb, GLenum target, GLenum pname, PTR32 return wow64_gl_get_buffer_pointer_v( pname, ptr, params ); }
-static NTSTATUS wow64_gl_get_named_buffer_pointer_v( void *args, NTSTATUS (*gl_get_named_buffer_pointer_v64)(void *) ) +void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params ) { - PTR32 *ptr; /* pointer to the buffer data, where we saved the wow64 pointer */ - struct - { - PTR32 teb; - GLuint buffer; - GLenum pname; - PTR32 params; - } *params32 = args; - struct glGetNamedBufferPointerv_params params = - { - .teb = get_teb64(params32->teb), - .buffer = params32->buffer, - .pname = params32->pname, - .params = (void **)&ptr, - }; - PTR32 *wow_ptr = UlongToPtr(params32->params); - NTSTATUS status; - - if ((status = gl_get_named_buffer_pointer_v64( ¶ms ))) return status; - if (params.pname != GL_BUFFER_MAP_POINTER) return STATUS_NOT_IMPLEMENTED; - if (ULongToPtr(*wow_ptr = PtrToUlong(ptr)) == ptr) return STATUS_SUCCESS; /* we're lucky */ - *wow_ptr = ptr[0]; - return STATUS_SUCCESS; -} - -NTSTATUS wow64_ext_glGetNamedBufferPointerv( void *args ) -{ - return wow64_gl_get_named_buffer_pointer_v( args, ext_glGetNamedBufferPointerv ); + const struct opengl_funcs *funcs = teb->glTable; + void *ptr; + funcs->p_glGetNamedBufferPointerv( buffer, pname, &ptr ); + return wow64_gl_get_buffer_pointer_v( pname, ptr, params ); }
-NTSTATUS wow64_ext_glGetNamedBufferPointervEXT( void *args ) +void wow64_glGetNamedBufferPointervEXT( TEB *teb, GLuint buffer, GLenum pname, PTR32 *params ) { - return wow64_gl_get_named_buffer_pointer_v( args, ext_glGetNamedBufferPointervEXT ); + const struct opengl_funcs *funcs = teb->glTable; + void *ptr; + funcs->p_glGetNamedBufferPointervEXT( buffer, pname, &ptr ); + return wow64_gl_get_buffer_pointer_v( pname, ptr, params ); }
static PTR32 wow64_gl_map_buffer( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr,