wgl: Refactor screen creation to a function
authorJesse Natalie <jenatali@microsoft.com>
Thu, 4 Feb 2021 15:58:06 +0000 (07:58 -0800)
committerMarge Bot <eric+marge@anholt.net>
Fri, 12 Feb 2021 17:00:37 +0000 (17:00 +0000)
Fixes: 8955980f ("gallium/targets/libgl-gdi: prefer d3d12 driver")
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Tested-by: Prodea Alexandru-Liviu <liviuprodea@yahoo.com>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4022
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8865>

src/gallium/targets/libgl-gdi/libgl_gdi.c

index ee55da0558ffadfa0f0f2bfe3548462d70eb55f5..85063d0d5cb3b67b531bfa5ff419a78ecd3f1199 100644 (file)
@@ -79,74 +79,77 @@ static boolean use_zink = FALSE;
 #endif
 
 static struct pipe_screen *
-gdi_screen_create(HDC hDC)
+gdi_screen_create_by_name(HDC hDC, const char* driver, struct sw_winsys *winsys)
 {
-   const char *default_driver;
-   const char *driver;
-   struct pipe_screen *screen = NULL;
-   struct sw_winsys *winsys;
-
-   winsys = gdi_create_sw_winsys();
-   if(!winsys)
-      goto no_winsys;
-
-#ifdef GALLIUM_D3D12
-   default_driver = "d3d12";
-#elif defined(GALLIUM_LLVMPIPE)
-   default_driver = "llvmpipe";
-#elif GALLIUM_SWR
-   default_driver = "swr";
-#elif defined(GALLIUM_SOFTPIPE)
-   default_driver = "softpipe";
-#else
-#error "no suitable default-driver"
-#endif
-
-   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
+   struct pipe_screen* screen = NULL;
 
 #ifdef GALLIUM_LLVMPIPE
    if (strcmp(driver, "llvmpipe") == 0) {
-      screen = llvmpipe_create_screen( winsys );
+      screen = llvmpipe_create_screen(winsys);
       if (screen)
          use_llvmpipe = TRUE;
    }
 #endif
 #ifdef GALLIUM_SWR
    if (strcmp(driver, "swr") == 0) {
-      screen = swr_create_screen( winsys );
+      screen = swr_create_screen(winsys);
       if (screen)
          use_swr = TRUE;
    }
 #endif
 #ifdef GALLIUM_D3D12
    if (strcmp(driver, "d3d12") == 0) {
-      screen = d3d12_wgl_create_screen( winsys, hDC );
+      screen = d3d12_wgl_create_screen(winsys, hDC);
       if (screen)
          use_d3d12 = TRUE;
    }
 #endif
 #ifdef GALLIUM_ZINK
    if (strcmp(driver, "zink") == 0) {
-       screen = zink_create_screen( winsys );
-       if (screen)
-           use_zink = TRUE;
+      screen = zink_create_screen(winsys);
+      if (screen)
+         use_zink = TRUE;
    }
 #endif
-   (void) driver;
-
 #ifdef GALLIUM_SOFTPIPE
-   if (screen == NULL)
-      screen = softpipe_create_screen( winsys );
+   if (strcmp(driver, "softpipe") == 0) {
+      screen = softpipe_create_screen(winsys);
+   }
+#endif
+
+   return screen;
+}
+
+static struct pipe_screen *
+gdi_screen_create(HDC hDC)
+{
+   const char *default_driver;
+   const char *driver;
+   struct pipe_screen *screen = NULL;
+   struct sw_winsys *winsys;
+
+   winsys = gdi_create_sw_winsys();
+   if (!winsys)
+      return screen;
+
+#ifdef GALLIUM_D3D12
+   default_driver = "d3d12";
+#elif defined(GALLIUM_LLVMPIPE)
+   default_driver = "llvmpipe";
+#elif GALLIUM_SWR
+   default_driver = "swr";
+#elif defined(GALLIUM_SOFTPIPE)
+   default_driver = "softpipe";
+#else
+#error "no suitable default-driver"
 #endif
+
+   driver = debug_get_option("GALLIUM_DRIVER", default_driver);
+   screen = gdi_screen_create_by_name(hDC, driver, winsys);
    if (!screen)
-      goto no_screen;
+      winsys->destroy(winsys);
 
    return screen;
-   
-no_screen:
-   winsys->destroy(winsys);
-no_winsys:
-   return NULL;
 }