egl/surfaceless: Define DRI_SWRastLoader extension when using swrast.
authorDavid Riley <davidriley@chromium.org>
Wed, 18 Jul 2018 00:12:04 +0000 (17:12 -0700)
committerChad Versace <chadversary@chromium.org>
Tue, 31 Jul 2018 02:40:08 +0000 (19:40 -0700)
Signed-off-by: David Riley <davidriley@chromium.org>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
[chadv: Dropped spurious hunk]
Reviewed-by: Chad Versace <chadversary@chromium.org>
src/egl/drivers/dri2/platform_surfaceless.c

index a0348a5e95449dfc086711b2220db2e855bfe997..54bafaee0ef26533229ece3a0c1376418a3de604 100644 (file)
@@ -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,10 +303,13 @@ 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;
@@ -305,6 +323,7 @@ surfaceless_probe_device(_EGLDisplay *dpy, bool swrast)
       dri2_dpy->fd = -1;
       free(dri2_dpy->driver_name);
       dri2_dpy->driver_name = NULL;
+      dri2_dpy->loader_extensions = NULL;
    }
 
    return false;
@@ -338,8 +357,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;