wgl: Add stw_winsys callback to check which PFD flags should be added

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7535>
This commit is contained in:
Jesse Natalie
2020-03-18 09:32:27 -07:00
committed by Erik Faye-Lund
parent bb9cc7ede4
commit c28eb3c6aa
5 changed files with 45 additions and 2 deletions
+13
View File
@@ -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
@@ -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
};
+13 -1
View File
@@ -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,
};
@@ -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
@@ -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;
}