Module: wine Branch: master Commit: 97e8f047a4477d7645c285edbeef762c7c5ceb3e URL: http://source.winehq.org/git/wine.git/?a=commit;h=97e8f047a4477d7645c285edbe...
Author: Henri Verbeet hverbeet@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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; + } }