Module: Mesa Branch: master Commit: c28eb3c6aac99decd7563b4ef987c08aaf9c7a6d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c28eb3c6aac99decd7563b4ef987c08aaf9c7a6d
Author: Jesse Natalie <[email protected]> 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 <[email protected]> Reviewed-by: Erik Faye-Lund <[email protected]> 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; +} _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
