Henri Verbeet : winex11: Implement WGL_WINE_query_renderer on top of GLX_MESA_query_renderer.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Mar 16 11:36:40 CDT 2016
Module: wine
Branch: master
Commit: 97e8f047a4477d7645c285edbeef762c7c5ceb3e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=97e8f047a4477d7645c285edbeef762c7c5ceb3e
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Tue Mar 15 16:55:13 2016 +0100
winex11: Implement WGL_WINE_query_renderer on top of GLX_MESA_query_renderer.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/opengl.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 704d62a..8177b00 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -172,6 +172,8 @@ typedef XID GLXPbuffer;
/** GLX_ARB_pixel_format_float */
#define GLX_RGBA_FLOAT_BIT 0x00000004
#define GLX_RGBA_FLOAT_TYPE 0x20B9
+/** GLX_MESA_query_renderer */
+#define GLX_RENDERER_ID_MESA 0x818E
/** GLX_NV_float_buffer */
#define GLX_FLOAT_COMPONENTS_NV 0x20B0
@@ -405,6 +407,10 @@ static void (*pglXFreeMemoryNV)(GLvoid *pointer);
/* MESA GLX Extensions */
static void (*pglXCopySubBufferMESA)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
static int (*pglXSwapIntervalMESA)(unsigned int interval);
+static Bool (*pglXQueryCurrentRendererIntegerMESA)(int attribute, unsigned int *value);
+static const char *(*pglXQueryCurrentRendererStringMESA)(int attribute);
+static Bool (*pglXQueryRendererIntegerMESA)(Display *dpy, int screen, int renderer, int attribute, unsigned int *value);
+static const char *(*pglXQueryRendererStringMESA)(Display *dpy, int screen, int renderer, int attribute);
/* Standard OpenGL */
static void (*pglFinish)(void);
@@ -730,6 +736,16 @@ static BOOL has_opengl(void)
pglXCopySubBufferMESA = pglXGetProcAddressARB((const GLubyte *) "glXCopySubBufferMESA");
}
+ if (has_extension( WineGLInfo.glxExtensions, "GLX_MESA_query_renderer" ))
+ {
+ pglXQueryCurrentRendererIntegerMESA = pglXGetProcAddressARB(
+ (const GLubyte *)"glXQueryCurrentRendererIntegerMESA" );
+ pglXQueryCurrentRendererStringMESA = pglXGetProcAddressARB(
+ (const GLubyte *)"glXQueryCurrentRendererStringMESA" );
+ pglXQueryRendererIntegerMESA = pglXGetProcAddressARB( (const GLubyte *)"glXQueryRendererIntegerMESA" );
+ pglXQueryRendererStringMESA = pglXGetProcAddressARB( (const GLubyte *)"glXQueryRendererStringMESA" );
+ }
+
X11DRV_WineGL_LoadExtensions();
init_pixel_formats( gdi_display );
return TRUE;
@@ -2069,6 +2085,12 @@ static struct wgl_context *X11DRV_wglCreateContextAttribsARB( HDC hdc, struct wg
pContextAttribList += 2;
ret->numAttribs++;
break;
+ case WGL_RENDERER_ID_WINE:
+ pContextAttribList[0] = GLX_RENDERER_ID_MESA;
+ pContextAttribList[1] = attribList[1];
+ pContextAttribList += 2;
+ ret->numAttribs++;
+ break;
default:
ERR("Unhandled attribList pair: %#x %#x\n", attribList[0], attribList[1]);
}
@@ -3050,6 +3072,26 @@ static BOOL X11DRV_wglSetPixelFormatWINE(HDC hdc, int format)
return set_pixel_format(hdc, format, TRUE);
}
+static BOOL X11DRV_wglQueryCurrentRendererIntegerWINE( GLenum attribute, GLuint *value )
+{
+ return pglXQueryCurrentRendererIntegerMESA( attribute, value );
+}
+
+static const char *X11DRV_wglQueryCurrentRendererStringWINE( GLenum attribute )
+{
+ return pglXQueryCurrentRendererStringMESA( attribute );
+}
+
+static BOOL X11DRV_wglQueryRendererIntegerWINE( HDC dc, GLint renderer, GLenum attribute, GLuint *value )
+{
+ return pglXQueryRendererIntegerMESA( gdi_display, DefaultScreen(gdi_display), renderer, attribute, value );
+}
+
+static const char *X11DRV_wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum attribute )
+{
+ return pglXQueryRendererStringMESA( gdi_display, DefaultScreen(gdi_display), renderer, attribute );
+}
+
/**
* glxRequireVersion (internal)
*
@@ -3195,6 +3237,15 @@ static void X11DRV_WineGL_LoadExtensions(void)
*/
register_extension( "WGL_WINE_pixel_format_passthrough" );
opengl_funcs.ext.p_wglSetPixelFormatWINE = X11DRV_wglSetPixelFormatWINE;
+
+ if (has_extension( WineGLInfo.glxExtensions, "GLX_MESA_query_renderer" ))
+ {
+ register_extension( "WGL_WINE_query_renderer" );
+ opengl_funcs.ext.p_wglQueryCurrentRendererIntegerWINE = X11DRV_wglQueryCurrentRendererIntegerWINE;
+ opengl_funcs.ext.p_wglQueryCurrentRendererStringWINE = X11DRV_wglQueryCurrentRendererStringWINE;
+ opengl_funcs.ext.p_wglQueryRendererIntegerWINE = X11DRV_wglQueryRendererIntegerWINE;
+ opengl_funcs.ext.p_wglQueryRendererStringWINE = X11DRV_wglQueryRendererStringWINE;
+ }
}
More information about the wine-cvs
mailing list