[PATCH 5/8] opengl32: Introduce WGL_WINE_query_renderer.
Henri Verbeet
hverbeet at codeweavers.com
Tue Mar 15 10:55:12 CDT 2016
This is a fairly straightforward adaptation of GLX_MESA_query_renderer to WGL.
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/opengl32/make_opengl | 27 ++++++++++++++++++++++-
dlls/opengl32/opengl_ext.c | 8 +++++--
dlls/opengl32/opengl_ext.h | 5 +++++
dlls/opengl32/opengl_norm.c | 8 +++++++
dlls/opengl32/wgl.c | 52 +++++++++++++++++++++++++++++++++++++++++++++
include/wine/wgl.h | 12 +++++++++++
include/wine/wgl_driver.h | 6 +++++-
7 files changed, 114 insertions(+), 4 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl
index a7d656d..45e3f72 100755
--- a/dlls/opengl32/make_opengl
+++ b/dlls/opengl32/make_opengl
@@ -574,6 +574,17 @@ my %ext_functions =
"glDeleteObjectBufferATI" => [ "void", [ [ "GLuint", "buffer" ] ], [ "GL_ATI_vertex_array_object" ] ],
"wglSetPixelFormatWINE" => [ "BOOL", [ [ "HDC", "hdc" ],
[ "int", "format" ] ], [ "WGL_WINE_pixel_format_passthrough" ] ],
+ "wglQueryCurrentRendererIntegerWINE" => [ "BOOL", [ [ "GLenum", "attribute" ],
+ [ "GLuint *", "value" ] ], [ "WGL_WINE_query_renderer" ] ],
+ "wglQueryCurrentRendererStringWINE" => [ "const GLchar *", [ [ "GLenum", "attribute" ] ],
+ [ "WGL_WINE_query_renderer" ] ],
+ "wglQueryRendererIntegerWINE" => [ "BOOL", [ [ "HDC", "dc" ],
+ [ "GLint", "renderer" ],
+ [ "GLenum", "attribute" ],
+ [ "GLuint *", "value" ] ], [ "WGL_WINE_query_renderer" ] ],
+ "wglQueryRendererStringWINE" => [ "const GLchar *", [ [ "HDC", "dc" ],
+ [ "GLint", "renderer" ],
+ [ "GLenum", "attribute" ] ], [ "WGL_WINE_query_renderer" ] ],
);
@@ -614,7 +625,21 @@ my %supported_wgl_extensions =
"WGL_WINE_pixel_format_passthrough" => 1,
);
-my %enums = ();
+my %enums =
+ (
+ "WGL_RENDERER_VENDOR_ID_WINE" => "0x8183",
+ "WGL_RENDERER_DEVICE_ID_WINE" => "0x8184",
+ "WGL_RENDERER_VERSION_WINE" => "0x8185",
+ "WGL_RENDERER_ACCELERATED_WINE" => "0x8186",
+ "WGL_RENDERER_VIDEO_MEMORY_WINE" => "0x8187",
+ "WGL_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_WINE" => "0x8188",
+ "WGL_RENDERER_PREFERRED_PROFILE_WINE" => "0x8189",
+ "WGL_RENDERER_OPENGL_CORE_PROFILE_VERSION_WINE" => "0x818A",
+ "WGL_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_WINE" => "0x818B",
+ "WGL_RENDERER_OPENGL_ES_PROFILE_VERSION_WINE" => "0x818C",
+ "WGL_RENDERER_OPENGL_ES2_PROFILE_VERSION_WINE" => "0x818D",
+ "WGL_RENDERER_ID_WINE" => "0x818E",
+ );
sub parse_variable($)
{
diff --git a/dlls/opengl32/opengl_ext.c b/dlls/opengl32/opengl_ext.c
index 4f812ec..2a3b435 100644
--- a/dlls/opengl32/opengl_ext.c
+++ b/dlls/opengl32/opengl_ext.c
@@ -14,7 +14,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(opengl);
-const int extension_registry_size = 2576;
+const int extension_registry_size = 2580;
static void WINAPI glAccumxOES( GLenum op, GLfixed value ) {
const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
@@ -15342,7 +15342,7 @@ static void WINAPI glWriteMaskEXT( GLuint res, GLuint in, GLenum outX, GLenum ou
funcs->ext.p_glWriteMaskEXT( res, in, outX, outY, outZ, outW );
}
-const OpenGL_extension extension_registry[2576] = {
+const OpenGL_extension extension_registry[2580] = {
{ "glAccumxOES", "GL_OES_fixed_point", glAccumxOES },
{ "glActiveProgramEXT", "GL_EXT_separate_shader_objects", glActiveProgramEXT },
{ "glActiveShaderProgram", "GL_ARB_separate_shader_objects GL_VERSION_4_1", glActiveShaderProgram },
@@ -17913,7 +17913,11 @@ const OpenGL_extension extension_registry[2576] = {
{ "wglGetPixelFormatAttribivARB", "WGL_ARB_pixel_format", wglGetPixelFormatAttribivARB },
{ "wglGetSwapIntervalEXT", "WGL_EXT_swap_control", wglGetSwapIntervalEXT },
{ "wglMakeContextCurrentARB", "WGL_ARB_make_current_read", wglMakeContextCurrentARB },
+ { "wglQueryCurrentRendererIntegerWINE", "WGL_WINE_query_renderer", wglQueryCurrentRendererIntegerWINE },
+ { "wglQueryCurrentRendererStringWINE", "WGL_WINE_query_renderer", wglQueryCurrentRendererStringWINE },
{ "wglQueryPbufferARB", "WGL_ARB_pbuffer", wglQueryPbufferARB },
+ { "wglQueryRendererIntegerWINE", "WGL_WINE_query_renderer", wglQueryRendererIntegerWINE },
+ { "wglQueryRendererStringWINE", "WGL_WINE_query_renderer", wglQueryRendererStringWINE },
{ "wglReleasePbufferDCARB", "WGL_ARB_pbuffer", wglReleasePbufferDCARB },
{ "wglReleaseTexImageARB", "WGL_ARB_render_texture", wglReleaseTexImageARB },
{ "wglSetPbufferAttribARB", "WGL_ARB_render_texture", wglSetPbufferAttribARB },
diff --git a/dlls/opengl32/opengl_ext.h b/dlls/opengl32/opengl_ext.h
index 2e49d4a..4f1791a 100644
--- a/dlls/opengl32/opengl_ext.h
+++ b/dlls/opengl32/opengl_ext.h
@@ -32,5 +32,10 @@ extern const OpenGL_extension extension_registry[] DECLSPEC_HIDDEN;
extern const int extension_registry_size DECLSPEC_HIDDEN;
extern BOOL WINAPI wglSetPixelFormatWINE( HDC hdc, int format ) DECLSPEC_HIDDEN;
+extern BOOL WINAPI wglQueryCurrentRendererIntegerWINE( GLenum attribute, GLuint *value ) DECLSPEC_HIDDEN;
+extern const GLchar * WINAPI wglQueryCurrentRendererStringWINE( GLenum attribute );
+extern BOOL WINAPI wglQueryRendererIntegerWINE( HDC dc, GLint renderer,
+ GLenum attribute, GLuint *value ) DECLSPEC_HIDDEN;
+extern const GLchar * WINAPI wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum attribute ) DECLSPEC_HIDDEN;
#endif /* __DLLS_OPENGL32_OPENGL_EXT_H */
diff --git a/dlls/opengl32/opengl_norm.c b/dlls/opengl32/opengl_norm.c
index 12ffe1a..e396094 100644
--- a/dlls/opengl32/opengl_norm.c
+++ b/dlls/opengl32/opengl_norm.c
@@ -5932,7 +5932,11 @@ static BOOL null_wglGetPixelFormatAttribfvARB( HDC hdc, int iPixelFormat, int iL
static BOOL null_wglGetPixelFormatAttribivARB( HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int* piValues ) { return 0; }
static int null_wglGetSwapIntervalEXT( void ) { return 0; }
static BOOL null_wglMakeContextCurrentARB( HDC hDrawDC, HDC hReadDC, struct wgl_context * hglrc ) { return 0; }
+static BOOL null_wglQueryCurrentRendererIntegerWINE( GLenum attribute, GLuint * value ) { return 0; }
+static const GLchar * null_wglQueryCurrentRendererStringWINE( GLenum attribute ) { return 0; }
static BOOL null_wglQueryPbufferARB( struct wgl_pbuffer * hPbuffer, int iAttribute, int* piValue ) { return 0; }
+static BOOL null_wglQueryRendererIntegerWINE( HDC dc, GLint renderer, GLenum attribute, GLuint * value ) { return 0; }
+static const GLchar * null_wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum attribute ) { return 0; }
static int null_wglReleasePbufferDCARB( struct wgl_pbuffer * hPbuffer, HDC hDC ) { return 0; }
static BOOL null_wglReleaseTexImageARB( struct wgl_pbuffer * hPbuffer, int iBuffer ) { return 0; }
static BOOL null_wglSetPbufferAttribARB( struct wgl_pbuffer * hPbuffer, const int* piAttribList ) { return 0; }
@@ -8862,7 +8866,11 @@ struct opengl_funcs null_opengl_funcs =
null_wglGetPixelFormatAttribivARB,
null_wglGetSwapIntervalEXT,
null_wglMakeContextCurrentARB,
+ null_wglQueryCurrentRendererIntegerWINE,
+ null_wglQueryCurrentRendererStringWINE,
null_wglQueryPbufferARB,
+ null_wglQueryRendererIntegerWINE,
+ null_wglQueryRendererStringWINE,
null_wglReleasePbufferDCARB,
null_wglReleaseTexImageARB,
null_wglSetPbufferAttribARB,
diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c
index f4601dd..932b217 100644
--- a/dlls/opengl32/wgl.c
+++ b/dlls/opengl32/wgl.c
@@ -1213,6 +1213,58 @@ BOOL WINAPI wglSetPixelFormatWINE( HDC hdc, int format )
}
/***********************************************************************
+ * wglQueryCurrentRendererIntegerWINE
+ *
+ * Provided by the WGL_WINE_query_renderer extension.
+ */
+BOOL WINAPI wglQueryCurrentRendererIntegerWINE( GLenum attribute, GLuint *value )
+{
+ const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
+
+ if (!funcs->ext.p_wglQueryCurrentRendererIntegerWINE) return FALSE;
+ return funcs->ext.p_wglQueryCurrentRendererIntegerWINE( attribute, value );
+}
+
+/***********************************************************************
+ * wglQueryCurrentRendererStringWINE
+ *
+ * Provided by the WGL_WINE_query_renderer extension.
+ */
+const GLchar * WINAPI wglQueryCurrentRendererStringWINE( GLenum attribute )
+{
+ const struct opengl_funcs *funcs = NtCurrentTeb()->glTable;
+
+ if (!funcs->ext.p_wglQueryCurrentRendererStringWINE) return NULL;
+ return funcs->ext.p_wglQueryCurrentRendererStringWINE( attribute );
+}
+
+/***********************************************************************
+ * wglQueryRendererIntegerWINE
+ *
+ * Provided by the WGL_WINE_query_renderer extension.
+ */
+BOOL WINAPI wglQueryRendererIntegerWINE( HDC dc, GLint renderer, GLenum attribute, GLuint *value )
+{
+ const struct opengl_funcs *funcs = get_dc_funcs( dc );
+
+ if (!funcs || !funcs->ext.p_wglQueryRendererIntegerWINE) return FALSE;
+ return funcs->ext.p_wglQueryRendererIntegerWINE( dc, renderer, attribute, value );
+}
+
+/***********************************************************************
+ * wglQueryRendererStringWINE
+ *
+ * Provided by the WGL_WINE_query_renderer extension.
+ */
+const GLchar * WINAPI wglQueryRendererStringWINE( HDC dc, GLint renderer, GLenum attribute )
+{
+ const struct opengl_funcs *funcs = get_dc_funcs( dc );
+
+ if (!funcs || !funcs->ext.p_wglQueryRendererStringWINE) return NULL;
+ return funcs->ext.p_wglQueryRendererStringWINE( dc, renderer, attribute );
+}
+
+/***********************************************************************
* wglUseFontBitmaps_common
*/
static BOOL wglUseFontBitmaps_common( HDC hdc, DWORD first, DWORD count, DWORD listBase, BOOL unicode )
diff --git a/include/wine/wgl.h b/include/wine/wgl.h
index 1cfbeb4..4a46c95 100644
--- a/include/wine/wgl.h
+++ b/include/wine/wgl.h
@@ -5654,6 +5654,18 @@ typedef void GLvoid;
#define GL_ZOOM_X 0x0D16
#define GL_ZOOM_Y 0x0D17
#define GL_Z_EXT 0x87D7
+#define WGL_RENDERER_ACCELERATED_WINE 0x8186
+#define WGL_RENDERER_DEVICE_ID_WINE 0x8184
+#define WGL_RENDERER_ID_WINE 0x818E
+#define WGL_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_WINE 0x818B
+#define WGL_RENDERER_OPENGL_CORE_PROFILE_VERSION_WINE 0x818A
+#define WGL_RENDERER_OPENGL_ES2_PROFILE_VERSION_WINE 0x818D
+#define WGL_RENDERER_OPENGL_ES_PROFILE_VERSION_WINE 0x818C
+#define WGL_RENDERER_PREFERRED_PROFILE_WINE 0x8189
+#define WGL_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_WINE 0x8188
+#define WGL_RENDERER_VENDOR_ID_WINE 0x8183
+#define WGL_RENDERER_VERSION_WINE 0x8185
+#define WGL_RENDERER_VIDEO_MEMORY_WINE 0x8187
void GLAPIENTRY glAccum(GLenum,GLfloat);
void GLAPIENTRY glAlphaFunc(GLenum,GLfloat);
diff --git a/include/wine/wgl_driver.h b/include/wine/wgl_driver.h
index 2505f46..283cf4a 100644
--- a/include/wine/wgl_driver.h
+++ b/include/wine/wgl_driver.h
@@ -7,7 +7,7 @@
#define WINE_GLAPI
#endif
-#define WINE_WGL_DRIVER_VERSION 14
+#define WINE_WGL_DRIVER_VERSION 15
struct wgl_context;
struct wgl_pbuffer;
@@ -2940,7 +2940,11 @@ struct opengl_funcs
BOOL (WINE_GLAPI *p_wglGetPixelFormatAttribivARB)(HDC,int,int,UINT,const int*,int*);
int (WINE_GLAPI *p_wglGetSwapIntervalEXT)(void);
BOOL (WINE_GLAPI *p_wglMakeContextCurrentARB)(HDC,HDC,struct wgl_context *);
+ BOOL (WINE_GLAPI *p_wglQueryCurrentRendererIntegerWINE)(GLenum,GLuint *);
+ const GLchar * (WINE_GLAPI *p_wglQueryCurrentRendererStringWINE)(GLenum);
BOOL (WINE_GLAPI *p_wglQueryPbufferARB)(struct wgl_pbuffer *,int,int*);
+ BOOL (WINE_GLAPI *p_wglQueryRendererIntegerWINE)(HDC,GLint,GLenum,GLuint *);
+ const GLchar * (WINE_GLAPI *p_wglQueryRendererStringWINE)(HDC,GLint,GLenum);
int (WINE_GLAPI *p_wglReleasePbufferDCARB)(struct wgl_pbuffer *,HDC);
BOOL (WINE_GLAPI *p_wglReleaseTexImageARB)(struct wgl_pbuffer *,int);
BOOL (WINE_GLAPI *p_wglSetPbufferAttribARB)(struct wgl_pbuffer *,const int*);
--
2.1.4
More information about the wine-patches
mailing list