[Mesa-dev] [PATCH v2 1/2] egl/surfaceless: Define DRI_SWRastLoader extension when using swrast.

David Riley davidriley at chromium.org
Wed Jul 18 00:12:04 UTC 2018


Signed-off-by: David Riley <davidriley at chromium.org>
---
 src/egl/drivers/dri2/platform_surfaceless.c | 28 +++++++++++++++++----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c
index a0348a5e95..f5fe7119c6 100644
--- a/src/egl/drivers/dri2/platform_surfaceless.c
+++ b/src/egl/drivers/dri2/platform_surfaceless.c
@@ -260,6 +260,13 @@ static const __DRIimageLoaderExtension image_loader_extension = {
    .flushFrontBuffer = surfaceless_flush_front_buffer,
 };
 
+static const __DRIswrastLoaderExtension swrast_loader_extension = {
+   .base            = { __DRI_SWRAST_LOADER, 1 },
+   .getDrawableInfo = NULL,
+   .putImage        = NULL,
+   .getImage        = NULL,
+};
+
 #define DRM_RENDER_DEV_NAME  "%s/renderD%d"
 
 static const __DRIextension *image_loader_extensions[] = {
@@ -269,6 +276,14 @@ static const __DRIextension *image_loader_extensions[] = {
    NULL,
 };
 
+static const __DRIextension *swrast_loader_extensions[] = {
+   &swrast_loader_extension.base,
+   &image_loader_extension.base,
+   &image_lookup_extension.base,
+   &use_invalidate.base,
+   NULL,
+};
+
 static bool
 surfaceless_probe_device(_EGLDisplay *dpy, bool swrast)
 {
@@ -288,23 +303,28 @@ surfaceless_probe_device(_EGLDisplay *dpy, bool swrast)
       if (fd < 0)
          continue;
 
-      if (swrast)
+      if (swrast) {
          dri2_dpy->driver_name = strdup("kms_swrast");
-      else
+         dri2_dpy->loader_extensions = swrast_loader_extensions;
+      } else {
          dri2_dpy->driver_name = loader_get_driver_for_fd(fd);
+         dri2_dpy->loader_extensions = image_loader_extensions;
+      }
       if (!dri2_dpy->driver_name) {
          close(fd);
          continue;
       }
 
       dri2_dpy->fd = fd;
-      if (dri2_load_driver_dri3(dpy))
+      if (dri2_load_driver_dri3(dpy)) {
          return true;
+      }
 
       close(fd);
       dri2_dpy->fd = -1;
       free(dri2_dpy->driver_name);
       dri2_dpy->driver_name = NULL;
+      dri2_dpy->loader_extensions = NULL;
    }
 
    return false;
@@ -338,8 +358,6 @@ dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
       goto cleanup;
    }
 
-   dri2_dpy->loader_extensions = image_loader_extensions;
-
    if (!dri2_create_screen(disp)) {
       err = "DRI2: failed to create screen";
       goto cleanup;
-- 
2.18.0.203.gfac676dfb9-goog



More information about the mesa-dev mailing list