egl/x11: resolve "initialization from incompatible pointer type" warning
[mesa.git] / src / gallium / auxiliary / target-helpers / inline_wrapper_sw_helper.h
index 0b4e740403400f828982d8f83d9c13877b41c1b9..4f38ba9f91999e6dace2cc0cd2d6a13d3bec3b72 100644 (file)
@@ -9,26 +9,34 @@
  * Try to wrap a hw screen with a software screen.
  * On failure will return given screen.
  */
-static INLINE struct pipe_screen *
+static inline struct pipe_screen *
 sw_screen_wrap(struct pipe_screen *screen)
 {
+#if defined(GALLIUM_SOFTPIPE) || defined(GALLIUM_LLVMPIPE)
    struct sw_winsys *sws;
-   struct pipe_screen *sw_screen;
+   struct pipe_screen *sw_screen = NULL;
+   const char *driver;
 
-   sws = wrapper_sw_winsys_warp_pipe_screen(screen);
+   driver = debug_get_option("GALLIUM_DRIVER", "native");
+   if (strcmp(driver, "native") == 0)
+      return screen;
+
+   sws = wrapper_sw_winsys_wrap_pipe_screen(screen);
    if (!sws)
       goto err;
 
-   sw_screen = sw_screen_create(sws);
-   if (sw_screen == screen)
+   sw_screen = sw_screen_create_named(sws, driver);
+
+   if (!sw_screen)
       goto err_winsys;
 
    return sw_screen;
 
 err_winsys:
-   sws->destroy(sws);
+   return wrapper_sw_winsys_dewrap_pipe_screen(sws);
 err:
-  return screen;
+#endif
+   return screen;
 }
 
 #endif