Mesa (main): wgl: Use HWND instead of HDC as primary framebuffer handle
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Sep 15 20:46:37 UTC 2021
Module: Mesa
Branch: main
Commit: bb706ca93a6b6f4f829e3e596a6cbbace8911295
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bb706ca93a6b6f4f829e3e596a6cbbace8911295
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Sat Sep 4 08:06:48 2021 -0700
wgl: Use HWND instead of HDC as primary framebuffer handle
EGL's native window is an HWND, so this removes the need to
GetDC from the creation path there.
Reviewed-by: Charmaine Lee <charmainel at vmware.com>
Reviewed By: Bill Kristiansen <billkris at microsoft.com>
Acked-by: Roland Scheidegger <sroland at vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12727>
---
src/gallium/frontends/wgl/stw_context.c | 2 +-
src/gallium/frontends/wgl/stw_ext_pbuffer.c | 10 ++--------
src/gallium/frontends/wgl/stw_framebuffer.c | 12 +++---------
src/gallium/frontends/wgl/stw_framebuffer.h | 2 +-
src/gallium/frontends/wgl/stw_winsys.h | 2 +-
src/gallium/targets/libgl-d3d12/libgl_d3d12.c | 4 ++--
src/gallium/targets/wgl/wgl.c | 4 ++--
src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp | 4 ++--
src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h | 2 +-
9 files changed, 15 insertions(+), 27 deletions(-)
diff --git a/src/gallium/frontends/wgl/stw_context.c b/src/gallium/frontends/wgl/stw_context.c
index a7e57c107b7..7c789f18b60 100644
--- a/src/gallium/frontends/wgl/stw_context.c
+++ b/src/gallium/frontends/wgl/stw_context.c
@@ -571,7 +571,7 @@ get_unlocked_refd_framebuffer_from_dc(HDC hDC)
*/
int iPixelFormat = get_matching_pixel_format(hDC);
if (iPixelFormat)
- fb = stw_framebuffer_create(hDC, iPixelFormat, STW_FRAMEBUFFER_WGL_WINDOW);
+ fb = stw_framebuffer_create(WindowFromDC(hDC), iPixelFormat, STW_FRAMEBUFFER_WGL_WINDOW);
if (!fb)
return NULL;
}
diff --git a/src/gallium/frontends/wgl/stw_ext_pbuffer.c b/src/gallium/frontends/wgl/stw_ext_pbuffer.c
index 28c97b8f9a6..9e0e564dbf1 100644
--- a/src/gallium/frontends/wgl/stw_ext_pbuffer.c
+++ b/src/gallium/frontends/wgl/stw_ext_pbuffer.c
@@ -82,7 +82,6 @@ wglCreatePbufferARB(HDC hCurrentDC,
DWORD dwStyle;
RECT rect;
HWND hWnd;
- HDC hDC;
int iDisplayablePixelFormat;
PIXELFORMATDESCRIPTOR pfd;
BOOL bRet;
@@ -239,16 +238,11 @@ wglCreatePbufferARB(HDC hCurrentDC,
assert(rect.bottom - rect.top == iHeight);
#endif
- hDC = GetDC(hWnd);
- if (!hDC) {
- return 0;
- }
-
/*
* We can't pass non-displayable pixel formats to GDI, which is why we
* create the framebuffer object before calling SetPixelFormat().
*/
- fb = stw_framebuffer_create(hDC, iPixelFormat, STW_FRAMEBUFFER_PBUFFER);
+ fb = stw_framebuffer_create(hWnd, iPixelFormat, STW_FRAMEBUFFER_PBUFFER);
if (!fb) {
SetLastError(ERROR_NO_SYSTEM_RESOURCES);
return NULL;
@@ -267,7 +261,7 @@ wglCreatePbufferARB(HDC hCurrentDC,
* We need to set a displayable pixel format on the hidden window DC
* so that wglCreateContext and wglMakeCurrent are not overruled by GDI.
*/
- bRet = SetPixelFormat(hDC, iDisplayablePixelFormat, &pfd);
+ bRet = SetPixelFormat(GetDC(hWnd), iDisplayablePixelFormat, &pfd);
assert(bRet);
return (HPBUFFERARB)fb;
diff --git a/src/gallium/frontends/wgl/stw_framebuffer.c b/src/gallium/frontends/wgl/stw_framebuffer.c
index 4a487462466..58488efcd6f 100644
--- a/src/gallium/frontends/wgl/stw_framebuffer.c
+++ b/src/gallium/frontends/wgl/stw_framebuffer.c
@@ -261,17 +261,11 @@ stw_call_window_proc(int nCode, WPARAM wParam, LPARAM lParam)
* with its mutex locked.
*/
struct stw_framebuffer *
-stw_framebuffer_create(HDC hdc, int iPixelFormat, enum stw_framebuffer_owner owner)
+stw_framebuffer_create(HWND hWnd, int iPixelFormat, enum stw_framebuffer_owner owner)
{
- HWND hWnd;
struct stw_framebuffer *fb;
const struct stw_pixelformat_info *pfi;
- /* We only support drawing to a window. */
- hWnd = WindowFromDC( hdc );
- if (!hWnd)
- return NULL;
-
fb = CALLOC_STRUCT( stw_framebuffer );
if (fb == NULL)
return NULL;
@@ -281,7 +275,7 @@ stw_framebuffer_create(HDC hdc, int iPixelFormat, enum stw_framebuffer_owner own
if (stw_dev->stw_winsys->create_framebuffer)
fb->winsys_framebuffer =
- stw_dev->stw_winsys->create_framebuffer(stw_dev->screen, hdc, iPixelFormat);
+ stw_dev->stw_winsys->create_framebuffer(stw_dev->screen, hWnd, iPixelFormat);
/*
* We often need a displayable pixel format to make GDI happy. Set it
@@ -493,7 +487,7 @@ DrvSetPixelFormat(HDC hdc, LONG iPixelFormat)
return bPbuffer;
}
- fb = stw_framebuffer_create(hdc, iPixelFormat, STW_FRAMEBUFFER_WGL_WINDOW);
+ fb = stw_framebuffer_create(WindowFromDC(hdc), iPixelFormat, STW_FRAMEBUFFER_WGL_WINDOW);
if (!fb) {
return FALSE;
}
diff --git a/src/gallium/frontends/wgl/stw_framebuffer.h b/src/gallium/frontends/wgl/stw_framebuffer.h
index be1b3371e9e..ee9faf5ef46 100644
--- a/src/gallium/frontends/wgl/stw_framebuffer.h
+++ b/src/gallium/frontends/wgl/stw_framebuffer.h
@@ -152,7 +152,7 @@ struct stw_framebuffer
* must be called when done
*/
struct stw_framebuffer *
-stw_framebuffer_create(HDC hdc, int iPixelFormat, enum stw_framebuffer_owner owner);
+stw_framebuffer_create(HWND hwnd, int iPixelFormat, enum stw_framebuffer_owner owner);
/**
diff --git a/src/gallium/frontends/wgl/stw_winsys.h b/src/gallium/frontends/wgl/stw_winsys.h
index 850560fa30d..66fb30eb8d4 100644
--- a/src/gallium/frontends/wgl/stw_winsys.h
+++ b/src/gallium/frontends/wgl/stw_winsys.h
@@ -131,7 +131,7 @@ struct stw_winsys
*/
struct stw_winsys_framebuffer *
(*create_framebuffer)( struct pipe_screen *screen,
- HDC hDC,
+ HWND hWnd,
int iPixelFormat );
/**
diff --git a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
index e83dbb3a0f5..4bd5a2d474a 100644
--- a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
+++ b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
@@ -94,10 +94,10 @@ gdi_get_pfd_flags(struct pipe_screen *screen)
static struct stw_winsys_framebuffer *
gdi_create_framebuffer(struct pipe_screen *screen,
- HDC hDC,
+ HWND hWnd,
int iPixelFormat)
{
- return d3d12_wgl_create_framebuffer(screen, hDC, iPixelFormat);
+ return d3d12_wgl_create_framebuffer(screen, hWnd, iPixelFormat);
}
static const char *
diff --git a/src/gallium/targets/wgl/wgl.c b/src/gallium/targets/wgl/wgl.c
index 9d6dbeaf621..db8f59813b5 100644
--- a/src/gallium/targets/wgl/wgl.c
+++ b/src/gallium/targets/wgl/wgl.c
@@ -253,12 +253,12 @@ wgl_get_pfd_flags(struct pipe_screen *screen)
static struct stw_winsys_framebuffer *
wgl_create_framebuffer(struct pipe_screen *screen,
- HDC hDC,
+ HWND hWnd,
int iPixelFormat)
{
#ifdef GALLIUM_D3D12
if (use_d3d12)
- return d3d12_wgl_create_framebuffer(screen, hDC, iPixelFormat);
+ return d3d12_wgl_create_framebuffer(screen, hWnd, iPixelFormat);
#endif
return NULL;
}
diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
index b96dc52517f..e9a343b90e2 100644
--- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
+++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_framebuffer.cpp
@@ -214,7 +214,7 @@ d3d12_wgl_framebuffer_get_resource(struct stw_winsys_framebuffer *pframebuffer,
struct stw_winsys_framebuffer *
d3d12_wgl_create_framebuffer(struct pipe_screen *screen,
- HDC hDC,
+ HWND hWnd,
int iPixelFormat)
{
const struct stw_pixelformat_info *pfi =
@@ -229,7 +229,7 @@ d3d12_wgl_create_framebuffer(struct pipe_screen *screen,
new (fb) struct d3d12_wgl_framebuffer();
- fb->window = WindowFromDC(hDC);
+ fb->window = hWnd;
fb->screen = d3d12_screen(screen);
fb->base.destroy = d3d12_wgl_framebuffer_destroy;
fb->base.resize = d3d12_wgl_framebuffer_resize;
diff --git a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
index ac5f2c75476..a690ade7471 100644
--- a/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
+++ b/src/gallium/winsys/d3d12/wgl/d3d12_wgl_public.h
@@ -50,7 +50,7 @@ d3d12_wgl_get_pfd_flags(struct pipe_screen *screen);
struct stw_winsys_framebuffer *
d3d12_wgl_create_framebuffer(struct pipe_screen *screen,
- HDC hDC,
+ HWND hWnd,
int iPixelFormat);
#ifdef __cplusplus
More information about the mesa-commit
mailing list