Mesa (master): wgl: Marshal HDC into screen creation and LUID querying

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 18 10:43:32 UTC 2020


Module: Mesa
Branch: master
Commit: f6d2d3cb580ca24312669f01cc27354ad6c26c7a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f6d2d3cb580ca24312669f01cc27354ad6c26c7a

Author: Jesse Natalie <jenatali at ntdev.microsoft.com>
Date:   Tue Mar 17 14:40:47 2020 -0700

wgl: Marshal HDC into screen creation and LUID querying

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_device.c          | 10 +++++-----
 src/gallium/frontends/wgl/stw_device.h          |  2 +-
 src/gallium/frontends/wgl/stw_ext_pixelformat.c | 23 ++++++++++-------------
 src/gallium/frontends/wgl/stw_framebuffer.c     |  2 +-
 src/gallium/frontends/wgl/stw_pixelformat.c     | 16 ++++++----------
 src/gallium/frontends/wgl/stw_pixelformat.h     |  4 ++--
 src/gallium/frontends/wgl/stw_winsys.h          |  3 ++-
 src/gallium/targets/libgl-d3d12/libgl_d3d12.c   |  4 ++--
 src/gallium/targets/libgl-gdi/libgl_gdi.c       |  4 ++--
 9 files changed, 31 insertions(+), 37 deletions(-)

diff --git a/src/gallium/frontends/wgl/stw_device.c b/src/gallium/frontends/wgl/stw_device.c
index f5064da9f29..b8cfeb8ec9f 100644
--- a/src/gallium/frontends/wgl/stw_device.c
+++ b/src/gallium/frontends/wgl/stw_device.c
@@ -81,14 +81,14 @@ get_refresh_rate(void)
 }
 
 static bool
-init_screen(const struct stw_winsys *stw_winsys)
+init_screen(const struct stw_winsys *stw_winsys, HDC hdc)
 {
-   struct pipe_screen *screen = stw_winsys->create_screen();
+   struct pipe_screen *screen = stw_winsys->create_screen(hdc);
    if (!screen)
       return false;
 
    if (stw_winsys->get_adapter_luid)
-      stw_winsys->get_adapter_luid(screen, &stw_dev->AdapterLuid);
+      stw_winsys->get_adapter_luid(screen, hdc, &stw_dev->AdapterLuid);
 
    stw_dev->smapi->screen = screen;
    stw_dev->screen = screen;
@@ -151,13 +151,13 @@ error1:
 }
 
 boolean
-stw_init_screen()
+stw_init_screen(HDC hdc)
 {
    EnterCriticalSection(&stw_dev->screen_mutex);
 
    if (!stw_dev->screen_initialized) {
       stw_dev->screen_initialized = true;
-      if (!init_screen(stw_dev->stw_winsys)) {
+      if (!init_screen(stw_dev->stw_winsys, hdc)) {
          LeaveCriticalSection(&stw_dev->screen_mutex);
          return false;
       }
diff --git a/src/gallium/frontends/wgl/stw_device.h b/src/gallium/frontends/wgl/stw_device.h
index a2cd6c7487c..6c57e874a57 100644
--- a/src/gallium/frontends/wgl/stw_device.h
+++ b/src/gallium/frontends/wgl/stw_device.h
@@ -91,7 +91,7 @@ struct stw_device
 extern struct stw_device *stw_dev;
 
 boolean
-stw_init_screen(void);
+stw_init_screen(HDC hdc);
 
 static inline struct stw_context *
 stw_lookup_context_locked( DHGLRC dhglrc )
diff --git a/src/gallium/frontends/wgl/stw_ext_pixelformat.c b/src/gallium/frontends/wgl/stw_ext_pixelformat.c
index 8fc6da1df2e..aee39b2974f 100644
--- a/src/gallium/frontends/wgl/stw_ext_pixelformat.c
+++ b/src/gallium/frontends/wgl/stw_ext_pixelformat.c
@@ -49,12 +49,12 @@
 
 
 static boolean
-stw_query_attrib(int iPixelFormat, int iLayerPlane, int attrib, int *pvalue)
+stw_query_attrib(HDC hdc, int iPixelFormat, int iLayerPlane, int attrib, int *pvalue)
 {
    uint count;
    const struct stw_pixelformat_info *pfi;
 
-   count = stw_pixelformat_get_extended_count();
+   count = stw_pixelformat_get_extended_count(hdc);
 
    if (attrib == WGL_NUMBER_PIXEL_FORMATS_ARB) {
       *pvalue = (int) count;
@@ -331,7 +331,8 @@ struct stw_pixelformat_score
 
 
 static BOOL
-score_pixelformats(struct stw_pixelformat_score *scores,
+score_pixelformats(HDC hdc,
+                   struct stw_pixelformat_score *scores,
                    uint count,
                    int attribute,
                    int expected_value)
@@ -357,7 +358,7 @@ score_pixelformats(struct stw_pixelformat_score *scores,
    for (index = 0; index < count; index++) {
       int actual_value;
 
-      if (!stw_query_attrib(index + 1, 0, attribute, &actual_value))
+      if (!stw_query_attrib(hdc, index + 1, 0, attribute, &actual_value))
          return FALSE;
 
       if (ami->exact) {
@@ -403,7 +404,7 @@ wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
     * points for a mismatch when the match does not have to be exact.
     * Set a score to 0 if there is a mismatch for an exact match criteria.
     */
-   count = stw_pixelformat_get_extended_count();
+   count = stw_pixelformat_get_extended_count(hdc);
    scores = (struct stw_pixelformat_score *)
       MALLOC(count * sizeof(struct stw_pixelformat_score));
    if (scores == NULL)
@@ -417,7 +418,7 @@ wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
     */
    if (piAttribIList != NULL) {
       while (*piAttribIList != 0) {
-         if (!score_pixelformats(scores, count, piAttribIList[0],
+         if (!score_pixelformats(hdc, scores, count, piAttribIList[0],
                                  piAttribIList[1])) {
             FREE(scores);
             return FALSE;
@@ -427,7 +428,7 @@ wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
    }
    if (pfAttribFList != NULL) {
       while (*pfAttribFList != 0) {
-         if (!score_pixelformats(scores, count, (int) pfAttribFList[0],
+         if (!score_pixelformats(hdc, scores, count, (int) pfAttribFList[0],
                                  (int) pfAttribFList[1])) {
             FREE(scores);
             return FALSE;
@@ -484,12 +485,10 @@ wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat, int iLayerPlane,
 {
    UINT i;
 
-   (void) hdc;
-
    for (i = 0; i < nAttributes; i++) {
       int value = 0;
 
-      if (!stw_query_attrib(iPixelFormat, iLayerPlane,
+      if (!stw_query_attrib(hdc, iPixelFormat, iLayerPlane,
                              piAttributes[i], &value))
          return FALSE;
       pfValues[i] = (FLOAT) value;
@@ -506,10 +505,8 @@ wglGetPixelFormatAttribivARB(HDC hdc, int iPixelFormat, int iLayerPlane,
 {
    UINT i;
 
-   (void) hdc;
-
    for (i = 0; i < nAttributes; i++) {
-      if (!stw_query_attrib(iPixelFormat, iLayerPlane,
+      if (!stw_query_attrib(hdc, iPixelFormat, iLayerPlane,
                             piAttributes[i], &piValues[i]))
          return FALSE;
    }
diff --git a/src/gallium/frontends/wgl/stw_framebuffer.c b/src/gallium/frontends/wgl/stw_framebuffer.c
index 6d3a0402130..49911a6d48d 100644
--- a/src/gallium/frontends/wgl/stw_framebuffer.c
+++ b/src/gallium/frontends/wgl/stw_framebuffer.c
@@ -431,7 +431,7 @@ DrvSetPixelFormat(HDC hdc, LONG iPixelFormat)
       return FALSE;
 
    index = (uint) iPixelFormat - 1;
-   count = stw_pixelformat_get_count();
+   count = stw_pixelformat_get_count(hdc);
    if (index >= count)
       return FALSE;
 
diff --git a/src/gallium/frontends/wgl/stw_pixelformat.c b/src/gallium/frontends/wgl/stw_pixelformat.c
index c4f8ff194ea..dc922afd140 100644
--- a/src/gallium/frontends/wgl/stw_pixelformat.c
+++ b/src/gallium/frontends/wgl/stw_pixelformat.c
@@ -311,9 +311,9 @@ stw_pixelformat_init(void)
 
 
 uint
-stw_pixelformat_get_count(void)
+stw_pixelformat_get_count(HDC hdc)
 {
-   if (!stw_init_screen())
+   if (!stw_init_screen(hdc))
       return 0;
 
    return stw_dev->pixelformat_count;
@@ -321,9 +321,9 @@ stw_pixelformat_get_count(void)
 
 
 uint
-stw_pixelformat_get_extended_count(void)
+stw_pixelformat_get_extended_count(HDC hdc)
 {
-   if (!stw_init_screen())
+   if (!stw_init_screen(hdc))
       return 0;
 
    return stw_dev->pixelformat_extended_count;
@@ -355,12 +355,10 @@ DrvDescribePixelFormat(HDC hdc, INT iPixelFormat, ULONG cjpfd,
    uint count;
    const struct stw_pixelformat_info *pfi;
 
-   (void) hdc;
-
    if (!stw_dev)
       return 0;
 
-   count = stw_pixelformat_get_count();
+   count = stw_pixelformat_get_count(hdc);
 
    if (ppfd == NULL)
       return count;
@@ -425,9 +423,7 @@ stw_pixelformat_choose(HDC hdc, CONST PIXELFORMATDESCRIPTOR *ppfd)
    uint bestindex;
    uint bestdelta;
 
-   (void) hdc;
-
-   count = stw_pixelformat_get_extended_count();
+   count = stw_pixelformat_get_extended_count(hdc);
    bestindex = 0;
    bestdelta = ~0U;
 
diff --git a/src/gallium/frontends/wgl/stw_pixelformat.h b/src/gallium/frontends/wgl/stw_pixelformat.h
index e3ab1ee7514..25e265a12bb 100644
--- a/src/gallium/frontends/wgl/stw_pixelformat.h
+++ b/src/gallium/frontends/wgl/stw_pixelformat.h
@@ -53,10 +53,10 @@ void
 stw_pixelformat_init( void );
 
 uint
-stw_pixelformat_get_count( void );
+stw_pixelformat_get_count( HDC hdc );
 
 uint
-stw_pixelformat_get_extended_count( void );
+stw_pixelformat_get_extended_count( HDC hdc );
 
 const struct stw_pixelformat_info *
 stw_pixelformat_get_info( int iPixelFormat );
diff --git a/src/gallium/frontends/wgl/stw_winsys.h b/src/gallium/frontends/wgl/stw_winsys.h
index 83ffd6bda36..99245fba2a8 100644
--- a/src/gallium/frontends/wgl/stw_winsys.h
+++ b/src/gallium/frontends/wgl/stw_winsys.h
@@ -41,7 +41,7 @@ struct stw_shared_surface;
 struct stw_winsys
 {
    struct pipe_screen *
-   (*create_screen)( void );
+   (*create_screen)( HDC hDC );
 
    /* XXX is it actually possible to have non-zero level/layer ??? */
    /**
@@ -59,6 +59,7 @@ struct stw_winsys
     */
    boolean
    (*get_adapter_luid)( struct pipe_screen *screen,
+                        HDC hDC,
                         LUID *pAdapterLuid );
 
    /**
diff --git a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
index 01037ed3440..9f98c7f2437 100644
--- a/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
+++ b/src/gallium/targets/libgl-d3d12/libgl_d3d12.c
@@ -39,7 +39,7 @@
 #include "d3d12/d3d12_public.h"
 
 static struct pipe_screen *
-gdi_screen_create(void)
+gdi_screen_create(HDC hDC)
 {
    struct pipe_screen *screen = NULL;
    struct sw_winsys *winsys;
@@ -50,7 +50,7 @@ gdi_screen_create(void)
       goto no_winsys;
 
    if (stw_dev && stw_dev->callbacks.pfnGetAdapterLuid) {
-      stw_dev->callbacks.pfnGetAdapterLuid(NULL, &local_luid);
+      stw_dev->callbacks.pfnGetAdapterLuid(hDC, &local_luid);
       adapter_luid = &local_luid;
    }
    screen = d3d12_create_screen( winsys, adapter_luid );
diff --git a/src/gallium/targets/libgl-gdi/libgl_gdi.c b/src/gallium/targets/libgl-gdi/libgl_gdi.c
index 94739bfb165..4813e252402 100644
--- a/src/gallium/targets/libgl-gdi/libgl_gdi.c
+++ b/src/gallium/targets/libgl-gdi/libgl_gdi.c
@@ -78,7 +78,7 @@ static boolean use_zink = FALSE;
 #endif
 
 static struct pipe_screen *
-gdi_screen_create(void)
+gdi_screen_create(HDC hDC)
 {
    const char *default_driver;
    const char *driver;
@@ -119,7 +119,7 @@ gdi_screen_create(void)
    if (strcmp(driver, "d3d12") == 0) {
       LUID* adapter_luid = NULL, local_luid;
       if (stw_dev && stw_dev->callbacks.pfnGetAdapterLuid) {
-         stw_dev->callbacks.pfnGetAdapterLuid(NULL, &local_luid);
+         stw_dev->callbacks.pfnGetAdapterLuid(hDC, &local_luid);
          adapter_luid = &local_luid;
       }
       screen = d3d12_create_screen( winsys, adapter_luid );



More information about the mesa-commit mailing list