Mesa (staging/22.1): glx/drisw: invalidate drawables upon binding context if flush extension exists

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 23 16:19:36 UTC 2022


Module: Mesa
Branch: staging/22.1
Commit: 58a830d9c457a2f4d819b9c1ff237b0585584766
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58a830d9c457a2f4d819b9c1ff237b0585584766

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Mon Jun 20 15:37:46 2022 -0400

glx/drisw: invalidate drawables upon binding context if flush extension exists

this forces surface resize as expected

cc: mesa-stable

fixes #6706

Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17147>
(cherry picked from commit ea005c9e0470adbaa167b6a1d2da5f04efe2035a)

---

 .pick_status.json   |  2 +-
 src/glx/drisw_glx.c | 12 +++++++++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 2ba088eb80c..4e9734571a9 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -652,7 +652,7 @@
         "description": "glx/drisw: invalidate drawables upon binding context if flush extension exists",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index a9c6aac40b3..9d3bfeb31b9 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -439,12 +439,18 @@ drisw_bind_context(struct glx_context *context, struct glx_context *old,
 
    driReleaseDrawables(&pcp->base);
 
-   if ((*psc->core->bindContext) (pcp->driContext,
+   if (!(*psc->core->bindContext) (pcp->driContext,
                                   pdraw ? pdraw->driDrawable : NULL,
                                   pread ? pread->driDrawable : NULL))
-      return Success;
+      return GLXBadContext;
+   if (psc->f) {
+      if (pdraw)
+         psc->f->invalidate(pdraw->driDrawable);
+      if (pread && (!pdraw || pread->driDrawable != pdraw->driDrawable))
+         psc->f->invalidate(pread->driDrawable);
+   }
 
-   return GLXBadContext;
+   return Success;
 }
 
 static void



More information about the mesa-commit mailing list