From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 6 ++++-- dlls/opengl32/private.h | 2 +- dlls/opengl32/thunks.c | 36 +++++++++++++++++++++++++++++++----- dlls/opengl32/wgl.c | 2 +- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 7f1f36ce6eb..2962ed9efe1 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -1188,6 +1188,7 @@ sub add_extension($) sub get_integer_call($) { my ($name, $func) = @_; + my $index = 0; my $params; my $pname; @@ -1196,13 +1197,14 @@ sub get_integer_call($) my $name = get_arg_name( $arg ); my $type = get_arg_type( $arg ); $pname = $name if $name =~ /^(pname|target|value)$/; + $index = $name if $name eq "index"; $params = $name; } return 0 if !$pname; - my $hook = "if (get_integer( $pname, &integer )) *$params = integer;"; - return $hook if $name =~ /^glGet(Boolean|Double|Float|Integer|Integer64)v/; + my $hook = "if (get_integer( $pname, $index, &integer )) *$params = integer;"; + return $hook if $name =~ /^glGet(Boolean|Double|Float|Integer)/; } sub parse_registry($) diff --git a/dlls/opengl32/private.h b/dlls/opengl32/private.h index 6c45a665336..cb7b7f1fa0a 100644 --- a/dlls/opengl32/private.h +++ b/dlls/opengl32/private.h @@ -44,7 +44,7 @@ extern BOOL get_context_from_handle( HGLRC handle, HGLRC *obj ); extern BOOL get_sync_from_handle( GLsync handle, GLsync *obj ); extern void set_gl_error( GLenum error ); extern struct registry_entry *get_function_entry( const char *name ); -extern BOOL get_integer( GLenum name, GLint *data ); +extern BOOL get_integer( GLenum name, GLuint index, GLint *data ); enum object_type { diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index 8c4a483de61..4e23546ecaa 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -837,7 +837,7 @@ void WINAPI glGetBooleanv( GLenum pname, GLboolean *data ) int integer; TRACE( "pname %d, data %p\n", pname, data ); if ((status = UNIX_CALL( glGetBooleanv, &args ))) WARN( "glGetBooleanv returned %#lx\n", status ); - else if (get_integer( pname, &integer )) *data = integer; + else if (get_integer( pname, 0, &integer )) *data = integer; } void WINAPI glGetClipPlane( GLenum plane, GLdouble *equation ) @@ -855,7 +855,7 @@ void WINAPI glGetDoublev( GLenum pname, GLdouble *data ) int integer; TRACE( "pname %d, data %p\n", pname, data ); if ((status = UNIX_CALL( glGetDoublev, &args ))) WARN( "glGetDoublev returned %#lx\n", status ); - else if (get_integer( pname, &integer )) *data = integer; + else if (get_integer( pname, 0, &integer )) *data = integer; } GLenum WINAPI glGetError(void) @@ -874,7 +874,7 @@ void WINAPI glGetFloatv( GLenum pname, GLfloat *data ) int integer; TRACE( "pname %d, data %p\n", pname, data ); if ((status = UNIX_CALL( glGetFloatv, &args ))) WARN( "glGetFloatv returned %#lx\n", status ); - else if (get_integer( pname, &integer )) *data = integer; + else if (get_integer( pname, 0, &integer )) *data = integer; } void WINAPI glGetIntegerv( GLenum pname, GLint *data ) @@ -884,7 +884,7 @@ void WINAPI glGetIntegerv( GLenum pname, GLint *data ) int integer; TRACE( "pname %d, data %p\n", pname, data ); if ((status = UNIX_CALL( glGetIntegerv, &args ))) WARN( "glGetIntegerv returned %#lx\n", status ); - else if (get_integer( pname, &integer )) *data = integer; + else if (get_integer( pname, 0, &integer )) *data = integer; } void WINAPI glGetLightfv( GLenum light, GLenum pname, GLfloat *params ) @@ -7920,16 +7920,20 @@ static void WINAPI glGetBooleanIndexedvEXT( GLenum target, GLuint index, GLboole { struct glGetBooleanIndexedvEXT_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetBooleanIndexedvEXT, &args ))) WARN( "glGetBooleanIndexedvEXT returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetBooleani_v( GLenum target, GLuint index, GLboolean *data ) { struct glGetBooleani_v_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetBooleani_v, &args ))) WARN( "glGetBooleani_v returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetBufferParameteri64v( GLenum target, GLenum pname, GLint64 *params ) @@ -8300,24 +8304,30 @@ static void WINAPI glGetDoubleIndexedvEXT( GLenum target, GLuint index, GLdouble { struct glGetDoubleIndexedvEXT_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetDoubleIndexedvEXT, &args ))) WARN( "glGetDoubleIndexedvEXT returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetDoublei_v( GLenum target, GLuint index, GLdouble *data ) { struct glGetDoublei_v_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetDoublei_v, &args ))) WARN( "glGetDoublei_v returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetDoublei_vEXT( GLenum pname, GLuint index, GLdouble *params ) { struct glGetDoublei_vEXT_params args = { .teb = NtCurrentTeb(), .pname = pname, .index = index, .params = params }; NTSTATUS status; + int integer; TRACE( "pname %d, index %d, params %p\n", pname, index, params ); if ((status = UNIX_CALL( glGetDoublei_vEXT, &args ))) WARN( "glGetDoublei_vEXT returned %#lx\n", status ); + else if (get_integer( pname, index, &integer )) *params = integer; } static void WINAPI glGetFenceivNV( GLuint fence, GLenum pname, GLint *params ) @@ -8372,24 +8382,30 @@ static void WINAPI glGetFloatIndexedvEXT( GLenum target, GLuint index, GLfloat * { struct glGetFloatIndexedvEXT_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetFloatIndexedvEXT, &args ))) WARN( "glGetFloatIndexedvEXT returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetFloati_v( GLenum target, GLuint index, GLfloat *data ) { struct glGetFloati_v_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetFloati_v, &args ))) WARN( "glGetFloati_v returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetFloati_vEXT( GLenum pname, GLuint index, GLfloat *params ) { struct glGetFloati_vEXT_params args = { .teb = NtCurrentTeb(), .pname = pname, .index = index, .params = params }; NTSTATUS status; + int integer; TRACE( "pname %d, index %d, params %p\n", pname, index, params ); if ((status = UNIX_CALL( glGetFloati_vEXT, &args ))) WARN( "glGetFloati_vEXT returned %#lx\n", status ); + else if (get_integer( pname, index, &integer )) *params = integer; } static void WINAPI glGetFogFuncSGIS( GLfloat *points ) @@ -8653,8 +8669,10 @@ static void WINAPI glGetInteger64i_v( GLenum target, GLuint index, GLint64 *data { struct glGetInteger64i_v_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetInteger64i_v, &args ))) WARN( "glGetInteger64i_v returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetInteger64v( GLenum pname, GLint64 *data ) @@ -8664,39 +8682,47 @@ static void WINAPI glGetInteger64v( GLenum pname, GLint64 *data ) int integer; TRACE( "pname %d, data %p\n", pname, data ); if ((status = UNIX_CALL( glGetInteger64v, &args ))) WARN( "glGetInteger64v returned %#lx\n", status ); - else if (get_integer( pname, &integer )) *data = integer; + else if (get_integer( pname, 0, &integer )) *data = integer; } static void WINAPI glGetIntegerIndexedvEXT( GLenum target, GLuint index, GLint *data ) { struct glGetIntegerIndexedvEXT_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetIntegerIndexedvEXT, &args ))) WARN( "glGetIntegerIndexedvEXT returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetIntegeri_v( GLenum target, GLuint index, GLint *data ) { struct glGetIntegeri_v_params args = { .teb = NtCurrentTeb(), .target = target, .index = index, .data = data }; NTSTATUS status; + int integer; TRACE( "target %d, index %d, data %p\n", target, index, data ); if ((status = UNIX_CALL( glGetIntegeri_v, &args ))) WARN( "glGetIntegeri_v returned %#lx\n", status ); + else if (get_integer( target, index, &integer )) *data = integer; } static void WINAPI glGetIntegerui64i_vNV( GLenum value, GLuint index, GLuint64EXT *result ) { struct glGetIntegerui64i_vNV_params args = { .teb = NtCurrentTeb(), .value = value, .index = index, .result = result }; NTSTATUS status; + int integer; TRACE( "value %d, index %d, result %p\n", value, index, result ); if ((status = UNIX_CALL( glGetIntegerui64i_vNV, &args ))) WARN( "glGetIntegerui64i_vNV returned %#lx\n", status ); + else if (get_integer( value, index, &integer )) *result = integer; } static void WINAPI glGetIntegerui64vNV( GLenum value, GLuint64EXT *result ) { struct glGetIntegerui64vNV_params args = { .teb = NtCurrentTeb(), .value = value, .result = result }; NTSTATUS status; + int integer; TRACE( "value %d, result %p\n", value, result ); if ((status = UNIX_CALL( glGetIntegerui64vNV, &args ))) WARN( "glGetIntegerui64vNV returned %#lx\n", status ); + else if (get_integer( value, 0, &integer )) *result = integer; } static void WINAPI glGetInternalformatSampleivNV( GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params ) diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index db021aa5842..ad0f1f48139 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -2306,7 +2306,7 @@ GLsync WINAPI glImportSyncEXT( GLenum external_sync_type, GLintptr external_sync return NULL; } -BOOL get_integer( GLenum name, GLint *data ) +BOOL get_integer( GLenum name, GLuint index, GLint *data ) { struct context *ctx; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11091