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