Mesa (master): wgl: Add stw_winsys callback to check which PFD flags should be added
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Nov 18 10:43:32 UTC 2020
Module: Mesa
Branch: master
Commit: c28eb3c6aac99decd7563b4ef987c08aaf9c7a6d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c28eb3c6aac99decd7563b4ef987c08aaf9c7a6d
Author: Jesse Natalie <jenatali at ntdev.microsoft.com>
Date: Wed Mar 18 09:32:27 2020 -0700
wgl: Add stw_winsys callback to check which PFD flags should be added
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7535>
---
src/gallium/frontends/wgl/stw_winsys.h | 13 +++++++++++++
src/gallium/targets/libgl-d3d12/libgl_d3d12.c | 10 +++++++++-
src/gallium/targets/libgl-gdi/libgl_gdi.c | 14 +++++++++++++-
src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h | 3 +++
src/gallium/winsys/d3d12/wgl/d3d12_wgl_winsys.c | 7 +++++++
5 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/gallium/frontends/wgl/stw_winsys.h b/src/gallium/frontends/wgl/stw_winsys.h
index 99245fba2a8..236812afa5d 100644
--- a/src/gallium/frontends/wgl/stw_winsys.h
+++ b/src/gallium/frontends/wgl/stw_winsys.h
@@ -38,6 +38,12 @@ struct pipe_resource;
struct stw_shared_surface;
+typedef enum
+{
+ stw_pfd_gdi_support = 1 << 0,
+ stw_pfd_double_buffer = 1 << 1,
+} stw_pfd_flag;
+
struct stw_winsys
{
struct pipe_screen *
@@ -91,6 +97,13 @@ struct stw_winsys
struct stw_shared_surface *dest,
LPCRECT pRect,
ULONGLONG PresentHistoryToken );
+
+ /**
+ * Query whether the driver can support GDI and/or double-buffering in its
+ * pixel formats (optional).
+ */
+ unsigned
+ (*get_pfd_flags)( struct pipe_screen *screen );
};
boolean
diff --git a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
index 8789d719b58..f34bc4a6015 100644
--- a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
+++ b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
@@ -84,13 +84,21 @@ gdi_get_adapter_luid(struct pipe_screen *screen,
}
+static unsigned
+gdi_get_pfd_flags(struct pipe_screen *screen)
+{
+ return d3d12_wgl_get_pfd_flags(screen);
+}
+
+
static const struct stw_winsys stw_winsys = {
&gdi_screen_create,
&gdi_present,
&gdi_get_adapter_luid,
NULL, /* shared_surface_open */
NULL, /* shared_surface_close */
- NULL /* compose */
+ NULL, /* compose */
+ &gdi_get_pfd_flags
};
diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
index a806e64aef4..283e147f28f 100644
--- a/src/gallium/targets/libgl-gdi/libgl_gdi.c
+++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c
@@ -218,6 +218,17 @@ gdi_get_adapter_luid(struct pipe_screen* screen,
#endif
+static unsigned
+gdi_get_pfd_flags(struct pipe_screen *screen)
+{
+#ifdef GALLIUM_D3D12
+ if (use_d3d12)
+ return d3d12_wgl_get_pfd_flags(screen);
+#endif
+ return stw_pfd_gdi_support;
+}
+
+
static const struct stw_winsys stw_winsys = {
&gdi_screen_create,
&gdi_present,
@@ -228,7 +239,8 @@ static const struct stw_winsys stw_winsys = {
#endif
NULL, /* shared_surface_open */
NULL, /* shared_surface_close */
- NULL /* compose */
+ NULL, /* compose */
+ &gdi_get_pfd_flags,
};
diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
index 8a9d1f666cd..c24e111e1b0 100644
--- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
+++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
@@ -43,6 +43,9 @@ d3d12_wgl_present(struct pipe_screen *screen,
struct pipe_resource *res,
HDC hDC);
+unsigned
+d3d12_wgl_get_pfd_flags(struct pipe_screen *screen);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_winsys.c b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_winsys.c
index 6981381175e..7e84501f780 100644
--- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_winsys.c
+++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_winsys.c
@@ -48,3 +48,10 @@ d3d12_wgl_present(struct pipe_screen *screen,
{
screen->flush_frontbuffer(screen, res, 0, 0, hDC, NULL);
}
+
+unsigned
+d3d12_wgl_get_pfd_flags(struct pipe_screen *screen)
+{
+ (void)screen;
+ return stw_pfd_gdi_support;
+}
More information about the mesa-commit
mailing list