From: Jacek Caban jacek@codeweavers.com
--- dlls/opengl32/tests/opengl.c | 3 + dlls/opengl32/unix_wgl.c | 108 +++++++++++++++++++++-------------- dlls/opengl32/wgl.c | 50 ---------------- 3 files changed, 69 insertions(+), 92 deletions(-)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c index ea88a50c49f..b57180a4d3a 100644 --- a/dlls/opengl32/tests/opengl.c +++ b/dlls/opengl32/tests/opengl.c @@ -3378,6 +3378,7 @@ static void test_memory_map( HDC hdc) pglBindBuffer( GL_ARRAY_BUFFER, src ); src_ptr = pglMapBufferRange( GL_ARRAY_BUFFER, 3, 4, GL_MAP_READ_BIT | GL_MAP_WRITE_BIT ); check_gl_error( GL_NO_ERROR ); + ok( ((UINT_PTR)src_ptr & 0xf) == 3, "pointer not aligned\n" );
ok( !memcmp( src_ptr, "defg", 4 ), "unexpected src data %s\n", debugstr_an(src_ptr, 4) ); for (i = 0; i < 4; i++) src_ptr[i] += 'A' - 'a'; @@ -3385,6 +3386,7 @@ static void test_memory_map( HDC hdc) pglUnmapBuffer( GL_ARRAY_BUFFER );
src_ptr = pglMapBufferRange( GL_ARRAY_BUFFER, 2, 10, GL_MAP_READ_BIT ); + ok( ((UINT_PTR)src_ptr & 0xf) == 2, "pointer not aligned\n" );
ok( !memcmp( src_ptr, "cDEFGhijkl", 10 ), "unexpected src data %s\n", debugstr_an(src_ptr, 10) );
@@ -3394,6 +3396,7 @@ static void test_memory_map( HDC hdc)
pglBindBuffer( GL_ARRAY_BUFFER, dst ); dst_ptr = pglMapBufferRange( GL_ARRAY_BUFFER, 2, 10, GL_MAP_READ_BIT ); + ok( ((UINT_PTR)dst_ptr & 0xf) == 2, "pointer not aligned\n" );
ok( !memcmp( dst_ptr, "cDEFGhijkl", 10 ), "unexpected src data %s\n", debugstr_an(dst_ptr, 10) );
diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index d7420a8ca6d..4b116f5b2e3 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -162,6 +162,8 @@ struct buffer void *host_ptr; void *map_ptr; size_t copy_length; + void *vm_ptr; + SIZE_T vm_size; };
struct wgl_handle @@ -182,6 +184,8 @@ static struct wgl_handle wgl_handles[MAX_WGL_HANDLES]; static struct wgl_handle *next_free; static unsigned int handle_count;
+static ULONG_PTR zero_bits; + static struct context *context_from_wgl_context( struct wgl_context *context ) { return CONTAINING_RECORD( context, struct context, base ); @@ -339,6 +343,12 @@ static int compare_buffer_name( const void *key, const struct rb_entry *entry ) return memcmp( key, &buffer->name, sizeof(buffer->name) ); }
+static void free_buffer( struct buffer *buffer ) +{ + if (buffer->vm_ptr) NtFreeVirtualMemory( GetCurrentProcess(), &buffer->vm_ptr, &buffer->vm_size, MEM_RELEASE ); + free( buffer ); +} + static void release_buffers( struct buffers *buffers ) { struct buffer *buffer, *next; @@ -346,7 +356,7 @@ static void release_buffers( struct buffers *buffers ) if (--buffers->ref) return;
RB_FOR_EACH_ENTRY_DESTRUCTOR( buffer, next, &buffers->map, struct buffer, entry ) - free( buffer ); + free_buffer( buffer ); free( buffers ); }
@@ -1934,6 +1944,13 @@ NTSTATUS process_attach( void *args ) { struct process_attach_params *params = args; call_gl_debug_message_callback = params->call_gl_debug_message_callback; + if (is_win64 && is_wow64()) + { + SYSTEM_BASIC_INFORMATION info; + + NtQuerySystemInformation( SystemEmulationBasicInformation, &info, sizeof(info), NULL ); + zero_bits = (ULONG_PTR)info.HighestUserAddress | 0x7fffffff; + } return STATUS_SUCCESS; }
@@ -2149,7 +2166,7 @@ void invalidate_buffer_name( TEB *teb, GLuint name )
if (!buffer || !(ctx = get_current_context( teb, NULL, NULL ))) return; rb_remove( &ctx->buffers->map, &buffer->entry ); - free( buffer ); + free_buffer( buffer ); }
void invalidate_buffer_target( TEB *teb, GLenum target ) @@ -2164,6 +2181,25 @@ static struct buffer *get_target_buffer( TEB *teb, GLenum target ) return name ? get_named_buffer( teb, name ) : NULL; }
+static BOOL buffer_vm_alloc( struct buffer *buffer, SIZE_T size ) +{ + if (buffer->vm_size >= size) return TRUE; + if (buffer->vm_ptr) + { + NtFreeVirtualMemory( GetCurrentProcess(), &buffer->vm_ptr, &buffer->vm_size, MEM_RELEASE ); + buffer->vm_ptr = NULL; + buffer->vm_size = 0; + } + if (NtAllocateVirtualMemory( GetCurrentProcess(), &buffer->vm_ptr, zero_bits, &size, + MEM_COMMIT, PAGE_READWRITE )) + { + ERR("NtAllocateVirtualMemory failed\n"); + return FALSE; + } + buffer->vm_size = size; + return TRUE; +} + static PTR32 wow64_map_buffer( TEB *teb, GLenum target, GLuint name, GLintptr offset, size_t length, GLbitfield access, void *ptr, PTR32 *client_ptr ) { @@ -2182,36 +2218,12 @@ static PTR32 wow64_map_buffer( TEB *teb, GLenum target, GLuint name, GLintptr of TRACE( "allocated buffer %p for %u\n", buffer, buffer->name ); }
- if (ptr) - { - buffer->host_ptr = ptr; - if (ULongToPtr(PtrToUlong(ptr)) == ptr) /* we're lucky */ - { - buffer->map_ptr = ptr; - TRACE( "returning %p\n", buffer->map_ptr ); - return PtrToUlong( buffer->map_ptr ); - } - } - + buffer->host_ptr = ptr; if (!offset && !length) length = buffer->size; - - if (*client_ptr) /* wow64 pointer provided, map buffer to it */ + if (ULongToPtr(PtrToUlong(ptr)) == ptr) /* we're lucky */ { - buffer->map_ptr = UlongToPtr( *client_ptr ); - *client_ptr = 0; - buffer->copy_length = (access & GL_MAP_WRITE_BIT) ? length : 0; - if (!(access & (GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT))) - { - static int once; - if (!once++) - FIXME( "Doing a copy of a mapped buffer (expect performance issues)\n" ); - - TRACE( "Copying %#zx from buffer at %p to wow64 buffer %p\n", length, buffer->host_ptr, - buffer->map_ptr ); - memcpy( buffer->map_ptr, buffer->host_ptr, length ); - } - TRACE( "returning client buffer %p\n", buffer->map_ptr ); - *client_ptr = 0; + buffer->map_ptr = ptr; + TRACE( "returning %p\n", buffer->map_ptr ); return PtrToUlong( buffer->map_ptr ); }
@@ -2221,8 +2233,21 @@ static PTR32 wow64_map_buffer( TEB *teb, GLenum target, GLuint name, GLintptr of goto unmap; }
- *client_ptr = length; - return 0; + if (!buffer_vm_alloc( buffer, length + (offset & 0xf) )) return 0; + buffer->map_ptr = (char *)buffer->vm_ptr + (offset & 0xf); + buffer->copy_length = (access & GL_MAP_WRITE_BIT) ? length : 0; + if (!(access & (GL_MAP_INVALIDATE_RANGE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT))) + { + static int once; + if (!once++) + FIXME( "Doing a copy of a mapped buffer (expect performance issues)\n" ); + + TRACE( "Copying %#zx from buffer at %p to wow64 buffer %p\n", length, buffer->host_ptr, + buffer->map_ptr ); + memcpy( buffer->map_ptr, buffer->host_ptr, length ); + } + TRACE( "returning copy buffer %p\n", buffer->map_ptr ); + return PtrToUlong( buffer->map_ptr );
unmap: if (name) @@ -2402,7 +2427,7 @@ PTR32 wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, return wow64_gl_map_named_buffer_range( teb, buffer, offset, length, access, client_ptr, funcs->p_glMapNamedBufferRangeEXT ); }
-static void wow64_unmap_buffer( struct buffer *buffer, PTR32 *client_ptr ) +static void wow64_unmap_buffer( struct buffer *buffer ) { if (!buffer->host_ptr) return;
@@ -2414,19 +2439,18 @@ static void wow64_unmap_buffer( struct buffer *buffer, PTR32 *client_ptr ) buffer->map_ptr, buffer->host_ptr ); memcpy( buffer->host_ptr, buffer->map_ptr, buffer->copy_length ); } - *client_ptr = PtrToUlong( buffer->map_ptr ); }
buffer->host_ptr = buffer->map_ptr = NULL; }
-static GLboolean wow64_unmap_target_buffer( TEB *teb, GLenum target, PTR32 *client_ptr, PFN_glUnmapBuffer gl_unmap ) +static GLboolean wow64_unmap_target_buffer( TEB *teb, GLenum target, PFN_glUnmapBuffer gl_unmap ) { struct buffer *buffer; GLboolean ret;
pthread_mutex_lock( &wgl_lock ); - if ((buffer = get_target_buffer( teb, target ))) wow64_unmap_buffer( buffer, client_ptr ); + if ((buffer = get_target_buffer( teb, target ))) wow64_unmap_buffer( buffer ); ret = gl_unmap( target ); pthread_mutex_unlock( &wgl_lock ); return ret; @@ -2435,22 +2459,22 @@ static GLboolean wow64_unmap_target_buffer( TEB *teb, GLenum target, PTR32 *clie GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PTR32 *client_ptr ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_unmap_target_buffer( teb, target, client_ptr, funcs->p_glUnmapBuffer ); + return wow64_unmap_target_buffer( teb, target, funcs->p_glUnmapBuffer ); }
GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target, PTR32 *client_ptr ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_unmap_target_buffer( teb, target, client_ptr, funcs->p_glUnmapBufferARB ); + return wow64_unmap_target_buffer( teb, target, funcs->p_glUnmapBufferARB ); }
-static GLboolean wow64_gl_unmap_named_buffer( TEB *teb, GLuint name, PTR32 *client_ptr, PFN_glUnmapBuffer gl_unmap ) +static GLboolean wow64_gl_unmap_named_buffer( TEB *teb, GLuint name, PFN_glUnmapBuffer gl_unmap ) { struct buffer *buffer; GLboolean ret;
pthread_mutex_lock( &wgl_lock ); - if ((buffer = get_named_buffer( teb, name ))) wow64_unmap_buffer( buffer, client_ptr ); + if ((buffer = get_named_buffer( teb, name ))) wow64_unmap_buffer( buffer ); ret = gl_unmap( name ); pthread_mutex_unlock( &wgl_lock ); return ret; @@ -2459,13 +2483,13 @@ static GLboolean wow64_gl_unmap_named_buffer( TEB *teb, GLuint name, PTR32 *clie GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer, PTR32 *client_ptr ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_unmap_named_buffer( teb, buffer, client_ptr, funcs->p_glUnmapNamedBuffer ); + return wow64_gl_unmap_named_buffer( teb, buffer, funcs->p_glUnmapNamedBuffer ); }
GLboolean wow64_glUnmapNamedBufferEXT( TEB *teb, GLuint buffer, PTR32 *client_ptr ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_unmap_named_buffer( teb, buffer, client_ptr, funcs->p_glUnmapNamedBufferEXT ); + return wow64_gl_unmap_named_buffer( teb, buffer, funcs->p_glUnmapNamedBufferEXT ); }
NTSTATUS wow64_thread_attach( void *args ) diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index b8af14388fc..0241ca16a41 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -1703,15 +1703,6 @@ static void *gl_map_buffer( enum unix_funcs code, GLenum target, GLenum access ) TRACE( "target %d, access %d\n", target, access );
status = WINE_UNIX_CALL( code, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Unable to map wow64 buffer directly, using copy buffer!\n" ); - if (!(args.client_ptr = _aligned_malloc( (size_t)args.client_ptr, 16 ))) return NULL; - status = WINE_UNIX_CALL( code, &args ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glMapBuffer returned %#lx\n", status ); return args.ret; } @@ -1741,15 +1732,6 @@ void * WINAPI glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr lengt TRACE( "target %d, offset %Id, length %Id, access %d\n", target, offset, length, access );
status = UNIX_CALL( glMapBufferRange, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Unable to map wow64 buffer directly, using copy buffer!\n" ); - if (!(args.client_ptr = _aligned_malloc( length, 16 ))) return NULL; - status = UNIX_CALL( glMapBufferRange, &args ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glMapBufferRange returned %#lx\n", status ); return args.ret; } @@ -1767,15 +1749,6 @@ static void *gl_map_named_buffer( enum unix_funcs code, GLuint buffer, GLenum ac TRACE( "(%d, %d)\n", buffer, access );
status = WINE_UNIX_CALL( code, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Unable to map wow64 buffer directly, using copy buffer!\n" ); - if (!(args.client_ptr = _aligned_malloc( (size_t)args.client_ptr, 16 ))) return NULL; - status = WINE_UNIX_CALL( code, &args ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glMapNamedBuffer returned %#lx\n", status ); return args.ret; } @@ -1805,15 +1778,6 @@ static void *gl_map_named_buffer_range( enum unix_funcs code, GLuint buffer, GLi TRACE( "buffer %d, offset %Id, length %Id, access %d\n", buffer, offset, length, access );
status = WINE_UNIX_CALL( code, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Unable to map wow64 buffer directly, using copy buffer!\n" ); - if (!(args.client_ptr = _aligned_malloc( length, 16 ))) return NULL; - status = WINE_UNIX_CALL( code, &args ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glMapNamedBufferRange returned %#lx\n", status ); return args.ret; } @@ -1840,13 +1804,6 @@ static GLboolean gl_unmap_buffer( enum unix_funcs code, GLenum target ) TRACE( "target %d\n", target );
status = WINE_UNIX_CALL( code, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Releasing wow64 copy buffer %p\n", args.client_ptr ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glUnmapBuffer returned %#lx\n", status ); return args.ret; } @@ -1873,13 +1830,6 @@ static GLboolean gl_unmap_named_buffer( enum unix_funcs code, GLuint buffer ) TRACE( "buffer %d\n", buffer );
status = WINE_UNIX_CALL( code, &args ); -#ifndef _WIN64 - if (args.client_ptr) - { - TRACE( "Releasing wow64 copy buffer %p\n", args.client_ptr ); - _aligned_free( args.client_ptr ); - } -#endif if (status) WARN( "glUnmapNamedBuffer returned %#lx\n", status ); return args.ret; }
From: Jacek Caban jacek@codeweavers.com
--- dlls/opengl32/make_opengl | 21 +++----- dlls/opengl32/thunks.c | 70 ++++++++++++++++++++++--- dlls/opengl32/unix_thunks.c | 21 +++----- dlls/opengl32/unix_thunks.h | 14 ++--- dlls/opengl32/unix_wgl.c | 64 +++++++++++----------- dlls/opengl32/unixlib.h | 21 -------- dlls/opengl32/wgl.c | 102 ------------------------------------ 7 files changed, 115 insertions(+), 198 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 97a3a1fb950..ed75fa8634f 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -173,13 +173,6 @@ my %manual_win_thunks = ( "glGetString" => 1, "glGetStringi" => 1, - "glMapBuffer" => 1, - "glMapBufferARB" => 1, - "glMapBufferRange" => 1, - "glMapNamedBuffer" => 1, - "glMapNamedBufferEXT" => 1, - "glMapNamedBufferRange" => 1, - "glMapNamedBufferRangeEXT" => 1, "glUnmapBuffer" => 1, "glUnmapBufferARB" => 1, "glUnmapNamedBuffer" => 1, @@ -298,13 +291,13 @@ my %manual_wow64_wrappers = "glGetNamedBufferPointervEXT" => 0, "glGetSynciv" => 0, "glIsSync" => 0, - "glMapBuffer" => 1, - "glMapBufferARB" => 1, - "glMapBufferRange" => 1, - "glMapNamedBuffer" => 1, - "glMapNamedBufferEXT" => 1, - "glMapNamedBufferRange" => 1, - "glMapNamedBufferRangeEXT" => 1, + "glMapBuffer" => 0, + "glMapBufferARB" => 0, + "glMapBufferRange" => 0, + "glMapNamedBuffer" => 0, + "glMapNamedBufferEXT" => 0, + "glMapNamedBufferRange" => 0, + "glMapNamedBufferRangeEXT" => 0, "glUnmapBuffer" => 1, "glUnmapBufferARB" => 1, "glUnmapNamedBuffer" => 1, diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index 319d6e0c359..94f2df1878e 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -12138,6 +12138,33 @@ static void WINAPI glMap2xOES( GLenum target, GLfixed u1, GLfixed u2, GLint ustr if ((status = UNIX_CALL( glMap2xOES, &args ))) WARN( "glMap2xOES returned %#lx\n", status ); }
+static void * WINAPI glMapBuffer( GLenum target, GLenum access ) +{ + struct glMapBuffer_params args = { .teb = NtCurrentTeb(), .target = target, .access = access }; + NTSTATUS status; + TRACE( "target %d, access %d\n", target, access ); + if ((status = UNIX_CALL( glMapBuffer, &args ))) WARN( "glMapBuffer returned %#lx\n", status ); + return args.ret; +} + +static void * WINAPI glMapBufferARB( GLenum target, GLenum access ) +{ + struct glMapBufferARB_params args = { .teb = NtCurrentTeb(), .target = target, .access = access }; + NTSTATUS status; + TRACE( "target %d, access %d\n", target, access ); + if ((status = UNIX_CALL( glMapBufferARB, &args ))) WARN( "glMapBufferARB returned %#lx\n", status ); + return args.ret; +} + +static void * WINAPI glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) +{ + struct glMapBufferRange_params args = { .teb = NtCurrentTeb(), .target = target, .offset = offset, .length = length, .access = access }; + NTSTATUS status; + TRACE( "target %d, offset %Id, length %Id, access %d\n", target, offset, length, access ); + if ((status = UNIX_CALL( glMapBufferRange, &args ))) WARN( "glMapBufferRange returned %#lx\n", status ); + return args.ret; +} + static void WINAPI glMapControlPointsNV( GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points ) { struct glMapControlPointsNV_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .type = type, .ustride = ustride, .vstride = vstride, .uorder = uorder, .vorder = vorder, .packed = packed, .points = points }; @@ -12162,6 +12189,42 @@ static void WINAPI glMapGrid2xOES( GLint n, GLfixed u1, GLfixed u2, GLfixed v1, if ((status = UNIX_CALL( glMapGrid2xOES, &args ))) WARN( "glMapGrid2xOES returned %#lx\n", status ); }
+static void * WINAPI glMapNamedBuffer( GLuint buffer, GLenum access ) +{ + struct glMapNamedBuffer_params args = { .teb = NtCurrentTeb(), .buffer = buffer, .access = access }; + NTSTATUS status; + TRACE( "buffer %d, access %d\n", buffer, access ); + if ((status = UNIX_CALL( glMapNamedBuffer, &args ))) WARN( "glMapNamedBuffer returned %#lx\n", status ); + return args.ret; +} + +static void * WINAPI glMapNamedBufferEXT( GLuint buffer, GLenum access ) +{ + struct glMapNamedBufferEXT_params args = { .teb = NtCurrentTeb(), .buffer = buffer, .access = access }; + NTSTATUS status; + TRACE( "buffer %d, access %d\n", buffer, access ); + if ((status = UNIX_CALL( glMapNamedBufferEXT, &args ))) WARN( "glMapNamedBufferEXT returned %#lx\n", status ); + return args.ret; +} + +static void * WINAPI glMapNamedBufferRange( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) +{ + struct glMapNamedBufferRange_params args = { .teb = NtCurrentTeb(), .buffer = buffer, .offset = offset, .length = length, .access = access }; + NTSTATUS status; + TRACE( "buffer %d, offset %Id, length %Id, access %d\n", buffer, offset, length, access ); + if ((status = UNIX_CALL( glMapNamedBufferRange, &args ))) WARN( "glMapNamedBufferRange returned %#lx\n", status ); + return args.ret; +} + +static void * WINAPI glMapNamedBufferRangeEXT( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) +{ + struct glMapNamedBufferRangeEXT_params args = { .teb = NtCurrentTeb(), .buffer = buffer, .offset = offset, .length = length, .access = access }; + NTSTATUS status; + TRACE( "buffer %d, offset %Id, length %Id, access %d\n", buffer, offset, length, access ); + if ((status = UNIX_CALL( glMapNamedBufferRangeEXT, &args ))) WARN( "glMapNamedBufferRangeEXT returned %#lx\n", status ); + return args.ret; +} + static void * WINAPI glMapObjectBufferATI( GLuint buffer ) { struct glMapObjectBufferATI_params args = { .teb = NtCurrentTeb(), .buffer = buffer }; @@ -24298,13 +24361,6 @@ static BOOL WINAPI wglSwapIntervalEXT( int interval ) }
extern const GLubyte * WINAPI glGetStringi( GLenum name, GLuint index ); -extern void * WINAPI glMapBuffer( GLenum target, GLenum access ); -extern void * WINAPI glMapBufferARB( GLenum target, GLenum access ); -extern void * WINAPI glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern void * WINAPI glMapNamedBuffer( GLuint buffer, GLenum access ); -extern void * WINAPI glMapNamedBufferEXT( GLuint buffer, GLenum access ); -extern void * WINAPI glMapNamedBufferRange( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern void * WINAPI glMapNamedBufferRangeEXT( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); extern GLboolean WINAPI glUnmapBuffer( GLenum target ); extern GLboolean WINAPI glUnmapBufferARB( GLenum target ); extern GLboolean WINAPI glUnmapNamedBuffer( GLuint buffer ); diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index abec508aafb..6c2be9b763c 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -53900,10 +53900,9 @@ static NTSTATUS wow64_ext_glMapBuffer( void *args ) GLenum target; GLenum access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapBuffer( teb, params->target, params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapBuffer( teb, params->target, params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -53916,10 +53915,9 @@ static NTSTATUS wow64_ext_glMapBufferARB( void *args ) GLenum target; GLenum access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapBufferARB( teb, params->target, params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapBufferARB( teb, params->target, params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -53934,10 +53932,9 @@ static NTSTATUS wow64_ext_glMapBufferRange( void *args ) PTR32 length; GLbitfield access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapBufferRange( teb, params->target, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -54006,10 +54003,9 @@ static NTSTATUS wow64_ext_glMapNamedBuffer( void *args ) GLuint buffer; GLenum access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapNamedBuffer( teb, params->buffer, params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapNamedBuffer( teb, params->buffer, params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -54022,10 +54018,9 @@ static NTSTATUS wow64_ext_glMapNamedBufferEXT( void *args ) GLuint buffer; GLenum access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapNamedBufferEXT( teb, params->buffer, params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapNamedBufferEXT( teb, params->buffer, params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -54040,10 +54035,9 @@ static NTSTATUS wow64_ext_glMapNamedBufferRange( void *args ) PTR32 length; GLbitfield access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapNamedBufferRange( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -54058,10 +54052,9 @@ static NTSTATUS wow64_ext_glMapNamedBufferRangeEXT( void *args ) PTR32 length; GLbitfield access; PTR32 ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glMapNamedBufferRangeEXT( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access, ¶ms->client_ptr ); + params->ret = wow64_glMapNamedBufferRangeEXT( teb, params->buffer, (GLintptr)ULongToPtr(params->offset), (GLsizeiptr)ULongToPtr(params->length), params->access ); 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 8b73b95da33..f032722bbc1 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -57,13 +57,13 @@ extern void wow64_glGetNamedBufferPointerv( TEB *teb, GLuint buffer, GLenum pnam 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 ); -extern PTR32 wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr ); -extern PTR32 wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ); -extern PTR32 wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access, PTR32 *client_ptr ); -extern PTR32 wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access, PTR32 *client_ptr ); -extern PTR32 wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ); -extern PTR32 wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ); +extern PTR32 wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access ); +extern PTR32 wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access ); +extern PTR32 wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ); +extern PTR32 wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access ); +extern PTR32 wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access ); +extern PTR32 wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); +extern PTR32 wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); extern GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PTR32 *client_ptr ); extern GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target, PTR32 *client_ptr ); extern GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer, PTR32 *client_ptr ); diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 4b116f5b2e3..01071f4dced 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -2201,11 +2201,11 @@ static BOOL buffer_vm_alloc( struct buffer *buffer, SIZE_T size ) }
static PTR32 wow64_map_buffer( TEB *teb, GLenum target, GLuint name, GLintptr offset, - size_t length, GLbitfield access, void *ptr, PTR32 *client_ptr ) + size_t length, GLbitfield access, void *ptr ) { struct buffer *buffer = get_target_buffer( teb, target );
- if (!ptr && (!*client_ptr || !buffer)) return 0; + if (!ptr) return 0;
if (!buffer) { @@ -2337,94 +2337,92 @@ void wow64_glGetNamedBufferPointervEXT( TEB *teb, GLuint buffer, GLenum pname, P *params = PtrToUlong(ptr); }
-static PTR32 wow64_gl_map_buffer( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr, - PFN_glMapBuffer gl_map_buffer64 ) +static PTR32 wow64_gl_map_buffer( TEB *teb, GLenum target, GLenum access, PFN_glMapBuffer gl_map_buffer64 ) { GLbitfield range_access = map_range_flags_from_map_flags( access ); - void *ptr = NULL; - PTR32 ret ; + void *ptr; + PTR32 ret;
pthread_mutex_lock( &wgl_lock ); - if (!*client_ptr) ptr = gl_map_buffer64( target, access ); - ret = wow64_map_buffer( teb, target, 0, 0, 0, range_access, ptr, client_ptr ); + ptr = gl_map_buffer64( target, access ); + ret = wow64_map_buffer( teb, target, 0, 0, 0, range_access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ret; }
-PTR32 wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr ) +PTR32 wow64_glMapBuffer( TEB *teb, GLenum target, GLenum access ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_buffer( teb, target, access, client_ptr, funcs->p_glMapBuffer ); + return wow64_gl_map_buffer( teb, target, access, funcs->p_glMapBuffer ); }
-PTR32 wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access, PTR32 *client_ptr ) +PTR32 wow64_glMapBufferARB( TEB *teb, GLenum target, GLenum access ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_buffer( teb, target, access, client_ptr, funcs->p_glMapBufferARB ); + return wow64_gl_map_buffer( teb, target, access, funcs->p_glMapBufferARB ); }
-PTR32 wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ) +PTR32 wow64_glMapBufferRange( TEB *teb, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) { const struct opengl_funcs *funcs = teb->glTable; - void *ptr = NULL; + void *ptr; PTR32 ret;
pthread_mutex_lock( &wgl_lock ); - if (!*client_ptr) ptr = funcs->p_glMapBufferRange( target, offset, length, access ); - ret = wow64_map_buffer( teb, target, 0, offset, length, access, ptr, client_ptr ); + ptr = funcs->p_glMapBufferRange( target, offset, length, access ); + ret = wow64_map_buffer( teb, target, 0, offset, length, access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ret; }
-static PTR32 wow64_gl_map_named_buffer( TEB *teb, GLuint name, GLenum access, PTR32 *client_ptr, - PFN_glMapNamedBuffer gl_map_named_buffer64 ) +static PTR32 wow64_gl_map_named_buffer( TEB *teb, GLuint name, GLenum access, PFN_glMapNamedBuffer gl_map_named_buffer64 ) { GLbitfield range_access = map_range_flags_from_map_flags( access ); - void *ptr = NULL; + void *ptr; PTR32 ret;
pthread_mutex_lock( &wgl_lock ); - if (!*client_ptr) ptr = gl_map_named_buffer64( name, access ); - ret = wow64_map_buffer( teb, 0, name, 0, 0, range_access, ptr, client_ptr ); + ptr = gl_map_named_buffer64( name, access ); + ret = wow64_map_buffer( teb, 0, name, 0, 0, range_access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ret; }
-PTR32 wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access, PTR32 *client_ptr ) +PTR32 wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer( teb, buffer, access, client_ptr, funcs->p_glMapNamedBuffer ); + return wow64_gl_map_named_buffer( teb, buffer, access, funcs->p_glMapNamedBuffer ); }
-PTR32 wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access, PTR32 *client_ptr ) +PTR32 wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access ) { const struct opengl_funcs *funcs = teb->glTable; - return wow64_gl_map_named_buffer( teb, buffer, access, client_ptr, funcs->p_glMapNamedBufferEXT ); + return wow64_gl_map_named_buffer( teb, buffer, access, funcs->p_glMapNamedBufferEXT ); }
static NTSTATUS wow64_gl_map_named_buffer_range( TEB *teb, GLuint name, GLintptr offset, GLsizeiptr length, GLbitfield access, - PTR32 *client_ptr, PFN_glMapNamedBufferRange gl_map_named_buffer_range64 ) + PFN_glMapNamedBufferRange gl_map_named_buffer_range64 ) { - void *ptr = NULL; + void *ptr; PTR32 ret;
pthread_mutex_lock( &wgl_lock ); - if (!*client_ptr) ptr = gl_map_named_buffer_range64( name, offset, length, access ); - ret = wow64_map_buffer( teb, 0, name, offset, length, access, ptr, client_ptr ); + ptr = gl_map_named_buffer_range64( name, offset, length, access ); + ret = wow64_map_buffer( teb, 0, name, offset, length, access, ptr ); pthread_mutex_unlock( &wgl_lock ); return ret; }
-PTR32 wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ) +PTR32 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, client_ptr, funcs->p_glMapNamedBufferRange ); + return wow64_gl_map_named_buffer_range( teb, buffer, offset, length, access, funcs->p_glMapNamedBufferRange ); }
-PTR32 wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access, PTR32 *client_ptr ) +PTR32 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, client_ptr, funcs->p_glMapNamedBufferRangeEXT ); + return wow64_gl_map_named_buffer_range( teb, buffer, offset, length, access, funcs->p_glMapNamedBufferRangeEXT ); }
static void wow64_unmap_buffer( struct buffer *buffer ) diff --git a/dlls/opengl32/unixlib.h b/dlls/opengl32/unixlib.h index db2efff8f50..649d7e8b3b8 100644 --- a/dlls/opengl32/unixlib.h +++ b/dlls/opengl32/unixlib.h @@ -12379,9 +12379,6 @@ struct glMapBuffer_params GLenum target; GLenum access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapBufferARB_params @@ -12390,9 +12387,6 @@ struct glMapBufferARB_params GLenum target; GLenum access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapBufferRange_params @@ -12403,9 +12397,6 @@ struct glMapBufferRange_params GLsizeiptr length; GLbitfield access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapControlPointsNV_params @@ -12446,9 +12437,6 @@ struct glMapNamedBuffer_params GLuint buffer; GLenum access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapNamedBufferEXT_params @@ -12457,9 +12445,6 @@ struct glMapNamedBufferEXT_params GLuint buffer; GLenum access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapNamedBufferRange_params @@ -12470,9 +12455,6 @@ struct glMapNamedBufferRange_params GLsizeiptr length; GLbitfield access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapNamedBufferRangeEXT_params @@ -12483,9 +12465,6 @@ struct glMapNamedBufferRangeEXT_params GLsizeiptr length; GLbitfield access; void *ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glMapObjectBufferATI_params diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index 0241ca16a41..a9ef28ec85d 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -1690,108 +1690,6 @@ const GLchar * WINAPI wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum return args.ret; }
-static void *gl_map_buffer( enum unix_funcs code, GLenum target, GLenum access ) -{ - struct glMapBuffer_params args = - { - .teb = NtCurrentTeb(), - .target = target, - .access = access, - }; - NTSTATUS status; - - TRACE( "target %d, access %d\n", target, access ); - - status = WINE_UNIX_CALL( code, &args ); - if (status) WARN( "glMapBuffer returned %#lx\n", status ); - return args.ret; -} - -void * WINAPI glMapBuffer( GLenum target, GLenum access ) -{ - return gl_map_buffer( unix_glMapBuffer, target, access ); -} - -void * WINAPI glMapBufferARB( GLenum target, GLenum access ) -{ - return gl_map_buffer( unix_glMapBufferARB, target, access ); -} - -void * WINAPI glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - struct glMapBufferRange_params args = - { - .teb = NtCurrentTeb(), - .target = target, - .offset = offset, - .length = length, - .access = access, - }; - NTSTATUS status; - - TRACE( "target %d, offset %Id, length %Id, access %d\n", target, offset, length, access ); - - status = UNIX_CALL( glMapBufferRange, &args ); - if (status) WARN( "glMapBufferRange returned %#lx\n", status ); - return args.ret; -} - -static void *gl_map_named_buffer( enum unix_funcs code, GLuint buffer, GLenum access ) -{ - struct glMapNamedBuffer_params args = - { - .teb = NtCurrentTeb(), - .buffer = buffer, - .access = access, - }; - NTSTATUS status; - - TRACE( "(%d, %d)\n", buffer, access ); - - status = WINE_UNIX_CALL( code, &args ); - if (status) WARN( "glMapNamedBuffer returned %#lx\n", status ); - return args.ret; -} - -void * WINAPI glMapNamedBuffer( GLuint buffer, GLenum access ) -{ - return gl_map_named_buffer( unix_glMapNamedBuffer, buffer, access ); -} - -void * WINAPI glMapNamedBufferEXT( GLuint buffer, GLenum access ) -{ - return gl_map_named_buffer( unix_glMapNamedBufferEXT, buffer, access ); -} - -static void *gl_map_named_buffer_range( enum unix_funcs code, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - struct glMapNamedBufferRange_params args = - { - .teb = NtCurrentTeb(), - .buffer = buffer, - .offset = offset, - .length = length, - .access = access, - }; - NTSTATUS status; - - TRACE( "buffer %d, offset %Id, length %Id, access %d\n", buffer, offset, length, access ); - - status = WINE_UNIX_CALL( code, &args ); - if (status) WARN( "glMapNamedBufferRange returned %#lx\n", status ); - return args.ret; -} - -void * WINAPI glMapNamedBufferRange( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - return gl_map_named_buffer_range( unix_glMapNamedBufferRange, buffer, offset, length, access ); -} - -void * WINAPI glMapNamedBufferRangeEXT( GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ) -{ - return gl_map_named_buffer_range( unix_glMapNamedBufferRangeEXT, buffer, offset, length, access ); -} - static GLboolean gl_unmap_buffer( enum unix_funcs code, GLenum target ) { struct glUnmapBuffer_params args =
From: Jacek Caban jacek@codeweavers.com
--- dlls/opengl32/make_opengl | 19 +++----------- dlls/opengl32/thunks.c | 40 +++++++++++++++++++++++++--- dlls/opengl32/unix_thunks.c | 12 +++------ dlls/opengl32/unix_thunks.h | 8 +++--- dlls/opengl32/unix_wgl.c | 8 +++--- dlls/opengl32/unixlib.h | 12 --------- dlls/opengl32/wgl.c | 52 ------------------------------------- 7 files changed, 52 insertions(+), 99 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index ed75fa8634f..cf38747eae5 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -173,10 +173,6 @@ my %manual_win_thunks = ( "glGetString" => 1, "glGetStringi" => 1, - "glUnmapBuffer" => 1, - "glUnmapBufferARB" => 1, - "glUnmapNamedBuffer" => 1, - "glUnmapNamedBufferEXT" => 1, "wglChoosePixelFormatARB" => 1, "wglGetExtensionsStringARB" => 1, "wglGetExtensionsStringEXT" => 1, @@ -298,10 +294,10 @@ my %manual_wow64_wrappers = "glMapNamedBufferEXT" => 0, "glMapNamedBufferRange" => 0, "glMapNamedBufferRangeEXT" => 0, - "glUnmapBuffer" => 1, - "glUnmapBufferARB" => 1, - "glUnmapNamedBuffer" => 1, - "glUnmapNamedBufferEXT" => 1, + "glUnmapBuffer" => 0, + "glUnmapBufferARB" => 0, + "glUnmapNamedBuffer" => 0, + "glUnmapNamedBufferEXT" => 0, "glWaitSync" => 0, ); my %wow64_invalidate_buffer = @@ -529,11 +525,6 @@ sub generate_unix_thunk($$$$) $need_manual_thunk = 1 if $ret_type =~ /(GLsync|PROC|GLintptr|*)/; } } - if ($manual_wow64_wrappers{$name}) - { - $ret .= " PTR32 client_ptr;\n"; - $call_args .= " ¶ms->client_ptr,"; - } $ret .= " } *params = args;\n"; if (!$need_wrap && $need_manual_thunk) { @@ -653,7 +644,6 @@ sub generate_wrapper_declaration($$$) } $ret .= " " . $arg->textContent() . ","; } - $ret .= " PTR32 *client_ptr," if $manual_wow64_wrappers{$name}; $ret =~ s/,$/ /; $ret .= ");\n"; return $ret; @@ -758,7 +748,6 @@ sub generate_func_params($$) $ret .= sprintf " %s;\n", $arg->textContent(); } $ret .= sprintf " %sret;\n", $func->[0]->textContent() unless is_void_func($func); - $ret .= "#ifndef _WIN64\n void *client_ptr;\n#endif\n" if $manual_wow64_wrappers{$name}; $ret .= "};\n\n"; return $ret; } diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index 94f2df1878e..9872b11ceca 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -20723,6 +20723,42 @@ static void WINAPI glUnlockArraysEXT(void) if ((status = UNIX_CALL( glUnlockArraysEXT, &args ))) WARN( "glUnlockArraysEXT returned %#lx\n", status ); }
+static GLboolean WINAPI glUnmapBuffer( GLenum target ) +{ + struct glUnmapBuffer_params args = { .teb = NtCurrentTeb(), .target = target }; + NTSTATUS status; + TRACE( "target %d\n", target ); + if ((status = UNIX_CALL( glUnmapBuffer, &args ))) WARN( "glUnmapBuffer returned %#lx\n", status ); + return args.ret; +} + +static GLboolean WINAPI glUnmapBufferARB( GLenum target ) +{ + struct glUnmapBufferARB_params args = { .teb = NtCurrentTeb(), .target = target }; + NTSTATUS status; + TRACE( "target %d\n", target ); + if ((status = UNIX_CALL( glUnmapBufferARB, &args ))) WARN( "glUnmapBufferARB returned %#lx\n", status ); + return args.ret; +} + +static GLboolean WINAPI glUnmapNamedBuffer( GLuint buffer ) +{ + struct glUnmapNamedBuffer_params args = { .teb = NtCurrentTeb(), .buffer = buffer }; + NTSTATUS status; + TRACE( "buffer %d\n", buffer ); + if ((status = UNIX_CALL( glUnmapNamedBuffer, &args ))) WARN( "glUnmapNamedBuffer returned %#lx\n", status ); + return args.ret; +} + +static GLboolean WINAPI glUnmapNamedBufferEXT( GLuint buffer ) +{ + struct glUnmapNamedBufferEXT_params args = { .teb = NtCurrentTeb(), .buffer = buffer }; + NTSTATUS status; + TRACE( "buffer %d\n", buffer ); + if ((status = UNIX_CALL( glUnmapNamedBufferEXT, &args ))) WARN( "glUnmapNamedBufferEXT returned %#lx\n", status ); + return args.ret; +} + static void WINAPI glUnmapObjectBufferATI( GLuint buffer ) { struct glUnmapObjectBufferATI_params args = { .teb = NtCurrentTeb(), .buffer = buffer }; @@ -24361,10 +24397,6 @@ static BOOL WINAPI wglSwapIntervalEXT( int interval ) }
extern const GLubyte * WINAPI glGetStringi( GLenum name, GLuint index ); -extern GLboolean WINAPI glUnmapBuffer( GLenum target ); -extern GLboolean WINAPI glUnmapBufferARB( GLenum target ); -extern GLboolean WINAPI glUnmapNamedBuffer( GLuint buffer ); -extern GLboolean WINAPI glUnmapNamedBufferEXT( GLuint buffer ); extern BOOL WINAPI wglChoosePixelFormatARB( HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats ); extern HDC WINAPI wglGetCurrentReadDCARB(void); extern const char * WINAPI wglGetExtensionsStringARB( HDC hdc ); diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 6c2be9b763c..727df735759 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -71801,10 +71801,9 @@ static NTSTATUS wow64_ext_glUnmapBuffer( void *args ) PTR32 teb; GLenum target; GLboolean ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glUnmapBuffer( teb, params->target, ¶ms->client_ptr ); + params->ret = wow64_glUnmapBuffer( teb, params->target ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -71816,10 +71815,9 @@ static NTSTATUS wow64_ext_glUnmapBufferARB( void *args ) PTR32 teb; GLenum target; GLboolean ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glUnmapBufferARB( teb, params->target, ¶ms->client_ptr ); + params->ret = wow64_glUnmapBufferARB( teb, params->target ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -71831,10 +71829,9 @@ static NTSTATUS wow64_ext_glUnmapNamedBuffer( void *args ) PTR32 teb; GLuint buffer; GLboolean ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glUnmapNamedBuffer( teb, params->buffer, ¶ms->client_ptr ); + params->ret = wow64_glUnmapNamedBuffer( teb, params->buffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -71846,10 +71843,9 @@ static NTSTATUS wow64_ext_glUnmapNamedBufferEXT( void *args ) PTR32 teb; GLuint buffer; GLboolean ret; - PTR32 client_ptr; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wow64_glUnmapNamedBufferEXT( teb, params->buffer, ¶ms->client_ptr ); + params->ret = wow64_glUnmapNamedBufferEXT( teb, params->buffer ); 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 f032722bbc1..f3084ed237d 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -64,9 +64,9 @@ extern PTR32 wow64_glMapNamedBuffer( TEB *teb, GLuint buffer, GLenum access ); extern PTR32 wow64_glMapNamedBufferEXT( TEB *teb, GLuint buffer, GLenum access ); extern PTR32 wow64_glMapNamedBufferRange( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); extern PTR32 wow64_glMapNamedBufferRangeEXT( TEB *teb, GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access ); -extern GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PTR32 *client_ptr ); -extern GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target, PTR32 *client_ptr ); -extern GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer, PTR32 *client_ptr ); -extern GLboolean wow64_glUnmapNamedBufferEXT( TEB *teb, GLuint buffer, PTR32 *client_ptr ); +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_glWaitSync( TEB *teb, GLsync sync, GLbitfield flags, GLuint64 timeout ); #endif diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 01071f4dced..bd37d661ce6 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -2454,13 +2454,13 @@ static GLboolean wow64_unmap_target_buffer( TEB *teb, GLenum target, PFN_glUnmap return ret; }
-GLboolean wow64_glUnmapBuffer( TEB *teb, GLenum target, PTR32 *client_ptr ) +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, PTR32 *client_ptr ) +GLboolean wow64_glUnmapBufferARB( TEB *teb, GLenum target ) { const struct opengl_funcs *funcs = teb->glTable; return wow64_unmap_target_buffer( teb, target, funcs->p_glUnmapBufferARB ); @@ -2478,13 +2478,13 @@ static GLboolean wow64_gl_unmap_named_buffer( TEB *teb, GLuint name, PFN_glUnmap return ret; }
-GLboolean wow64_glUnmapNamedBuffer( TEB *teb, GLuint buffer, PTR32 *client_ptr ) +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, PTR32 *client_ptr ) +GLboolean wow64_glUnmapNamedBufferEXT( TEB *teb, GLuint buffer ) { const struct opengl_funcs *funcs = teb->glTable; return wow64_gl_unmap_named_buffer( teb, buffer, funcs->p_glUnmapNamedBufferEXT ); diff --git a/dlls/opengl32/unixlib.h b/dlls/opengl32/unixlib.h index 649d7e8b3b8..a232b737dd3 100644 --- a/dlls/opengl32/unixlib.h +++ b/dlls/opengl32/unixlib.h @@ -21712,9 +21712,6 @@ struct glUnmapBuffer_params TEB *teb; GLenum target; GLboolean ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glUnmapBufferARB_params @@ -21722,9 +21719,6 @@ struct glUnmapBufferARB_params TEB *teb; GLenum target; GLboolean ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glUnmapNamedBuffer_params @@ -21732,9 +21726,6 @@ struct glUnmapNamedBuffer_params TEB *teb; GLuint buffer; GLboolean ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glUnmapNamedBufferEXT_params @@ -21742,9 +21733,6 @@ struct glUnmapNamedBufferEXT_params TEB *teb; GLuint buffer; GLboolean ret; -#ifndef _WIN64 - void *client_ptr; -#endif };
struct glUnmapObjectBufferATI_params diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index a9ef28ec85d..6125d9a4574 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -1690,58 +1690,6 @@ const GLchar * WINAPI wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum return args.ret; }
-static GLboolean gl_unmap_buffer( enum unix_funcs code, GLenum target ) -{ - struct glUnmapBuffer_params args = - { - .teb = NtCurrentTeb(), - .target = target, - }; - NTSTATUS status; - - TRACE( "target %d\n", target ); - - status = WINE_UNIX_CALL( code, &args ); - if (status) WARN( "glUnmapBuffer returned %#lx\n", status ); - return args.ret; -} - -GLboolean WINAPI glUnmapBuffer( GLenum target ) -{ - return gl_unmap_buffer( unix_glUnmapBuffer, target ); -} - -GLboolean WINAPI glUnmapBufferARB( GLenum target ) -{ - return gl_unmap_buffer( unix_glUnmapBufferARB, target ); -} - -static GLboolean gl_unmap_named_buffer( enum unix_funcs code, GLuint buffer ) -{ - struct glUnmapNamedBuffer_params args = - { - .teb = NtCurrentTeb(), - .buffer = buffer, - }; - NTSTATUS status; - - TRACE( "buffer %d\n", buffer ); - - status = WINE_UNIX_CALL( code, &args ); - if (status) WARN( "glUnmapNamedBuffer returned %#lx\n", status ); - return args.ret; -} - -GLboolean WINAPI glUnmapNamedBuffer( GLuint buffer ) -{ - return gl_unmap_named_buffer( unix_glUnmapNamedBuffer, buffer ); -} - -GLboolean WINAPI glUnmapNamedBufferEXT( GLuint buffer ) -{ - return gl_unmap_named_buffer( unix_glUnmapNamedBufferEXT, buffer ); -} - typedef void (WINAPI *gl_debug_message)(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar *, const void *);
static NTSTATUS WINAPI call_gl_debug_message_callback( void *args, ULONG size )