Mesa (main): dri2: Require a loader with working buffer invalidation

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 17 21:01:01 UTC 2022


Module: Mesa
Branch: main
Commit: 68aa2099fa4d8b5b1df030da5d348435c4aa8c05
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=68aa2099fa4d8b5b1df030da5d348435c4aa8c05

Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jun  2 14:40:33 2021 -0400

dri2: Require a loader with working buffer invalidation

Reviewed-by: Emil Velikov <emil.l.velikov at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10808>

---

 src/gallium/frontends/dri/dri2.c         | 2 --
 src/gallium/frontends/dri/dri_drawable.c | 2 +-
 src/gallium/frontends/dri/dri_screen.c   | 9 +--------
 src/gallium/frontends/dri/dri_screen.h   | 3 ---
 src/gallium/frontends/dri/dri_util.c     | 3 +++
 5 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c
index 8ddcae04f1b..611ac5cd0c8 100644
--- a/src/gallium/frontends/dri/dri2.c
+++ b/src/gallium/frontends/dri/dri2.c
@@ -2477,7 +2477,6 @@ dri2_init_screen(__DRIscreen * sPriv)
 
    screen->can_share_buffer = true;
    screen->auto_fake_front = dri_with_format(sPriv);
-   screen->broken_invalidate = !sPriv->dri2.useInvalidate;
    screen->lookup_egl_image = dri2_lookup_egl_image;
 
    const __DRIimageLookupExtension *loader = sPriv->dri2.image;
@@ -2540,7 +2539,6 @@ dri_kms_init_screen(__DRIscreen * sPriv)
 
    screen->can_share_buffer = false;
    screen->auto_fake_front = dri_with_format(sPriv);
-   screen->broken_invalidate = !sPriv->dri2.useInvalidate;
    screen->lookup_egl_image = dri2_lookup_egl_image;
 
    const __DRIimageLookupExtension *loader = sPriv->dri2.image;
diff --git a/src/gallium/frontends/dri/dri_drawable.c b/src/gallium/frontends/dri/dri_drawable.c
index 2c4ba4d2009..2cf977eb05c 100644
--- a/src/gallium/frontends/dri/dri_drawable.c
+++ b/src/gallium/frontends/dri/dri_drawable.c
@@ -75,7 +75,7 @@ dri_st_framebuffer_validate(struct st_context_iface *stctx,
       lastStamp = drawable->dPriv->lastStamp;
       new_stamp = (drawable->texture_stamp != lastStamp);
 
-      if (new_stamp || new_mask || screen->broken_invalidate) {
+      if (new_stamp || new_mask) {
          if (new_stamp && drawable->update_drawable_info)
             drawable->update_drawable_info(drawable);
 
diff --git a/src/gallium/frontends/dri/dri_screen.c b/src/gallium/frontends/dri/dri_screen.c
index 661cea4cca3..f331057fdcb 100644
--- a/src/gallium/frontends/dri/dri_screen.c
+++ b/src/gallium/frontends/dri/dri_screen.c
@@ -763,14 +763,7 @@ static int
 dri_get_param(struct st_manager *smapi,
               enum st_manager_param param)
 {
-   struct dri_screen *screen = (struct dri_screen *)smapi;
-
-   switch(param) {
-   case ST_MANAGER_BROKEN_INVALIDATE:
-      return screen->broken_invalidate;
-   default:
-      return 0;
-   }
+   return 0;
 }
 
 void
diff --git a/src/gallium/frontends/dri/dri_screen.h b/src/gallium/frontends/dri/dri_screen.h
index 0ee2feb5616..fc7d63699c4 100644
--- a/src/gallium/frontends/dri/dri_screen.h
+++ b/src/gallium/frontends/dri/dri_screen.h
@@ -53,9 +53,6 @@ struct dri_screen
    struct st_manager base;
    struct st_api *st_api;
 
-   /* on old libGL's invalidate doesn't get called as it should */
-   boolean broken_invalidate;
-
    /* dri */
    __DRIscreen *sPriv;
    boolean throttle;
diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c
index 7d2665a2171..bdaedf12594 100644
--- a/src/gallium/frontends/dri/dri_util.c
+++ b/src/gallium/frontends/dri/dri_util.c
@@ -121,6 +121,9 @@ driCreateNewScreen2(int scrn, int fd,
     }
 
     setupLoaderExtensions(psp, extensions);
+    // dri2 drivers require working invalidate
+    if (fd != -1 && !psp->dri2.useInvalidate)
+       return NULL;
 
     psp->loaderPrivate = data;
 



More information about the mesa-commit mailing list